Ubuntu 22.04中NFS服务因依赖缺失启动失败,proc-fs-nfsd.mount与systemd-networkd-wait-online.service也无法启动
Ubuntu 22.04中NFS服务因依赖缺失启动失败,proc-fs-nfsd.mount与systemd-networkd-wait-online.service也无法启动
问题描述
我在VPS上尝试安装NFS服务器,但启动失败,提示依赖缺失。执行相关命令后得到以下输出:
查看NFS服务状态
root@server:/# sudo systemctl status nfs-server ○ nfs-server.service - NFS server and services Loaded: loaded (/lib/systemd/system/nfs-server.service; enabled; vendor preset: enabled) Active: inactive (dead) Feb 16 19:36:39 server systemd[1]: Dependency failed for NFS server and services. Feb 16 19:36:39 server systemd[1]: nfs-server.service: Job nfs-server.service/start failed with result 'dependency'. Feb 16 19:36:39 server systemd[1]: Dependency failed for NFS server and services. Feb 16 19:36:39 server systemd[1]: nfs-server.service: Job nfs-server.service/start failed with result 'dependency'. Feb 16 19:42:12 server systemd[1]: Dependency failed for NFS server and services. Feb 16 19:42:12 server systemd[1]: nfs-server.service: Job nfs-server.service/start failed with result 'dependency'. Feb 19 12:30:54 server systemd[1]: Dependency failed for NFS server and services. Feb 19 12:30:54 server systemd[1]: nfs-server.service: Job nfs-server.service/start failed with result 'dependency'. Feb 19 12:30:55 server systemd[1]: Dependency failed for NFS server and services. Feb 19 12:30:55 server systemd[1]: nfs-server.service: Job nfs-server.service/start failed with result 'dependency'.
查看NFS内核服务依赖
root@server:/# systemctl list-dependencies nfs-kernel-server nfs-kernel-server.service ○ ├─auth-rpcgss-module.service ○ ├─nfs-idmapd.service ○ ├─nfs-mountd.service ○ ├─nfsdcld.service × ├─proc-fs-nfsd.mount ● ├─rpc-statd-notify.service ● ├─rpc-statd.service ○ ├─rpc-svcgssd.service ● ├─rpcbind.socket ● ├─system.slice ● ├─network-online.target ● │ ├─ifupdown-wait-online.service ● │ ├─networking.service × │ └─systemd-networkd-wait-online.service ● └─network.target
可以看到proc-fs-nfsd.mount和systemd-networkd-wait-online.service状态异常(标记为×)。
查看proc-fs-nfsd.mount状态
root@server:/# sudo systemctl status proc-fs-nfsd.mount × proc-fs-nfsd.mount - NFSD configuration filesystem Loaded: loaded (/lib/systemd/system/proc-fs-nfsd.mount; static) Active: failed (Result: exit-code) since Mon 2024-02-19 12:30:55 UTC; 1h 28min ago Where: /proc/fs/nfsd What: nfsd Feb 19 12:30:55 server systemd[1]: Mounting NFSD configuration filesystem... Feb 19 12:30:55 server mount[1997336]: mount: /proc/fs/nfsd: unknown filesystem type 'nfsd'. Feb 19 12:30:55 server systemd[1]: proc-fs-nfsd.mount: Mount process exited, code=exited, status=32/n/a Feb 19 12:30:55 server systemd[1]: proc-fs-nfsd.mount: Failed with result 'exit-code'. Feb 19 12:30:55 server systemd[1]: Failed to mount NFSD configuration filesystem.
查看systemd-networkd-wait-online.service状态
root@server:/# sudo systemctl status systemd-networkd-wait-online.service × systemd-networkd-wait-online.service - Wait for Network to be Configured Loaded: loaded (/etc/systemd/system/systemd-networkd-wait-online.service; enabled; vendor preset: disabled) Active: failed (Result: exit-code) since Mon 2024-02-19 12:26:07 UTC; 1h 30min ago Docs: man:systemd-networkd-wait-online.service(8) Main PID: 1996517 (code=exited, status=1/FAILURE) Feb 19 12:24:07 server systemd[1]: Starting Wait for Network to be Configured... Feb 19 12:26:07 server systemd[1]: systemd-networkd-wait-online.service: Main process exited, code=exited, status=1/FAILURE Feb 19 12:26:07 server systemd[1]: systemd-networkd-wait-online.service: Failed with result 'exit-code'. Feb 19 12:26:07 server systemd[1]: Failed to start Wait for Network to be Configured.
查看journalctl关键日志
NFS服务日志
root@server:/# journalctl -xeu nfs-server Feb 19 12:30:54 server systemd[1]: Dependency failed for NFS server and services. Subject: A start job for unit nfs-server.service has failed Defined-By: systemd Support: http://www.ubuntu.com/support A start job for unit nfs-server.service has finished with a failure. The job identifier is 33900 and the job result is dependency. Feb 19 12:30:54 server systemd[1]: nfs-server.service: Job nfs-server.service/start failed with result 'dependency'. Feb 19 12:30:55 server systemd[1]: Dependency failed for NFS server and services. Subject: A start job for unit nfs-server.service has failed Defined-By: systemd Support: http://www.ubuntu.com/support A start job for unit nfs-server.service has finished with a failure. The job identifier is 33930 and the job result is dependency. Feb 19 12:30:55 server systemd[1]: nfs-server.service: Job nfs-server.service/start failed with result 'dependency'.
proc-fs-nfsd.mount日志
root@server:/# journalctl -xeu proc-fs-nfsd.mount Feb 19 12:30:55 server systemd[1]: Mounting NFSD configuration filesystem... Subject: A start job for unit proc-fs-nfsd.mount has begun execution Defined-By: systemd Support: http://www.ubuntu.com/support A start job for unit proc-fs-nfsd.mount has begun execution. The job identifier is 33931. Feb 19 12:30:55 server mount[1997336]: mount: /proc/fs/nfsd: unknown filesystem type 'nfsd'. Feb 19 12:30:55 server systemd[1]: proc-fs-nfsd.mount: Mount process exited, code=exited, status=32/n/a Subject: Unit process exited Defined-By: systemd Support: http://www.ubuntu.com/support An n/a= process belonging to unit proc-fs-nfsd.mount has exited. The process' exit code is 'exited' and its exit status is 32. Feb 19 12:30:55 server systemd[1]: proc-fs-nfsd.mount: Failed with result 'exit-code'. Subject: Unit failed Defined-By: systemd Support: http://www.ubuntu.com/support The unit proc-fs-nfsd.mount has entered the 'failed' state with result 'exit-code'. Feb 19 12:30:55 server systemd[1]: Failed to mount NFSD configuration filesystem. Subject: A start job for unit proc-fs-nfsd.mount has failed Defined-By: systemd Support: http://www.ubuntu.com/support A start job for unit proc-fs-nfsd.mount has finished with a failure. The job identifier is 33931 and the job result is failed.
我查了资料,有些VPS镜像可能缺失这些依赖,有人说只能重装系统,但我想知道有没有不用格式化系统就能修复的方法?
解决方法
不用重装系统,我们可以分步骤修复这两个依赖问题:
1. 修复proc-fs-nfsd.mount失败问题
提示未知文件系统类型'nfsd',大概率是NFS内核模块没加载,我们手动加载并设置开机自动加载:
- 手动加载nfsd模块:
sudo modprobe nfsd
- 验证模块是否加载成功:
lsmod | grep nfsd
如果输出中有nfsd的条目,说明加载成功。
- 设置开机自动加载该模块:
echo "nfsd" | sudo tee /etc/modules-load.d/nfsd.conf
- 重新挂载proc-fs-nfsd.mount:
sudo systemctl start proc-fs-nfsd.mount
再检查状态:
sudo systemctl status proc-fs-nfsd.mount
如果显示active(mounted)就没问题了。
2. 修复systemd-networkd-wait-online.service失败问题
这个服务失败通常是因为它在等待所有网络接口上线,但VPS可能有些接口不需要或者配置有问题,推荐两种解决方式:
方法一:修改服务配置,只等待活跃接口
- 编辑服务配置文件:
sudo systemctl edit systemd-networkd-wait-online.service
- 在打开的编辑器中添加以下内容:
[Service] ExecStart= ExecStart=/lib/systemd/systemd-networkd-wait-online --any --quiet
保存退出后,重新加载配置并启动服务:
sudo systemctl daemon-reload sudo systemctl start systemd-networkd-wait-online.service
检查状态是否正常:
sudo systemctl status systemd-networkd-wait-online.service
方法二:直接禁用不必要的服务
如果你的NFS服务不需要严格等待网络完全在线,也可以直接禁用这个服务:
sudo systemctl disable --now systemd-networkd-wait-online.service
同时,我们可以修改nfs-server.service的依赖,移除对network-online.target的强依赖(可选):
sudo systemctl edit nfs-server.service
添加以下内容:
[Unit] After=network.target Wants=network.target
保存退出后重新加载配置。
3. 重新启动NFS服务
修复完两个依赖后,重新启动NFS相关服务:
sudo systemctl restart nfs-kernel-server nfs-server
然后检查NFS服务状态:
sudo systemctl status nfs-server
如果显示active(running),说明成功启动了。
4. 验证NFS服务可用性
可以尝试导出一个测试目录,然后在客户端挂载测试,确保服务正常工作。
备注:内容来源于stack exchange,提问作者user1768691




