【发布时间】:2017-09-28 15:03:06
【问题描述】:
btrfs fi show 显示所有 btrfs 文件系统,但也显示很多错误,例如:
父 transid 验证失败 109973766144 想要 1823 找到 1821
文件系统仍然可以卸载和重新安装。
【问题讨论】:
标签: linux filesystems repair btrfs
btrfs fi show 显示所有 btrfs 文件系统,但也显示很多错误,例如:
父 transid 验证失败 109973766144 想要 1823 找到 1821
文件系统仍然可以卸载和重新安装。
【问题讨论】:
标签: linux filesystems repair btrfs
btrfs-zero-log documentation 明确表示它不是通用工具:
btrfs-zero-log 不是一个通用的解决一切问题的工具,尽管互联网上有很多人相信和陈述。一般不需要使用。
此工具只有一个用例:当您拥有 BTRFS: failed to read log tree 日志时。
usebackuproot 修复 parent transid verify failed 错误
3.2 Linux 内核 introduced in January 2012 recovery 选项。
然后,在 2016 年 5 月发布 4.6 版本,it was superseded 由 usebackuproot。
有兴趣的也可以看the commit。
documentation 清楚地解释了它的作用:
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.
note in the official FAQ section 声明这是修复此“父 transid”错误的正确方法:
如何从“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
如果可行,请在不使用只读命令的情况下重试:
mount -t btrfs -o usebackuproot /dev/sda2 /sysroot
如果这可行,您应该能够启动您的 Linux。
【讨论】:
上网发现很多answers建议使用btrfs-zero-log清除btrfs'内部日志。我认为btrfsck 可以提供帮助,但最终我发现了official recommendation,它首先只需启动btrfs scrub,然后再采取其他行动!
如果您仍然可以挂载文件系统,请运行btrfs scrub /path/to/mountpoint。也许它就像我的情况一样。
【讨论】:
我也遇到过类似的情况:
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 导出解决了它。从 /etc/export/ 然后重新安装卷,瞧一切都好了
2018 年 1 月 29 日更新:工作几天后,它又回到了原来的状态
【讨论】:
dmesg 报告了很多与你的错误类似的错误,四分之一的文件无法打开(I/O error),btrfs scrub 失败并出现相同的错误代码。禁用 samba 服务并重新挂载文件系统可以解决所有问题。我现在将使用 ext4 而不是 btrfs 设置新的 NAS 配置,因为我不再信任这个文件系统。在这样的配置中与 nfs/samba 交互时似乎存在错误?!
这里有类似/相同的问题:
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
#
屏幕截图链接(无法上传): Screenshot
似乎唯一的解决方案是通过
将数据恢复到另一个磁盘btrfs restore /dev/sda4 /mnt/anotherdisk/folder
.
【讨论】:
首先运行这个命令:
sudo btrfs rescue super-recover -v /dev/sda2
如果它告诉你“所有超级都有效,不需要恢复”,你需要运行以下命令来清除文件系统日志树:
sudo btrfs rescue zero-log /dev/sda2
现在您应该可以挂载Btrfs 文件系统了。
【讨论】: