我的 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
在您的 GitHub 问题中,我看到您已经重新格式化了您的驱动器,但如果其他人遇到同样的问题,我将把它留在这里以供将来参考:
输出表明文件系统已经严重损坏。在某些情况下,尝试修复可能会进一步损坏它。使文件系统再次稳定的唯一可靠方法是再次将其重新格式化。
如果您需要从中恢复重要数据,那么最好的选择是
btrfs restore
:它以只读方式访问驱动器-因此不会造成任何进一步的损坏-并尝试尽可能好地恢复所有可读文件,甚至允许您忽略单个文件的错误继续与其他文件。