Linux中的“stale file handle”是什么意思?
假设我有一个terminal打开,并通过该terminal,我已经cd
到某个目录。 通过另一个terminal,我删除该目录,并从相同的备份恢复它。 当我尝试从第一个terminal的vim
文件,在同一个目录中,为什么我得到一个关于一个陈旧的文件句柄的错误? 这是什么意思? (在附注中,我发现可以通过cd $(pwd)
绕过这个问题。)
当目录被删除时,该目录的inode(及其内容的inode)被回收。 你的shell对该目录的inode(及其内容的inode)的指针现在不再有效了。 当从备份恢复目录时,旧的inode 不 (必然)被重用; 该目录及其内容存储在随机的inode中。 唯一保持不变的是, 父目录为已恢复的目录重新使用相同的名称(因为您告诉它)。
现在,如果尝试访问原始shell仍指向的目录的内容,它会将该请求传递给文件系统,作为原始inode的请求,此请求已被回收(甚至可能用于某些现在完全不同了)。 所以你得到一个stale file handle
消息,因为你问了一些不存在的数据。
当您执行cd
操作时,shell重新评估您给它的任何目标的inode位置。 现在你的shell知道目录的新索引节点(以及它的内容的新索引节点),将来对它的内容的请求将是有效的。