科技 · 实用指南
NFS 报“Stale file handle”?重挂载前先证明哪个服务器身份变了
ESTALE 表示已保存的引用不再指向有效对象。先区分挂载时导出故障与运行时对象失效,修复服务器边界,再让一个客户端重连并验收业务。

ESTALE 表示已保存的引用不再指向有效对象。先区分挂载时导出故障与运行时对象失效,修复服务器边界,再让一个客户端重连并验收业务。
Linux 将 ESTALE 定义为“Stale file handle”,NFS 与其他文件系统都可能出现。 NFSv4 持久句柄在对象被删除或文件系统不可用时会失效。
1. 冻结现场并保护写入者
记录完整失败命令、路径、客户端、服务器、NFS 版本、首个时间戳和内核或服务日志。暂停通过该挂载写入的任务,不要先做大范围 lazy unmount 或清空导出。
客户端保存 findmnt 并与正常客户端比较;服务器在改动前保存底层挂载、exportfs -v 及存储和 NFS 日志。
2. 判断 ESTALE 出现在哪一步
若 mount 本身返回 ESTALE,检查请求的导出和实时导出表;若已挂载后由 ls、open、chdir 或应用失败,则定位首个路径并测试相邻对象。
删除重建、恢复、数据集替换或存储故障切换后,同名文件或目录也可能成为新对象,所以旧客户端引用会失效。
3. 证明哪个服务器身份改变
确认导出路径确实落在预期底层文件系统,而不是缺失挂载点下的空目录。比较 UUID 或设备身份、fsid、导出选项及近期重命名、恢复、mover 或迁移事件。
RFC 7530 要求已删除对象返回 stale;文件系统从服务器命名空间消失时也可失效。重启只是时间线证据,不是根因证明。
4. 只修复已证明的服务器边界
先恢复底层存储,纠正预期导出路径或身份;只有证据指向实时导出表时才同步它。exportfs -r 用于协调配置,广泛 unexport 或 flush 会影响所有客户端及 NFSv4 状态。
不要仅因别的案例而改 subtree_check、fsid、协议版本或挂载选项。一次只验证一个假设和一个受控改动。
5. 单客户端重连并验收业务
服务器命名空间稳定后,先停稳一个客户端,离开失效工作目录,安全卸载精确挂载点并重新挂载。无法停止进程时要有意升级处理,不要用 lazy detach 掩盖。
验收包括新路径查找、代表性读取、允许时受控写入、元数据检查和一次应用事务。比较另一客户端并观察日志,再恢复其余客户端。
