Watch at Ease看見世界,讀懂生活。

科技 · 實用指南

NFS 顯示「Stale file handle」?重新掛載前先證明哪個伺服器身分改變

ESTALE 表示已保存的參照不再指向有效物件。先分開掛載時 export 故障與操作時物件失效,修好伺服器邊界,再讓一台客戶端重新連線並驗收。

區分現場、身分比較與穩定處理的示意圖。
Watch at Ease 原創插畫:重連前證明哪個 NFS 身分改變。 Watch at Ease

ESTALE 表示已保存的參照不再指向有效物件。先分開掛載時 export 故障與操作時物件失效,修好伺服器邊界,再讓一台客戶端重新連線並驗收。

Linux 將 ESTALE 定義為「Stale file handle」,NFS 與其他檔案系統都可能出現。 NFSv4 持久 handle 在物件被移除或檔案系統不可用時會失效。

1. 凍結事件並保護寫入者

記錄完整失敗命令、路徑、客戶端、伺服器、NFS 版本、第一個時間戳與核心或服務記錄。暫停經此掛載寫入的工作,不先做廣泛 lazy unmount 或 flush。

客戶端保存 findmnt 並與正常端比較;伺服器改動前保存底層掛載、exportfs -v 與儲存及 NFS 記錄。

2. 判斷 ESTALE 出現位置

mount 本身回 ESTALE 時,檢查請求的 export 與即時表;已掛載後由 ls、open、chdir 或應用失敗時,找第一個路徑並測試相鄰物件。

刪除重建、還原、dataset 替換或 failover 後,同名物件也可能有新身分,舊參照因此失效。

3. 證明哪個伺服器身分改變

確認 export 路徑位於預期檔案系統,不是遺失 mount 下方的空目錄。比較 UUID 或 device、fsid、選項及近期 rename、restore、mover 或 migration。

RFC 7530 要求已刪物件回 stale;檔案系統從伺服器 namespace 消失時也會失效。重開機只是時間線,不是根因證明。

4. 只修已證明的伺服器邊界

先恢復底層儲存,修正 export 路徑或身分;只有證據指向即時表時才同步。exportfs -r 協調設定,廣泛 unexport 或 flush 會影響其他客戶端與 NFSv4 狀態。

不要只因其他案例就改 subtree_check、fsid、協定版本或 mount 選項。每次只測一個假設。

5. 單一客戶端重連並驗收

伺服器 namespace 穩定後,先停止一台客戶端,離開失效工作目錄,安全卸載精確 mount 再重掛。不能停程序時要明確升級處理。

驗收新路徑查找、代表性讀取、允許時受控寫入、metadata 與一次應用交易;比較另一端並監控記錄,再恢復其餘端。

NFS stale handle 後的伺服器、客戶端與資料驗收門。
Watch at Ease 原創插畫:namespace 穩定後再重連。 Watch at Ease