Linux中利用tgt搭建IP-SAN服务器,是通过iSCSI协议将本地块设备(硬盘/LVM/文件)暴露给远程主机;安装tgt后配置targets.conf定义唯一IQN target、绑定LUN并设置ACL或CHAP认证,重载配置即可提供网络块存储服务。

在 Linux 中利用 tgt(SCSI Target Framework)搭建 IP-SAN 存储服务器,本质是将本地块设备(如硬盘、LVM 卷、文件模拟磁盘)通过 iSCSI 协议暴露给远程主机(Initiator),实现网络块存储服务。tgt 是轻量、稳定、内建于主流发行版的开源 iSCSI target 实现,适合中小规模 IP-SAN 场景。
安装与启用 tgt 服务
绝大多数现代 Linux 发行版(CentOS/RHEL 7+、Ubuntu 18.04+、Debian 10+)已将 targetd 或 scsi-target-utils(含 tgt)纳入官方仓库:
- CentOS/RHEL 7/8:
yum install -y scsi-target-utils(RHEL 8+ 推荐用targetcli,但 tgt 仍可手动编译或启用兼容包) - Ubuntu/Debian:
apt install -y tgt
安装后启动并设为开机自启:
systemctl enable tgtdsystemctl start tgtd- 检查状态:
systemctl status tgtd,确认运行中且无报错
配置 iSCSI Target(LUN)
tgt 使用 /etc/tgt/targets.conf 进行主配置。基本结构包括 target 定义、LUN 绑定和访问控制:
- 每个 target 以
格式声明(IQN 必须全局唯一,建议按日期+域名+标识命名) - LUN 通常绑定一个后端存储对象:物理磁盘(
/dev/sdb)、LVM 逻辑卷(/dev/vg0/lv_data)或稀疏文件(/var/lib/tgt/disks/lun0.img) - 推荐使用 LVM 卷或专用分区,避免直接使用系统盘;若用文件模拟,需提前创建并启用 O_DIRECT(提高性能):
truncate -s 100G /var/lib/tgt/disks/lun0.img,再在配置中指定backing-store /var/lib/tgt/disks/lun0.img
示例片段(追加到 /etc/tgt/targets.conf):
backing-store /dev/vg0/lv_data
initiator-address 192.168.100.0/24
# 可选:CHAP 认证增强安全
incominguser admin secret123
应用配置并验证 target 状态
修改配置后无需重启服务,执行重载即可生效:
-
tgt-admin --execute:加载所有 targets.conf 中的新/变更配置 -
tgtadm --mode target --op show:列出当前所有 active target 及其 LUN、状态、ACL 等信息 - 查看监听端口:
ss -tlnp | grep :3260(iSCSI 默认端口为 3260)
确保防火墙放行端口(如 firewalld):
firewall-cmd --permanent --add-port=3260/tcpfirewall-cmd --reload
客户端连接与挂载(简要验证)
在 Linux Initiator 上安装 open-iscsi:
- Ubuntu/Debian:
apt install -y open-iscsi - CentOS:
yum install -y iscsi-initiator-utils
发现并登录 target:
-
iscsiadm -m discovery -t st -p 192.168.100.10(替换为 tgt 服务器 IP) iscsiadm -m node -T iqn.2024-01.com.example:storage01 -p 192.168.100.10 --login- 登录成功后,
lsblk应可见新块设备(如/dev/sdc),可格式化并挂载使用
注意:生产环境务必配置 CHAP 认证、网络隔离(VLAN/专用网段)、多路径(multipath)及定期健康检查。











