我有一个 btrfs 文件系统,无论我尝试用它做什么,其中一个目录都会导致 IO 错误:
列出其内容或尝试删除它会导致 IO 错误,即使作为超级用户也是如此:
$ ls thedir ls: cannot access 'thedir': Input/output error $ sudo rm -fr thedir rm: cannot remove 'thedir': Input/output error
在其上挂载 tmpfs 会导致 IO 错误:
$ sudo mount -t tmpfs -o size=10M tmpfs thedir mount: thedir: can't read superblock on tmpfs.
我认为“超级块在tmpfs”在这里具有误导性,在同一文件系统中的不同目录上安装 tmpfs 工作正常,并且超级块是 btrfs 的东西,而不是据我所知的 tmpfs 的东西。
内核日志说:
BTRFS critical (device sda1): corrupt leaf: root=5 block=46321315840 slot=24 ino=106823936, invalid inode generation: has 18446744073709551492 expect [0, 369151]
BTRFS error (device sda1): block=46321315840 read time tree block corruption detected
一方面,btrfs 检测到错误并防止出现更严重的问题是件好事,但现在整个文件系统基本上都被破坏了。坏目录是一个问题,特别是对于 rsync,它在 IO 错误后停止。
是否可以得到这文件系统恢复到可用状态?我有备份;如果需要,我可以创建一个新的文件系统并复制所有数据,但这需要很多天,甚至可能几周的时间。我宁愿删除损坏的目录,只恢复那部分,它要小得多。
我正在使用 Linux 5.4.83 和btrfs-progs
5.9。我知道btrfs check --repair
,但我也知道其手册页中的警告:
不要使用 --repair ,除非开发人员或有经验的用户建议您这样做,并且只有在接受没有 fsck 成功修复所有类型的文件系统损坏之后。例如。一些其他软件或硬件错误可能会严重损坏卷。