Configuration

automount nfs:不可靠伺服器的 autofs 超時設置 - 如何避免掛斷?

  • September 17, 2016

我正在為我們的平面共享執行一個小型伺服器。它主要是帶有一些附加服務的文件伺服器。客戶端是 Linux 機器(主要是 Ubuntu,但也有一些其他發行版)和介於兩者之間的一些 Mac(-Book)(但它們對於這個問題並不重要)。伺服器正在執行Ubuntu 11.10 (Oneiric Ocelot)“伺服器版”,我進行設置和測試的系統執行 11.10“桌面版”。我們使用 Samba(我們更熟悉)執行我們的共享很長一段時間,然後遷移到NFS(因為我們在 LAN 中沒有任何 Windows 使用者並想嘗試一下),到目前為止一切正常.

現在我想使用autofs設置自動掛載以使事情順利進行(到目前為止,每個人都在需要時手動掛載共享)。自動安裝似乎也有效。問題是我們的“伺服器”不是 24/7 執行以節省能源(如果有人需要伺服器上的東西,他/她打開電源然後關閉它,所以它每天只執行幾個小時)。但是由於 autofs 設置,當伺服器沒有執行時,客戶端經常掛斷退出。

  • 即使伺服器沒有執行,我也可以很好地啟動所有客戶端。

  • 但是當我想顯示一個目錄(在終端或 nautilus 中)時,它包含指向共享的符號連結,/nfs而伺服器沒有執行,它會掛起至少兩分鐘(因為 autofs 無法連接到伺服器但保持嘗試,我假設)。

    • 有沒有辦法避免這種情況?這樣安裝會延遲到更改目錄或訪問該目錄的內容?不是在“查看”下的共享連結時/nfs?我認為不是,但也許有可能不嘗試訪問它這麼長時間?只需給我一個空目錄或“找不到/連接到該目錄”或類似的東西。
  • 當伺服器執行時,一切正常。

  • 但是,當伺服器關閉時,在解除安裝共享之前df,工具(如或ll)掛起(假設因為他們認為共享仍在執行但伺服器不再響應)。

    • 當連接失去時,有沒有辦法自動解除安裝共享?
  • 此外,當伺服器關閉並且它們仍然掛載共享時,客戶端不會關閉或重新啟動。他們(似乎無限地)“殺死剩餘的程序”並且似乎沒有任何事情發生。

我認為這一切都歸結為安裝和解除安裝的整潔超時值。並且可能在與伺服器的連接失去時刪除所有共享。

所以我的問題是:如何處理?作為獎勵:是否有一種/nfs無需掛載真實共享的好方法來連結內部(一個 autofs 選項,或者可能使用偽 FS,/nfs當掛載發生時會被替換或類似的東西)?

我的設置

NFS 設置非常基本,但到目前為止對我們的服務很好(使用NFSv4):

/etc/default/nfs-common

NEED_STATD=
STATDOPTS=
NEED_IDMAPD=YES
NEED_GSSD=

/etc/idmapd.conf

[General]
Verbosity = 0
Pipefs-Directory = /var/lib/nfs/rpc_pipefs
Domain = localdomain
[Mapping]
Nobody-User = nobody
Nobody-Group = nogroup

/etc/出口

/srv/   192.168.0.0/24(rw,no_root_squash,no_subtree_check,crossmnt,fsid=0)

在導出根目錄下,/srv我們有兩個目錄bind

/etc/fstab(伺服器)

...
/shared/shared/      /srv/shared/      none    bind  0 0
/home/Upload/        /srv/upload/      none    bind  0 0

第一個主要是只讀的(但我通過文件屬性和所有權而不是 NFS 設置強制執行),第二個是所有的rw注意:它們在/etc/exports中沒有額外的條目,但是單獨安裝它們可以工作。

在客戶端,他們/etc/fstab根據需要進行設置和手動安裝(morton是伺服器的名稱,它可以很好地解析)。

/etc/fstab(客戶端)

morton:/shared  /nfs/shared nfs4    noauto,users,noatime,soft,intr,rsize=8192,wsize=8192    0   0
morton:/upload  /nfs/upload nfs4    noauto,users,noatime,soft,intr,rsize=8192,wsize=8192    0   0

對於autofs 設置,我從客戶端上刪除了條目,/etc/fstab其餘設置如下:

/etc/auto.master

/nfs    /etc/auto.nfs

首先,我綁定了提供的執行檔/etc/auto.net(您可以在此處查看),但它不會自動為我安裝任何東西。然後我/etc/auto.nfs根據我在網上找到的一些 HowTos 寫了一個:

/etc/auto.nfs

shared  -fstype=nfs4  morton:/shared
upload  -fstype=nfs4  morton:/upload

它有點工作……或者如果伺服器將執行 24/7 將工作。因此,當客戶端在伺服器未執行的情況下啟動,或者當伺服器出現故障而共享仍然連接時,我們會遇到掛斷。

使用掛載選項“bg,intr,hard”在客戶端上掛載 NFS 共享。

在您的情況下,最重要的是背景的“bg” - 它告訴系統在伺服器不可用時不要阻塞。

“intr” 表示可中斷 - 因此您可以使用 kill 命令殺死客戶端上的掛載。

“硬”是“軟”的反義詞。不同之處在於“硬”將不斷嘗試,而“軟”將在伺服器不可用時以指數方式退出重試。

我使用手冊頁中的一些選項進行了更多嘗試。所有bg,hard, bg,soft,fg,hardfg,soft給我超過兩分鐘的返回時間。

但是,設置retrans=1,retry=0(與上述任何一項結合)給了我大約三秒鐘的時間。相當體面。雖然我不確定每種組合的含義。將進一步探勘。

我還遇到了 autofs 選項MOUNT_WAITUMOUNT_WAIT. 我無法與他們取得一些不同的結果,但我會繼續努力。似乎是使用“更安全”(也就是更多重試等)NFS 選項但 autofs 的快速返回時間的好方法,或者不是?

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