iSCSI 客户端连接与持久化:open-iscsi 实践
演示 Linux 客户端发现、登录、自动挂载和断线恢复配置,避免重启后丢失存储连接。
Target 配好了,客户端登录一次能挂上,但重启服务器之后盘没了、挂载失败、业务起不来——这是 iSCSI 客户端最常见的坑。这篇文章把「登录 → 持久化 → 自动挂载 → 断线恢复」整条链讲清楚。
#第一步:发现与登录
sudo dnf install -y iscsi-initiator-utils
# 写入客户端自己的 IQN(每台机器唯一)
sudo vi /etc/iscsi/initiatorname.iscsi
# 内容形如:InitiatorName=iqn.2026-08.com.client:web01
# 发现 Target
sudo iscsiadm -m discovery -t sendtargets -p 192.168.10.10
# 输出:192.168.10.10:3260,1 iqn.2026-08.com.example:storage01
# 登录
sudo iscsiadm -m node -T iqn.2026-08.com.example:storage01 -p 192.168.10.10 --login如果 Target 配了双向 CHAP,客户端也要在 node 记录里写认证:
sudo iscsiadm -m node -T iqn.2026-08.com.example:storage01 -p 192.168.10.10 --op=update --name node.session.auth.authmethod --value=CHAP
sudo iscsiadm -m node -T iqn.2026-08.com.example:storage01 -p 192.168.10.10 --op=update --name node.session.auth.username --value=storage_user
sudo iscsiadm -m node -T iqn.2026-08.com.example:storage01 -p 192.168.10.10 --op=update --name node.session.auth.password --value=strong-pass-123#第二步:让会话在重启后自动恢复
iscsiadm -m node --login 只是这一次登录。要让开机自动重新登录,把 node 记录的自动登录打开:
sudo iscsiadm -m node -T iqn.2026-08.com.example:storage01 --op=update --name node.startup --value=automatic同时确认 iscsid 服务开机自启:sudo systemctl enable --now iscsid。重启后检查:
sudo iscsiadm -m session
lsblk -S如果重启后没有自动登录,先看 journalctl -u iscsid -u iscsi——最常见的两个原因:CHAP 没写进 node 记录(重登又要求认证,失败)、node.startup 没设成 automatic。
#第三步:自动挂载,别用 fstab 硬写
/dev/sdb 这种设备名在重启后可能变成 /dev/sdc(启动顺序不同),fstab 里直接写 /dev/sdb 是定时炸弹。正确做法是用 UUID 或直接对 iSCSI 盘做 LVM:
# 在 iSCSI 盘上建 LVM
sudo pvcreate /dev/sdb
sudo vgcreate vg_iscsi /dev/sdb
sudo lvcreate -l 100%FREE -n data vg_iscsi
sudo mkfs.xfs /dev/vg_iscsi/data
# 用 UUID 挂载,并在 fstab 里加 nofail
UUID=$(blkid -s UUID -o value /dev/vg_iscsi/data)
echo "UUID=$UUID /data xfs defaults,_netdev,nofail,x-systemd.device-timeout=30 0 0" | sudo tee -a /etc/fstab关键参数:
_netdev:告诉 systemd 这个挂载点依赖网络设备,等网络就绪后再挂。nofail:挂载失败不阻塞开机流程,防止「存储没起来,整台机器卡在挂载上」。x-systemd.device-timeout=30:最多等 30 秒,超时放弃继续启动。
没有 LVM 的话,也可以直接对裸盘 mkfs,然后 blkid 拿 UUID 写 fstab——总之不要用 /dev/sdX。
#第四步:断线恢复行为
iSCSI 断线(网络抖动、Target 重启)时,会话默认不会立刻断,而是进入恢复尝试。相关参数在 node 记录里:
sudo iscsiadm -m node -T iqn.2026-08.com.example:storage01 --op=update --name node.session.timeo.replacement_timeout --value=120replacement_timeout 是等待 Target 恢复的秒数,超时后会话失败。取值权衡:太短,网络抖一下就掉盘,业务直接 IO 错误;太长,故障期间 IO 一直阻塞。数据库场景一般 60-120s,再配合 multipath 让另一条路径顶上,才是完整的可用性方案。
#验证
sudo systemctl reboot # 实际重启验证
# 起来后:
sudo iscsiadm -m session # 有会话
lsblk -S # 盘在
mountpoint /data # 挂载正常手动验证一次完整重启,比读十遍文档都管用。重启恢复这条链路,只有真正重启过才敢说配好了。
写于 2026 年 3 月 2 日
- 栏目
- 技术文章
- 约
- 3.1 分钟
- 字数
- 2.4K
- 阅读
- 127
本文为原创记录,转载请注明出处。如果这篇替你省了时间,欢迎留言说说你踩到的坑。
同题 · related
留言 · remarks
00 条还没有留言,来说点什么吧。