systemd mount 单元启动失败显示 “dependency failed” 的 systemctl status 分析

9次阅读

“dependency failed”表示当前mount单元依赖的某个单元(如remote-fs.target、另一.mount单元或.service)处于failed或inactive状态;需通过systemctl status查看“Dependency failed on”行定位具体故障单元,并检查其状态与日志。

systemd mount 单元启动失败显示 “dependency failed” 的 systemctl status 分析ailed” 是什么在阻塞?

这通常不是 mount 本身出错,而是它依赖的某个单元(比如 local-fs.targetremote-fs.target、另一个 .mount 单元,或某个 .service)处于 failedinactive 状态,导致 systemd 拒绝启动当前 mount 单元。

关键要看 systemctl status your-mount.mount 输出中 “Loaded” 和 “Active” 下方的 “Dependency failed on” 行,以及紧接着的 “See ‘systemctl status …’ for details” 提示——那个被提到的单元才是真正的故障源。

怎么快速定位是哪个依赖挂了?

运行 systemctl status your-mount.mount 后,重点检查以下三处:

  • “Loaded” 行末尾括号里的路径,确认你编辑的是正确的单元文件(比如 /etc/systemd/system/mnt-data.mount
  • “Active” 行下方是否明确写了类似 Dependency failed on mnt-nfs-server.mountDependency failed on network-online.target
  • “Unit” 段落末尾的 Also: 列表,它显示该 mount 单元隐式依赖哪些 target;若其中某个 target 处于 inactive(如 remote-fs.target),而你的挂载又需要网络,就可能卡住

然后立刻执行 systemctl status 加上那个被点名的单元名,例如 systemctl status mnt-nfs-server.mount,看它的真实错误。

常见依赖类型与对应排查动作

不同挂载方式触发的依赖链差异很大:

  • NFS/CIFS 远程挂载:默认依赖 remote-fs.target,而该 target 又依赖 network-online.target。如果网卡没起来、DHCP 超时或 systemd-networkd-wait-online.service 失败,整个链就断了。可临时加 Wants=network-online.target + After=network-online.target 到 mount 单元,并确认 systemctl is-active network-online.target 返回 active
  • 本地块设备(如 /dev/sdb1):依赖 local-fs.target,但该 target 不会等所有设备就绪。若设备名不稳定(如 /dev/sdb1 在重启后变成 /dev/sdc1),会导致 mount 单元找不到设备而失败。应改用 /dev/disk/by-uuid/.../dev/disk/by-label/... 路径
  • 依赖另一个 mount 单元(如挂载前需先挂载 LUKS 解密卷):必须显式写 Requires=other-mount.mountAfter=other-mount.mount,且确保 other-mount.mount 自身能成功启动(比如它的 What= 路径存在、密钥可用)

为什么 systemctl daemon-reload 后还是 dependency failed?

daemon-reload 只重新加载单元定义,不重置依赖状态。如果某个上游单元已经 failed,systemd 会缓存这个状态,直到你手动恢复它:

  • 先查清故障单元:systemctl list-dependencies --reverse --all your-mount.mount | grep failed
  • 尝试重启它:systemctl restart failed-unit.service(注意不是 start,因为 failed 状态下 start 会被拒绝)
  • 若它反复失败,得看日志:journalctl -u failed-unit.service -n 50 -e
  • 必要时重置失败标记:systemctl reset-failed failed-unit.service(仅清除状态,不解决根本问题)

真正容易被忽略的是:mount 单元的 What= 值如果指向一个尚未激活的设备(如未 luksOpen 的加密卷),systemd 不会自动触发解密流程——你得自己写好对应的 .device.service 单元,并正确设置依赖关系。

text=ZqhQzanResources