笔记本电脑上的 NFS 共享

笔记本电脑上的 NFS 共享

当我在办公室并插入有线以太网连接(通过扩展坞)时,我需要在笔记本电脑上安装 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 论坛

然而,这个方法看起来确实很粗略而且过时,所以我很快就放弃了。因为这似乎是一种常见的需求,所以我希望有一个已知的、可靠的解决方案。不过,我似乎找不到一个。

相关内容