テクノロジー · 実用ガイド

NFS の「Stale file handle」?再マウント前に変わったサーバー ID を証明する

ESTALE は保存済み参照が有効なオブジェクトを指さない状態です。mount 時の export 障害と操作時の object 失効を分け、サーバー境界を直して一台で受入確認します。

観測、identity 比較、安定化を分ける図。
Watch at Ease オリジナルイラスト:再接続前に変わった NFS identity を証明します。 Watch at Ease

ESTALE は保存済み参照が有効なオブジェクトを指さない状態です。mount 時の export 障害と操作時の object 失効を分け、サーバー境界を直して一台で受入確認します。

Linux は ESTALE を Stale file handle と定義し、NFS 以外でも発生し得ます。 NFSv4 の persistent handle は object 削除や filesystem 不可用で stale になります。

1. 現場を固定し writer を守る

失敗 command、path、client、server、NFS version、最初の時刻と kernel/service log を保存します。対象 mount への writer を止め、広範な lazy unmount や flush から始めません。

client の findmnt と正常 client を比較し、server の backing mount、exportfs -v、storage/NFS log を変更前に保存します。

2. ESTALE の発生点を分類

mount 自体が ESTALE なら export と live table を調べます。既存 mount の ls、open、chdir、application が失敗するなら最初の path と隣接 object を確認します。

delete-and-recreate、restore、dataset replacement、failover 後は同名でも別 object なので、古い client 参照は無効です。

3. 変わった server identity を証明

export path が missing mount 下の空 directory でなく、意図した filesystem にあることを確認します。UUID/device、fsid、options、rename/restore/mover/migration を比較します。

RFC 7530 は削除 object に stale を要求し、filesystem が server namespace から消えた場合も stale になります。reboot は時刻証拠であり原因証明ではありません。

4. 証明した境界だけ修復

backing storage を先に戻し、export path/identity を直します。live table が原因と証明した時だけ同期します。広範な unexport/flush は他 client と NFSv4 state に影響します。

他事例だけで subtree_check、fsid、protocol version、mount options を変えず、一回一仮説で試します。

5. 一台で再接続し workload を受入

namespace 安定後、一台を quiesce し stale cwd から離れ、正確な mount を安全に外して再 mount します。止められない process を lazy detach で隠しません。

fresh lookup、代表 read、許可された controlled write、metadata、application transaction を確認し、別 client と log を比較してから残りを戻します。

server、client、data の受入ゲート図。
Watch at Ease オリジナルイラスト:namespace 安定後に再接続します。 Watch at Ease