btrfs fi show
显示所有 btrfs 文件系统,但也显示很多错误,例如:
父传输验证失败 109973766144 想要 1823 找到 1821
文件系统仍然可以卸载和重新挂载。
btrfs-zero-log 文档 明确指出它不是一个通用的工具:
btrfs-zero-log 不是一个通用的修复一切工具,尽管互联网上有很多人相信和陈述。你通常不需要使用它。
所以这个工具只有一个用例:当您在日志中看到
BTRFS: failed to read log tree
消息时。
usebackuproot
3.2 Linux内核2012年1月引入
recovery
选项。
然后,在 2016 年 5 月的 4.6 版本中,被 usebackuproot
取代。 如果您有兴趣,还可以查看commit。
文档清楚地解释了它的作用:
usebackuproot
nousebackuproot
(since: 4.6, default: off)
Enable autorecovery attempts if a bad tree root is found at mount time.
Currently this scans a backup list of several previous tree roots and
tries to use the first readable. This can be used with read-only mounts as well.
Note: This option has replaced recovery.
官方常见问题解答部分中的注释指出这是修复此“父传输”错误的正确方法:
如何从“parent transid verify failed”错误中恢复?
例如:
parent transid verify failed on 29360128 wanted 1486656 found 1486662
如果后两个数字(想要的1486656和找到的1486662)接近 在一起(彼此相距约 20 以内),然后安装
-o ro,usebackuproot
可能有帮助。如果只读挂载成功,则重试 没有
选项,用于读写挂载。ro
如果 usebackuproot 不起作用,则 FS 在当前状态下使用当前工具基本上无法恢复。您应该使用 btrfs restore 来刷新您的备份,然后从中恢复。
这些命令只是 Fedora 安装上失败的 btrfs 磁盘的示例。 将
替换为您的设备,将/dev/sda2
替换为您的挂载点/sysroot
首先在只读模式下尝试:
mount -t btrfs -o ro,usebackuproot /dev/sda2 /sysroot
如果可行,请在不使用 readonly 命令的情况下重试:
mount -t btrfs -o usebackuproot /dev/sda2 /sysroot
现在,如果该命令运行无误,您应该能够启动 Linux。
网上冲浪我发现很多answers建议使用
btrfs
清除btrfs-zero-log
'内部日志。我以为btrfsck
会有所帮助,但最终我发现了官方推荐,即先开始btrfs scrub
,然后再采取其他行动!
所以只要运行
btrfs scrub /path/to/mountpoint
如果你仍然可以挂载你的文件系统。也许它像我的情况一样工作。
首先运行这个命令:
sudo btrfs rescue super-recover -v /dev/sda2
如果它告诉你“All supers are valid, no need to recover”,你需要运行以下命令来清除文件系统日志树:
sudo btrfs rescue zero-log /dev/sda2
现在你应该可以挂载你的
Btrfs
文件系统了。
我遇到过类似的情况:
parent transid verify failed on 109973766144 wanted 1823 found 1821
BTRFS info (device sda): no csum found for inode 16485445 start 73728
和BTRFS warning (device sda): csum failed ino 16485465 off 36864 csum 2268363541 expected csum 0
我的系统配置
Rockstor操作系统
RAID 10 设置
补充信息
btrfs 挂载变为只读
btrfs-scrub 失败并显示
ERROR: scrubbing /dev/md124p2 failed for device id 1: ret=-1, errno=5
我通过删除 nfs export ie 解决了这个问题。从 /etc/export/ 然后重新安装卷,瞧,一切都好了
2018 年 1 月 29 日更新: 工作几天后,它又回到了完全相同的状态
这里有类似/相同的问题:
parent transid verify failed on 29605888 wanted 50 found 46
对我来说,btrfs 不再可挂载,所以
btrfs scrub
是别无选择。
我的/etc/exports
也是空的。
我试过
btrfsck --init-extent-tree /dev/sda4
,但我仍然遇到错误。
...
btrfs check(main+0x82)[0x411ba2]
/lib64/libc.so.6(__libc_start_main+0xf5)[0x7f8210fab555]
btrfs check[0x411ca8]
Aborted
#
截图链接(无法上传): 截图
似乎唯一的解决办法是通过以下方式将数据恢复到另一个磁盘
btrfs restore /dev/sda4 /mnt/anotherdisk/folder
.