如何配置NFS服务器在部分挂载点挂载失败时仍启动并提供可用挂载点服务?
如何配置NFS服务器在部分挂载点挂载失败时仍启动并提供可用挂载点服务?
我遇到过类似的问题,其实核心是systemd的依赖关系在搞鬼——默认情况下NFS服务会绑定到你导出的挂载点对应的systemd挂载单元上,只要其中一个挂载失败,整个NFS服务就启动不了。下面是我亲测有效的解决步骤:
1. 修改fstab挂载选项,让硬盘挂载失败不阻塞服务启动
首先要调整外部硬盘的挂载参数,告诉systemd即使硬盘挂载失败,也不要标记该挂载单元为失败,避免牵连NFS服务:
打开你的/etc/fstab,把两个硬盘的挂载行修改为:
/dev/disk/by-uuid/06b24834-a749-4d93-b0d5-a6da71eaf224 /verbatim ext4 defaults,x-systemd.nofail,x-systemd.mount-timeout=10 0 1 /dev/disk/by-uuid/d7dbea69-0332-4d12-b905-b9a116e28422 /sandisk ext4 defaults,x-systemd.nofail,x-systemd.mount-timeout=10 0 1
x-systemd.nofail:这个参数让systemd忽略该挂载的失败,不会因为它启动失败就阻止依赖它的服务启动x-systemd.mount-timeout=10:设置挂载超时时间为10秒,避免系统启动时在未连接的硬盘上等待太久
2. 确保挂载点目录始终存在
NFS需要导出的目录必须存在,哪怕硬盘没挂载。你可以提前手动创建这些目录(系统挂载时其实也会自动创建,但手动创建更稳妥):
sudo mkdir -p /verbatim /sandisk sudo chmod 755 /verbatim /sandisk
这样即使硬盘没挂载,NFS也能导出这个空目录(你可以在空目录里放个README文件提示用户该存储不可用)。
3. 调整NFS服务的systemd依赖,解除对挂载单元的绑定
默认情况下,systemd会自动为nfs-server.service添加对这些挂载单元的依赖,我们需要覆盖这个设置:
- 先创建nfs-server服务的drop-in配置目录:
sudo mkdir -p /etc/systemd/system/nfs-server.service.d
- 创建配置文件
override.conf:
sudo nano /etc/systemd/system/nfs-server.service.d/override.conf
- 在文件中写入以下内容:
[Unit] Wants= After=network.target rpcbind.target
这个配置会清空默认的Wants依赖,只保留NFS启动必需的网络和rpcbind服务,让NFS服务不再等待挂载单元。
4. 重新加载配置并重启服务
最后,让systemd读取新的配置,然后重启NFS服务:
sudo systemctl daemon-reload sudo systemctl restart nfs-server.service
这样设置后,即使其中一块硬盘没挂载,NFS服务也能正常启动,并且会导出已经成功挂载的硬盘目录。如果之后你插上了未挂载的硬盘,systemd会自动完成挂载,此时你只需要手动重新加载NFS导出列表即可:
sudo exportfs -r
备注:内容来源于stack exchange,提问作者bagratte
相关产品推荐
相关产品推荐

