Arch-Linux

NFS systemd 自動掛載的問題

  • March 14, 2022

我正在使用 systemd 在帶有 Arch 的筆記本上自動掛載 NFS 分區。

問題:

如果 dolphin 在關閉時打開了 NFS 共享的文件夾並且我更改了網路,它會在我下次啟動時拒絕打開。

zsh 和其他軟體有時也會發生同樣的情況。

只有當我連接到除常用網路之外的任何網路並且不使用我的 VPN 或根本未連接到任何網路時,才會出現此問題。只要我的系統可以訪問 NFS 伺服器,一切都會順利進行。

目前解決方法:

目前我正在通過停止自動掛載單元並再次啟動應用程序來規避這個問題。


以下是相關的單元文件:

/etc/systemd/system/pool1.automount

內容:

[Unit]
Description=Automount NFS pool1
Requires=NetworkManager.service
After=network-online.target

[Automount]
Where=/pool1
TimeoutIdleSec=10min

[Install]
WantedBy=multi-user.target

/etc/systemd/system/pool1.mount

內容:

[Unit]
Description=Mount NFS pool1

[Mount]
What=192.168.1.5:/pool1
Where=/pool1
Type=nfs
Options=soft,async

我確信有一個選項可以告訴 systemd 僅在共享存在時才嘗試掛載,但我還沒有找到任何關於它的資訊。

如果 NFS 伺服器不存在,我正在尋找一種可以無縫處理不同網路而不會出現任何延遲的解決方案。


更新

我已經添加TimeoutSec=5到該[Mount]部分,唯一的區別是現在海豚在 5 秒後放棄並自行關閉。

我能夠重現問題。似乎有多個問題在起作用。NFS 本身、systemd 和網路堆棧都有問題。自動掛載的東西並不是真正為瞬態條件設計的。也許它可以被黑客攻擊以更好地工作,我不知道。反正…


此處顯示了一種蠻力方法。基本上,不要使用自動掛載,而是從 cron 連續 ping 伺服器並根據其狀態掛載或解除安裝。


我實驗的另一種方法可以用來networkd-dispatcher自動掛載和解除安裝。事件腳本檢測伺服器或網路並採取相應措施。

為掛載創建 fstab(或您喜歡的任何方法)。至少設置為“noauto”。

/etc/networkd-dispatcher/routable.d/10-nfs-pool1. 標記執行檔(我猜)。

#!/bin/sh
if ping -q -c1 nfs-server >/dev/null; then
  mount /pool1
else
  umount -f -l /pool1
fi

現在將該文件複製到 off.d 和 no-carrier.d 中:

ln -s ../routable.d/10-nfs-pool1 /etc/networkd-dispatcher/off.d/
ln -s ../routable.d/10-nfs-pool1 /etc/networkd-dispatcher/no-carrier.d/

不幸的是,即使在不使用掛載時,上述兩種方法都會保持掛載處於活動狀態。自動掛載的問題是當您開始手動管理掛載時,自動掛載被禁用。Automount 似乎可以使用更多功能,但也許我只是不知道它們。

引用自:https://unix.stackexchange.com/questions/692158