我有一个 RootFS,它是一个只读的 SquashFS,上面覆盖着可写存储(如果重要的话,是 ext4)。
这通常有效,但过了一段时间,一个文件变得无法访问:
# cat /etc/init.d/update
[ 378.714771] overlayfs: failed to get inode (-151)
[ 378.719636] overlayfs: failed to get inode (-151)
cat: can't open '/etc/init.d/update': Stale NFS file handle
似乎错误出现在目录条目中,因为即使使用普通的命令也会出现错误ls
:
# ls /etc/init.d/update
[ 1256.618431] overlayfs: failed to get inode (-151)
[ 1256.623489] overlayfs: failed to get inode (-151)
ls: /etc/init.d/update: Stale NFS file handle
此错误似乎在重启后仍然存在。
这个特定的文件已经被编辑,所以我有两个版本,一个在“较低”的 SquashFS 上,一个在“较高”的 ext4 上;两者都可以使用各自的挂载点访问:错误似乎来自 OverlayFS 本身。
我似乎无法清除这个错误(而且我很害怕,因为这个系统应该全天候投入生产),我已经fsck -fp
在所有受影响的系统上运行了(当然不是在 SquashFS 上)。
欢迎任何提示。
注意:我没有(也不需要)NFS;我假设他们重复使用了这个errno
(151),但我不知道。
更新:我能够通过从“上层”目录中手动删除文件的“新”副本来清除错误;随后对同一文件的编辑按预期进行。
我非常害怕,我想了解发生了什么(并确保它不会在“生产”中再次发生!)。
更新2:我在我的系统中使用了 OverlayFS 的默认设置kernel v5.7
,我应该选择更多选项吗?
<*> Overlay filesystem support
[ ] Overlayfs: turn on redirect directory feature by default
[*] Overlayfs: follow redirects even if redirects are turned off
[ ] Overlayfs: turn on inodes index feature by default
[ ] Overlayfs: turn on metadata only copy up feature by default