当我在办公室并插入有线以太网连接(通过扩展坞)时,我需要在笔记本电脑上安装 NFS 共享。在这种情况下,是否有可靠的方法来自动挂载和卸载 NFS 共享?
我正在运行 Arch Linux。我尝试了此处描述的 NetworkManager 调度程序方法:NFS - ArchWiki
使用这种方法,当我尝试连接到办公室外的任何 WiFi 接入点时,我的系统将冻结(挂起,变得无响应)。
我的所有 NFS 挂载都使用这些选项:
nfsserver:/path/one/ /path/one nfs _netdev,defaults,noatime,nodiratime,soft,retrans=6,timeo=20,retry=0,rsize=32768,wsize=32768,proto=tcp 0 0
我从上面的链接中使用的完整说明粘贴在这里:
启用并启动 NetworkManager-dispatcher.service。
以下脚本通过侦听 pre-down 和 vpn-pre-down 事件,在禁用相关网络连接之前安全卸载 NFS 共享:
注意:此脚本会忽略带有 noauto 选项的安装。
将此脚本放置在 /etc/NetworkManager/dispatcher.d/30-nfs.sh
#!/bin/bash
# Find the connection UUID with "nmcli con show" in terminal.
# All NetworkManager connection types are supported: wireless, VPN, wired...
WANTED_CON_UUID="CHANGE-ME-NOW-9c7eff15-010a-4b1c-a786-9b4efa218ba9"
if [[ "$CONNECTION_UUID" == "$WANTED_CON_UUID" ]]; then
# Script parameter $1: NetworkManager connection name, not used
# Script parameter $2: dispatched event
case "$2" in
"up")
mount -a -t nfs4,nfs
;;
"pre-down");&
"vpn-pre-down")
umount -l -a -t nfs4,nfs >/dev/null
;;
esac
fi
使用 chmod 使脚本可执行,并在 /etc/NetworkManager/dispatcher.d/pre-down 中创建符号链接以捕获 pre-down 事件:
# ln -s /etc/NetworkManager/dispatcher.d/30-nfs.sh /etc/NetworkManager/dispatcher.d/pre-down.d/30-nfs.sh
为了使这个脚本实际工作,我必须修改 pre-down 事件的 case 语句,如下所示:
"pre-down"|"down")
在此更改之前,未执行任何脚本操作来响应预停机事件。更改后,脚本会适当响应事件。然而,正如我所说,每当我尝试连接到办公室外的 WiFi 接入点时,我的笔记本电脑都会死机。
我在日志中找不到任何与此相关的内容。但我有足够的 NFS 经验,猜测这个问题正是在 NFS 挂载不可用时发生的。此外,问题是在我开始使用上述方法后才开始出现的。以前,我通过 SSHFS 手动连接,没有遇到冻结问题。
我也简单尝试了以下方法:
[已解决] 因 NFS 共享关闭导致长时间延迟启动 / 网络、服务器和保护 / Arch Linux 论坛
然而,这个方法看起来确实很粗略而且过时,所以我很快就放弃了。因为这似乎是一种常见的需求,所以我希望有一个已知的、可靠的解决方案。不过,我似乎找不到一个。