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

systemd mount 单元报 “dependency failed” 是什么在阻塞?
这通常不是 mount 本身出错,而是它依赖的某个单元(比如 local-fs.target、remote-fs.target、另一个 .mount 单元,或某个 .service)处于 failed 或 inactive 状态,导致 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.mount或Dependency 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.mount和After=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 单元,并正确设置依赖关系。










