必须加 _netdev,否则iSCSI设备开机挂载会因网络未就绪而失败,导致卡死或进入emergency mode;因其依赖网络、iscsid服务及目标登录,_netdev强制挂载延至网络就绪后执行,且需确保iscsid已启用并配置自动登录。

必须加 _netdev,否则开机大概率卡死或进 emergency mode。
为什么 fstab 直接写 /dev/sdb1 或 UUID 就会失败
iSCSI 设备不是本地磁盘,它依赖网络链路、iSCSI 服务(open-iscsi)、TCP 连接和目标登录状态。系统启动时,/etc/fstab 的挂载动作默认在 network.target 之前执行,此时网卡可能没 IP、路由未生效、iscsid 服务还没起来,/dev/sdb1 根本不存在——mount 系统调用直接返回 Network is unreachable,systemd 等待超时后进入救援模式。
常见错误现象:
-
Failed to start Local File Systems(systemd 报错) - 开机卡在黑屏或提示
Press Ctrl+D to continue -
mount: /mnt/iscsi: mount(2) system call failed: No such device(设备名已变或未发现)
_netdev 必须出现在 fstab 第四字段,且不能拼错
_netdev 是 systemd 识别网络依赖挂载的关键标记,不是可选优化项,是强制前置条件。它告诉 init 系统:“这个挂载要等网络就绪后再做”。必须严格写成 _netdev(下划线开头,全小写,无空格),并用逗号与其他选项分隔。
正确写法示例(iSCSI 块设备已格式化为 xfs):
UUID=eb9cbf2f-fce8-413a-b770-8b0f243e8ad6 /mnt/iscsi xfs defaults,_netdev 0 0
错误写法(都会失效):
-
netdev(缺下划线) -
_NETDEV(大小写错误) -
defaults _netdev(空格分隔,不是逗号) -
_netdev写在第五或第六字段
仅靠 _netdev 不够,还需确保 iSCSI 节点自动登录
_netdev 只解决“挂载时机”,不解决“设备是否存在”。iSCSI 设备需先由 open-iscsi 发现并登录目标,生成 /dev/sdX,fstab 才能挂载。所以必须确认:
-
sudo systemctl enable --now iscsid(服务已启用并运行) -
sudo iscsiadm -m node -l能成功登录(说明节点配置已保存) - 节点配置中启用了自动登录:
node.startup = automatic(可通过sudo iscsiadm -m node -o show查看)
如果 iscsid 服务没启用,或节点 startup 是 manual,即使 _netdev 正确,开机时也不会出现 /dev/sdb1,fstab 挂载仍失败。
验证顺序比重启更重要:三步闭环检查
改完 fstab 后别急着重启,按顺序执行以下命令,任一环节失败都说明配置不完整:
-
sudo systemctl daemon-reload(重载 unit 配置) -
sudo systemctl restart iscsid && sudo iscsiadm -m node -l(模拟开机登录) -
sudo mount -a(触发 fstab 全量挂载,无输出即成功)
最后用 findmnt /mnt/iscsi 或 lsblk 确认设备已挂载。容易被忽略的是:iSCSI 登录状态和 _netdev 是两个独立依赖,缺一不可;很多故障源于只配了后者,忘了前者是否真正生效。











