告别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 --now2.2 存储后端配置假设我们有一块未使用的磁盘/dev/sdb首先用fdisk查看状态fdisk -l /dev/sdb进入targetcli交互式配置界面targetcli创建块存储后端这里演示原始磁盘用法生产环境建议使用LVM/backstores/block create dev/dev/sdb nameshared_disk2.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 target2.4 防火墙与SELinux配置开放iSCSI默认端口firewall-cmd --permanent --add-port3260/tcp firewall-cmd --reload如果使用SELinux需要调整策略setsebool -P iscsid_use_tcp_port13. 客户端连接指南3.1 客户端环境准备在需要连接iSCSI存储的客户端机器上安装必要软件yum install -y iscsi-initiator-utils编辑initiator名称配置文件必须与服务端ACL设置的名称一致echo InitiatorNameiqn.2024-07.com.example:client.node1 /etc/iscsi/initiatorname.iscsi启动服务systemctl enable iscsid --now3.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 -a4. 常见问题排查指南4.1 连接失败排查步骤检查网络连通性ping 192.168.1.100 telnet 192.168.1.100 3260验证服务状态systemctl status target # 服务端 systemctl status iscsid # 客户端检查ACL名称匹配服务端targetcli ls /iscsi/iqn.2024-07.com.example:server.disk1/tpg1/acls客户端cat /etc/iscsi/initiatorname.iscsi查看日志信息journalctl -u target -f # 服务端 journalctl -u iscsid -f # 客户端4.2 性能优化建议网络配置使用独立的网络接口用于iSCSI流量启用Jumbo FrameMTU9000存储配置# 调整IO调度器为deadline echo ACTIONadd|change, KERNELsd*, ATTR{queue/scheduler}deadline /etc/udev/rules.d/60-iscsi.rules客户端参数优化# 增加队列深度 echo options scsi_mod cmd_per_lun32 /etc/modprobe.d/iscsi.conf4.3 多路径配置可选对于高可用环境建议配置多路径IOyum install -y device-mapper-multipath mpathconf --enable --with_multipathd y配置示例/etc/multipath.confdevices { device { vendor LIO-ORG product * path_grouping_policy failover path_selector round-robin 0 rr_weight uniform } }5. 高级应用场景5.1 作为虚拟机存储后端在KVM环境中可以直接使用iSCSI磁盘作为虚拟机存储disk typenetwork devicedisk driver nameqemu typeraw/ source protocoliscsi nameiqn.2024-07.com.example:server.disk1/0 host name192.168.1.100 port3260/ /source target devvdb busvirtio/ /disk5.2 自动化部署脚本对于需要批量部署的场景可以使用非交互式配置# 服务端自动化配置 targetcli /backstores/block create dev/dev/sdb nameshared_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.1005.3 安全加固措施启用CHAP认证/iscsi/iqn.2024-07.com.example:server.disk1/tpg1 set attribute authentication1 /iscsi/iqn.2024-07.com.example:server.disk1/tpg1 set attribute generate_node_acls0 /iscsi/iqn.2024-07.com.example:server.disk1/tpg1/acls/iqn.2024-07.com.example:client.node1 set auth useridusername /iscsi/iqn.2024-07.com.example:server.disk1/tpg1/acls/iqn.2024-07.com.example:client.node1 set auth passwordpassword网络隔离使用VLAN隔离iSCSI流量配置防火墙只允许特定IP访问3260端口定期更新yum update targetcli -y在实际项目中我发现iSCSI最令人惊喜的是它的稳定性——曾经有个配置好的iSCSI磁盘连续工作了600多天没有出现任何问题。对于需要频繁访问远程存储的场景这绝对比U盘拷贝或NFS共享可靠得多。