btrfs 文件系统损坏 - 如何继续

btrfs 文件系统损坏 - 如何继续

我的 btrfs 文件系统不知何故损坏了(父 transid、内部错误等)。我尝试了修复选项,但我认为文件系统的某些部分现在已乱套。btrfs 卷用于备份。因此丢失一些备份并不是什么大问题。但我只想让文件系统恢复到健康状态。

如何?

root@openmediavault:/home/christian# btrfs check /dev/sdf
Opening filesystem to check...
Checking filesystem on /dev/sdf
UUID: dc7ca9ad-6af0-47e9-9c3a-860127d2c362
[1/7] checking root items
[2/7] checking extents
ref mismatch on [739855515648 16384] extent item 0, found 1
tree backref 739855515648 parent 2 root 2 not found in extent tree
backpointer mismatch on [739855515648 16384]
...
ref mismatch on [1407768510464 16384] extent item 1, found 0
backref 1407768510464 root 2 not referenced back 0x5642911036f0
incorrect global backref count on 1407768510464 found 1 wanted 0
backpointer mismatch on [1407768510464 16384]
owner ref check failed [1407768510464 16384]
ERROR: errors found in extent allocation tree or chunk allocation
[3/7] checking free space cache
cache and super generation don't match, space cache will be invalidated
[4/7] checking fs roots

更新

root@openmediavault:/home/christian# btrfs rescue super-recover /dev/sdf
All supers are valid, no need to recover

root@openmediavault:/home/christian# btrfs rescue zero-log /dev/sdf
Clearing log on /dev/sdf, previous log_root 0, level 0
Failed to find [1407768215552, 168, 16384]
btrfs unable to find ref byte nr 1407768248320 parent 0 root 2  owner 0 offset 0
transaction.c:195: btrfs_commit_transaction: BUG_ON `ret` triggered, value -5
btrfs(+0x3b748)[0x5588027c3748]
btrfs(btrfs_commit_transaction+0x12a)[0x5588027c3bcc]
btrfs(+0x5ae38)[0x5588027e2e38]
btrfs(main+0x1f3)[0x55880279be63]
/lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xeb)[0x7f0ef5be609b]
btrfs(_start+0x2a)[0x55880279beaa]
Abgebrochen

答案1

在您的 GitHub 问题中,我看到您已经重新格式化了您的驱动器,但如果其他人遇到同样的问题,我会将其保留在这里以供将来参考:

输出表明文件系统已经严重损坏。在某些情况下,尝试修复可能会进一步损坏它。使文件系统再次稳定的唯一可靠方法是重新格式化它。

如果你需要从中恢复重要数据,最好的选择是btrfs restore然后:它以只读方式访问驱动器 - 因此不会造成任何进一步的损坏 - 并尝试尽可能好地恢复所有可读文件,甚至允许您忽略单个文件的错误以继续处理其他文件。

相关内容