Warm tip: This article is reproduced from serverfault.com, please click

unix-Linux 中的“陈旧文件句柄”是什么意思?

(unix - What does 'stale file handle' in Linux mean?)

发布于 2013-11-20 19:34:33

假设我打开了一个终端,并通过该终端cd进入了某个目录。通过另一个终端,我删除了该目录并从相同的备份中将其恢复。当我尝试vim从第一个终端访问同一目录中的文件时,为什么会收到有关陈旧文件句柄的错误?这是什么意思?(顺便说一句,我发现可以通过 绕过这个问题cd $(pwd)。)

Questioner
IDDQD
Viewed
11
dg99 2013-11-21 03:56:34

当目录被删除时,索引节点对于该目录(和其内容的索引节点)被回收。你的 shell 指向该目录的 inode(及其内容的 inode)的指针现在不再有效。当目录从备份中恢复时,旧的 inode不会(必须)重用;目录及其内容存储在随机 inode 上。唯一保持不变的是目录对恢复的目录重用相同的名称(因为你告诉它)。

现在,如果你尝试访问原始 shell 仍指向的目录的内容,它将将该请求作为对原始 inode 的请求传达给文件系统,该原始 inode 已被回收(甚至可能用于某些用途)现在完全不同了)。因此,你收到一条stale file handle消息,因为你要求提供一些不存在的数据。

当你执行cd操作时,shell 会重新评估你提供给它的任何目的地的 inode 位置。现在你的 shell 知道目录的新 inode(以及其内容的新 inode),未来对其内容的请求将是有效的。