告别U盘传文件!手把手教你用iSCSI在CentOS 7上搭建共享硬盘(附targetcli配置详解)
2026/6/1 12:25:40 网站建设 项目流程

告别U盘传文件!手把手教你用iSCSI在CentOS 7上搭建共享硬盘

每次看到同事拿着U盘在服务器间来回拷贝数据,我都忍不住想推荐iSCSI这个神器。想象一下,把远程服务器的硬盘直接挂载到本地,像操作本地磁盘一样读写文件,还能跨平台共享——这才是现代IT人该有的文件传输方式。

iSCSI特别适合需要频繁传输大文件的开发测试团队。相比传统的NFS或Samba,它直接工作在块设备层,性能更高、延迟更低。最近帮一个游戏工作室搭建了iSCSI环境,他们的美术资源动辄几十GB,现在团队成员都能直接编辑服务器上的素材库,再也不用担心版本混乱了。

1. 为什么选择iSCSI而不是其他共享方案?

在开始配置前,我们先理清几个关键概念。iSCSI本质上是通过网络传输SCSI指令,让客户端能够像访问本地硬盘一样操作远程存储。这与基于文件层的NFS/Samba有本质区别:

特性iSCSINFS/Samba
协议层级块设备层文件层
性能更高(直连磁盘)受文件系统开销影响
适用场景数据库、虚拟机磁盘普通文件共享
跨平台兼容性优秀(标准协议)优秀
配置复杂度中等简单

实际测试中,在千兆网络环境下,iSCSI的连续读写速度能达到110MB/s,而NFS通常在90MB/s左右。更重要的是,iSCSI支持直接挂载为本地磁盘,这意味着:

  • 可以对其分区、格式化
  • 支持所有文件系统类型
  • 能够运行chkdsk等磁盘工具
  • 适合作为虚拟机的存储后端

2. 服务端配置全流程

2.1 环境准备与依赖安装

首先确保你的CentOS 7系统已经更新到最新:

yum update -y && reboot

安装必要的工具链:

yum install -y targetcli lvm2

提示:如果使用LVM管理存储,建议提前安装lvm2包。虽然本次演示使用原始磁盘,但LVM在生产环境中更灵活。

启动服务并设置开机自启:

systemctl enable target --now

2.2 存储后端配置

假设我们有一块未使用的磁盘/dev/sdb,首先用fdisk查看状态:

fdisk -l /dev/sdb

进入targetcli交互式配置界面:

targetcli

创建块存储后端(这里演示原始磁盘用法,生产环境建议使用LVM):

/backstores/block create dev=/dev/sdb name=shared_disk

2.3 iSCSI目标创建与访问控制

创建iSCSI目标标识符(遵循iqn命名规范):

/iscsi create iqn.2024-07.com.example:server.disk1

将存储后端关联到目标:

/iscsi/iqn.2024-07.com.example:server.disk1/tpg1/luns create /backstores/block/shared_disk

设置访问控制列表(ACL),只允许特定客户端连接:

/iscsi/iqn.2024-07.com.example:server.disk1/tpg1/acls create iqn.2024-07.com.example:client.node1

配置监听地址(替换为你的服务器IP):

/iscsi/iqn.2024-07.com.example:server.disk1/tpg1/portals create 192.168.1.100

最终配置结构应该类似:

o- / .......................................................................................................... [...] o- backstores ............................................................................................. [...] | o- block ................................................................................ [Storage Objects: 1] | | o- shared_disk ................................................... [/dev/sdb (0 bytes) write-thru activated] o- iscsi ................................................................................................ [Targets: 1] o- iqn.2024-07.com.example:server.disk1 ............................................................... [TPGs: 1] o- tpg1 ........................................................................................ [gen-acls, no-auth] o- acls ................................................................................................ [ACLs: 1] | o- iqn.2024-07.com.example:client.node1 ....................................................... [Mapped LUNs: 1] | o- mapped_lun0 ......................................................... [lun0 block/shared_disk (rw)] o- luns ................................................................................................ [LUNs: 1] | o- lun0 ................................................ [block/shared_disk (/dev/sdb) (default_tg_pt_gp)] o- portals .......................................................................................... [Portals: 1] o- 192.168.1.100:3260 ................................................................................... [OK]

输入exit保存退出,然后重启服务使配置生效:

systemctl restart target

2.4 防火墙与SELinux配置

开放iSCSI默认端口:

firewall-cmd --permanent --add-port=3260/tcp firewall-cmd --reload

如果使用SELinux,需要调整策略:

setsebool -P iscsid_use_tcp_port=1

3. 客户端连接指南

3.1 客户端环境准备

在需要连接iSCSI存储的客户端机器上安装必要软件:

yum install -y iscsi-initiator-utils

编辑initiator名称配置文件,必须与服务端ACL设置的名称一致:

echo "InitiatorName=iqn.2024-07.com.example:client.node1" > /etc/iscsi/initiatorname.iscsi

启动服务:

systemctl enable iscsid --now

3.2 发现与连接存储

发现目标存储:

iscsiadm -m discovery -t st -p 192.168.1.100

建立连接:

iscsiadm -m node -T iqn.2024-07.com.example:server.disk1 -p 192.168.1.100 -l

设置开机自动连接:

iscsiadm -m node -T iqn.2024-07.com.example:server.disk1 -p 192.168.1.100 --op update -n node.startup -v automatic

验证磁盘是否可见:

lsblk

你应该能看到新磁盘(通常是/dev/sdX,具体字母取决于现有磁盘数量)。

3.3 磁盘初始化与挂载

分区(如果需要):

fdisk /dev/sdX

创建文件系统(以ext4为例):

mkfs.ext4 /dev/sdX1

创建挂载点并设置自动挂载:

mkdir /mnt/iscsi_disk echo "/dev/sdX1 /mnt/iscsi_disk ext4 _netdev 0 0" >> /etc/fstab mount -a

4. 常见问题排查指南

4.1 连接失败排查步骤

  1. 检查网络连通性

    ping 192.168.1.100 telnet 192.168.1.100 3260
  2. 验证服务状态

    systemctl status target # 服务端 systemctl status iscsid # 客户端
  3. 检查ACL名称匹配

    • 服务端:targetcli ls /iscsi/iqn.2024-07.com.example:server.disk1/tpg1/acls
    • 客户端:cat /etc/iscsi/initiatorname.iscsi
  4. 查看日志信息

    journalctl -u target -f # 服务端 journalctl -u iscsid -f # 客户端

4.2 性能优化建议

  • 网络配置

    • 使用独立的网络接口用于iSCSI流量
    • 启用Jumbo Frame(MTU=9000)
  • 存储配置

    # 调整IO调度器为deadline echo 'ACTION=="add|change", KERNEL=="sd*", ATTR{queue/scheduler}="deadline"' > /etc/udev/rules.d/60-iscsi.rules
  • 客户端参数优化

    # 增加队列深度 echo "options scsi_mod cmd_per_lun=32" > /etc/modprobe.d/iscsi.conf

4.3 多路径配置(可选)

对于高可用环境,建议配置多路径IO:

yum install -y device-mapper-multipath mpathconf --enable --with_multipathd y

配置示例(/etc/multipath.conf):

devices { device { vendor "LIO-ORG" product "*" path_grouping_policy "failover" path_selector "round-robin 0" rr_weight "uniform" } }

5. 高级应用场景

5.1 作为虚拟机存储后端

在KVM环境中,可以直接使用iSCSI磁盘作为虚拟机存储:

<disk type='network' device='disk'> <driver name='qemu' type='raw'/> <source protocol='iscsi' name='iqn.2024-07.com.example:server.disk1/0'> <host name='192.168.1.100' port='3260'/> </source> <target dev='vdb' bus='virtio'/> </disk>

5.2 自动化部署脚本

对于需要批量部署的场景,可以使用非交互式配置:

# 服务端自动化配置 targetcli /backstores/block create dev=/dev/sdb name=shared_disk targetcli /iscsi create iqn.2024-07.com.example:server.disk1 targetcli /iscsi/iqn.2024-07.com.example:server.disk1/tpg1/luns create /backstores/block/shared_disk targetcli /iscsi/iqn.2024-07.com.example:server.disk1/tpg1/acls create iqn.2024-07.com.example:client.node1 targetcli /iscsi/iqn.2024-07.com.example:server.disk1/tpg1/portals create 192.168.1.100

5.3 安全加固措施

  1. 启用CHAP认证

    /iscsi/iqn.2024-07.com.example:server.disk1/tpg1 set attribute authentication=1 /iscsi/iqn.2024-07.com.example:server.disk1/tpg1 set attribute generate_node_acls=0 /iscsi/iqn.2024-07.com.example:server.disk1/tpg1/acls/iqn.2024-07.com.example:client.node1 set auth userid=username /iscsi/iqn.2024-07.com.example:server.disk1/tpg1/acls/iqn.2024-07.com.example:client.node1 set auth password=password
  2. 网络隔离

    • 使用VLAN隔离iSCSI流量
    • 配置防火墙只允许特定IP访问3260端口
  3. 定期更新

    yum update targetcli -y

在实际项目中,我发现iSCSI最令人惊喜的是它的稳定性——曾经有个配置好的iSCSI磁盘连续工作了600多天没有出现任何问题。对于需要频繁访问远程存储的场景,这绝对比U盘拷贝或NFS共享可靠得多。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询