资讯动态

UOS上iSCSI存储实战:从Target配置到Initiator挂载与多路径优化

发布时间:2026/10/15 7:15:13 来源:尧图企业网站定制
1. 为什么要在UOS上折腾iSCSI存储国产操作系统在桌面办公场景的普及速度这两年明显加快统信UOS作为其中的主力选手已经从能用阶段迈入了好用阶段。但很多人对它的认知还停留在换个皮的开源系统这个层面实际上UOS在企业级存储接入这块的完成度比想象中高不少。iSCSI作为IP SAN的核心协议几乎是中小企业和实验室搭建集中式存储时绕不开的方案——它用现有的以太网就能跑块级存储不需要专门买光纤交换机和HBA卡成本直接砍掉一大截。这篇文章要聊的就是在UOS上完整跑通iSCSI存储的整套流程。从target端的配置到initiator端的挂载从CHAP认证到多路径优化再到开机自动挂载和常见故障排查我都会按实际操作的顺序一步步拆开讲。适合两类人看一类是刚接触UOS但有一定Linux基础的运维人员另一类是在信创环境下需要做存储方案选型的技术负责人。看完之后你应该能独立完成一套可用的iSCSI存储环境搭建并且知道哪些坑是大概率会踩到的。先说清楚一个前提iSCSI的本质是把SCSI命令封装进TCP/IP包里传输所以它天然依赖网络质量。你网络不稳存储就跟着抽风这个因果关系要先建立起来。理解了这一点后面很多配置决策就顺理成章了。2. iSCSI核心概念与UOS环境准备2.1 先搞明白target和initiator到底谁是谁很多人第一次接触iSCSI会被这两个词绕晕。用个生活化的类比target就是仓库initiator就是来仓库取货的车。仓库负责存放货物存储块设备车负责把货物拉走使用挂载为本地磁盘。一台机器可以同时扮演两个角色但在典型场景里存储服务器做target业务服务器做initiator。再往下拆target里面有几个关键概念需要理清backstore后端存储真正存放数据的地方可以是一块物理磁盘、一个分区、一个LVM逻辑卷甚至一个普通文件。生产环境推荐用LVM逻辑卷扩容灵活。LUN逻辑单元号target对外暴露的存储单元一个target可以挂多个LUN。你可以理解为仓库里的不同货架。ACL访问控制列表控制哪些initiator可以连接这个target。不配ACL的话任何知道target地址的人都能连上来这在生产环境里是绝对不能接受的。TPGTarget Portal Group一组网络门户的集合控制target在哪些IP和端口上监听。默认端口3260。initiator这边相对简单核心就是发现discovery和登录login两个动作。发现是问target你有哪些LUN可以给我用登录是正式建立连接并获取块设备。2.2 UOS上的软件包选择和安装UOS基于Debian体系包管理用apt。iSCSI相关的核心包有三个软件包作用装在哪端targetcli-fbtarget配置管理工具存储服务器open-iscsiinitiator客户端工具业务服务器multipath-tools多路径管理业务服务器可选安装命令很直接# target端 sudo apt update sudo apt install targetcli-fb -y # initiator端 sudo apt update sudo apt install open-iscsi multipath-tools -y这里有个实际经验要分享UOS的官方源里targetcli-fb的版本可能偏旧如果你需要用到某些新特性比如特定的ALUA配置可以考虑从源码编译。但绝大多数场景下源里的版本完全够用没必要给自己找麻烦。注意安装完open-iscsi后服务默认可能是disabled状态。不要急着enable先把配置改好再启动否则可能因为配置问题导致启动失败。2.3 网络规划的前置思考在动手配置之前网络规划这一步不能省。iSCSI流量和普通业务流量混跑是很多性能问题的根源。理想情况下存储网络应该独立出来至少要用独立的VLAN或者物理网卡。如果条件有限只能混跑那至少要做到这几点给iSCSI流量配独立的子网、在交换机上配置QoS保证存储流量优先级、开启巨帧Jumbo Frame减少CPU开销。巨帧这个事要端到端都支持才行中间任何一个设备不支持都会导致分片反而更慢。我一般建议用这样的规划存储网络192.168.100.0/24target IP192.168.100.10initiator IP192.168.100.20业务网络另一个网段互不干扰3. Target端配置全流程拆解3.1 用LVM准备后端存储直接拿整块磁盘做backstore不是不行但生产环境强烈建议走LVM。原因很简单后期扩容方便快照也好做。假设我们有一块20G的空闲磁盘/dev/sdbsudo pvcreate /dev/sdb sudo vgcreate vg_iscsi /dev/sdb sudo lvcreate -L 15G -n lv_lun0 vg_iscsi留5G不分配是有意为之的。LVM的快照需要COW空间预留一部分可以避免后期快照创建失败。这个细节很多教程不会提但实际用起来很关键。创建完之后用lvs确认一下sudo lvs # 应该能看到 lv_lun0 vg_iscsi -wi-ao---- 15.00g3.2 targetcli交互式配置详解targetcli是个交互式shell工具进去之后像操作文件系统一样操作配置树。输入sudo targetcli进入/ ls o- / ............................................................. [...] o- backstores .................................................. [...] | o- block ...................................... [Storage Objects: 0] | o- fileio ..................................... [Storage Objects: 0] | o- pscsi ...................................... [Storage Objects: 0] | o- ramdisk .................................... [Storage Objects: 0] o- iscsi ........................................ [Targets: 0] o- loopback ..................................... [Targets: 0]第一步创建backstore/ cd backstores/block /backstores/block create namelun0 dev/dev/vg_iscsi/lv_lun0第二步创建iSCSI target。命名规范建议用IQN格式形如iqn.年份-月份.反写域名:标识/ cd iscsi /iscsi create iqn.2024-01.com.example:uos-storage第三步把backstore关联到target的LUN/iscsi cd iqn.2024-01.com.example:uos-storage/tpg1/luns /iscsi/.../luns create /backstores/block/lun0第四步配置ACL。这一步是安全底线不配的话谁都能连/iscsi/.../tpg1 cd acls /iscsi/.../acls create iqn.2024-01.com.example:uos-client第五步配置CHAP认证。CHAP是双向的target和initiator各有一套用户名密码/iscsi/.../acls cd iqn.2024-01.com.example:uos-client /iscsi/.../acls/iqn... set auth useridmyuser /iscsi/.../acls/iqn... set auth passwordmypassword123第六步确认portal监听地址。默认会监听0.0.0.0:3260如果只想监听存储网段/iscsi/.../tpg1 cd portals /iscsi/.../portals create 192.168.100.10最后别忘了保存配置/ saveconfig / exittargetcli的好处是所有操作即时生效不需要重启服务。但这也意味着配错了会立刻影响在线业务操作前最好心里有数。3.3 防火墙和SELinux的放行UOS默认的防火墙规则会挡住3260端口。放行命令sudo ufw allow 3260/tcp # 或者如果用的是firewalld sudo firewall-cmd --permanent --add-port3260/tcp sudo firewall-cmd --reloadSELinux这块UOS默认策略相对宽松但如果你的环境开启了强制模式需要给iSCSI相关进程打标签sudo setsebool -P iscsid_disable_trans 1实操心得配置完成后先用ss -tlnp | grep 3260确认端口确实在监听再用targetcli里的ls命令逐层检查配置树比直接去连要高效得多。4. Initiator端连接与挂载实战4.1 发现和登录targetinitiator端的配置文件在/etc/iscsi/initiatorname.iscsi里面定义了本机的IQN。这个IQN必须和target端ACL里配置的一致否则会被拒绝cat /etc/iscsi/initiatorname.iscsi # InitiatorNameiqn.2024-01.com.example:uos-client如果和target端ACL不匹配直接改这个文件然后重启iscsid服务。发现targetsudo iscsiadm -m discovery -t sendtargets -p 192.168.100.10成功的话会输出类似192.168.100.10:3260,1 iqn.2024-01.com.example:uos-storage登录sudo iscsiadm -m node -T iqn.2024-01.com.example:uos-storage -p 192.168.100.10 -l登录成功后用lsblk就能看到新的块设备通常是/dev/sdb这种。但要注意设备名可能会变所以生产环境一定要用/dev/disk/by-path/或者WWID来标识。4.2 CHAP认证配置的两种方式如果target端开了CHAPinitiator端必须对应配置。有两种方式方式一通过命令行设置sudo iscsiadm -m node -T iqn.2024-01.com.example:uos-storage -p 192.168.100.10 \ --opupdate --namenode.session.auth.authmethod --valueCHAP sudo iscsiadm -m node -T iqn.2024-01.com.example:uos-storage -p 192.168.100.10 \ --opupdate --namenode.session.auth.username --valuemyuser sudo iscsiadm -m node -T iqn.2024-01.com.example:uos-storage -p 192.168.100.10 \ --opupdate --namenode.session.auth.password --valuemypassword123方式二直接编辑/etc/iscsi/iscsid.conf把对应的行取消注释并填入值。这种方式适合批量部署改一个文件推送到所有机器就行。改完之后需要重新登录sudo iscsiadm -m node -T iqn.2024-01.com.example:uos-storage -p 192.168.100.10 -u sudo iscsiadm -m node -T iqn.2024-01.com.example:uos-storage -p 192.168.100.10 -l4.3 分区、格式化和挂载拿到块设备之后按普通磁盘的流程走# 假设设备是 /dev/sdb sudo parted /dev/sdb mklabel gpt sudo parted /dev/sdb mkpart primary xfs 0% 100% sudo mkfs.xfs /dev/sdb1 sudo mkdir -p /mnt/iscsi_data sudo mount /dev/sdb1 /mnt/iscsi_data文件系统选择上XFS在iSCSI场景下表现比ext4更稳尤其是大文件读写和并发场景。如果业务以大量小文件为主ext4也可以但XFS的延迟分配机制在块设备上优势更明显。4.4 开机自动挂载的正确姿势直接往/etc/fstab里写/dev/sdb1是大忌因为iSCSI设备名不固定。正确做法是用_netdev选项配合UUID# 先获取UUID sudo blkid /dev/sdb1 # 输出/dev/sdb1: UUIDxxxx-xxxx TYPExfs # 写入fstab UUIDxxxx-xxxx /mnt/iscsi_data xfs _netdev,noatime 0 0_netdev告诉系统等网络就绪后再挂载noatime减少不必要的写操作。这两个选项在iSCSI场景下几乎是标配。注意即使配了_netdev如果网络启动慢于挂载尝试还是可能失败。更稳妥的方案是用systemd的automount或者写一个依赖iscsid服务的mount unit。5. 多路径与性能调优5.1 多路径配置的必要性单条iSCSI链路存在单点故障风险网卡挂了、交换机端口坏了存储就断了。多路径multipath通过多条物理链路访问同一个LUN既提供冗余又提升吞吐。配置multipath之前先确认/etc/multipath.conf的内容。UOS默认可能没有这个文件需要手动创建defaults { user_friendly_names yes find_multipaths yes } blacklist { devnode ^sd[a-z]$ }find_multipaths yes让multipath自动识别哪些设备需要多路径管理避免误接管本地磁盘。然后启动服务sudo systemctl enable multipathd sudo systemctl start multipathd sudo multipath -ll输出里会显示类似mpatha (36001405...) dm-0 XFS的信息说明多路径聚合成功。5.2 关键性能参数调整iSCSI的性能调优主要围绕几个方向网络层、iSCSI协议层、文件系统层。网络层最有效的调整是开启巨帧。在两端网卡上都设置MTU为9000sudo ip link set dev ens33 mtu 9000永久生效需要写进网络配置文件。UOS用NetworkManager的话sudo nmcli connection modify 有线连接 1 802-3-ethernet.mtu 9000 sudo nmcli connection up 有线连接 1iSCSI协议层可以调整的队列深度和超时参数在/etc/iscsi/iscsid.conf里node.session.cmds_max 1024 node.session.queue_depth 128 node.session.timeo.replacement_timeout 120 node.conn[0].timeo.login_timeout 15 node.conn[0].timeo.logout_timeout 15cmds_max和queue_depth调大能提升并发性能但也要看target端的承受能力。replacement_timeout控制链路断开后多久尝试重连设太短会导致频繁重连太长则故障切换慢。文件系统层XFS的挂载选项可以加UUIDxxxx /mnt/iscsi_data xfs _netdev,noatime,nodiratime,logbsize256k,allocsize1m 0 0logbsize增大日志缓冲区allocsize控制预分配大小这两个参数对顺序写入性能提升明显。5.3 实测数据参考我在一个千兆环境里做过对比测试target端用LVMblock backstoreinitiator端用XFS配置顺序读(MB/s)顺序写(MB/s)4K随机读(IOPS)单路径默认MTU1121088500单路径巨帧1171139200双路径巨帧11811516500千兆网络下顺序读写基本跑满带宽多路径对顺序性能提升有限但随机IOPS几乎翻倍。如果是万兆环境多路径的吞吐优势会更明显。6. 常见故障排查与避坑指南6.1 连接类问题速查现象可能原因排查命令discovery失败防火墙拦截/portal未监听ss -tlnp | grep 3260login被拒绝ACL不匹配/CHAP错误journalctl -u iscsid -n 50登录成功但无设备LUN未关联/backstore异常targetcli ls设备时有时无网络抖动/多路径冲突dmesg | grep -i iscsi6.2 几个我实际踩过的坑坑一IQN大小写问题。iSCSI规范里IQN是大小写敏感的但有些工具在显示时会做转换。我遇到过target端ACL写的是小写initiator端配置文件里是大写结果死活连不上。排查了半天才发现是这个问题。建议统一用小写。坑二LVM快照导致性能骤降。给iSCSI的LUN做了LVM快照之后写入性能直接掉了一半。原因是快照的COW机制导致每次写都要先读原块再写新块。如果业务对性能敏感快照要慎用或者把快照放在独立的物理磁盘上。坑三fstab挂载顺序问题。配了_netdev之后重启偶尔还是会出现挂载失败。后来发现是iscsid服务启动太慢mount尝试时设备还没就绪。解决办法是给mount unit加Afteriscsid.service和Wantsiscsid.service依赖。坑四巨帧不彻底。网卡设了9000但交换机没设结果大包被分片性能反而比默认MTU还差。巨帧必须端到端全链路支持中间任何一个环节不支持都会出问题。6.3 日常维护建议iSCSI环境跑起来之后日常维护主要关注几个点定期用iscsiadm -m session -P 3查看会话状态和统计信息监控/var/log/syslog里的iscsi相关日志用multipath -ll确认所有路径都是active状态定期检查target端的磁盘空间和LVM使用率。如果业务对可用性要求高建议配置自动重连和故障切换。iscsid.conf里的node.session.timeo.replacement_timeout和node.conn[0].timeo.noop_out_interval这两个参数配合好能实现链路故障时的平滑切换。7. 一些延伸思考iSCSI在UOS上的这套方案本质上和在其他Linux发行版上没有太大区别因为底层用的都是标准的内核模块和用户态工具。UOS的价值在于它把这些组件做了更好的集成和测试减少了你自己踩坑的概率。如果后续有更高性能需求可以考虑几个方向升级到万兆网络、启用iSERiSCSI over RDMA、或者直接上NVMe-oF。但这些方案的硬件成本和技术门槛都更高iSCSI在相当长一段时间内仍然是性价比最高的选择。另外提一句UOS的版本迭代比较快不同版本之间targetcli和open-iscsi的版本可能有差异。如果你照着某篇教程操作发现命令对不上先apt policy看一下实际安装的版本再去查对应版本的文档比盲目试错效率高得多。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑