fix btrfs "btrfs parent transid verify failed on ..."

9 人关注

替换代码0】显示所有的btrfs文件系统,但也有很多错误,比如。

在109973766144号文件中,父代transid验证失败,想要1823,发现1821。

文件系统仍然可以被解除挂载并重新挂载。

linux
filesystems
repair
btrfs
Per
Per
发布于 2017-09-28
5 个回答
lifeisfoo
lifeisfoo
发布于 2020-08-19
已采纳
0 人赞同

Beware of btrfs-zero-log

btrfs-zero-log文档 明确指出,这不是一个通用的工具,可以使用。

btrfs-zero-log 不是一个通用的修复一切的工具 , 尽管许多人相信并在互联网上声明 .你一般不需要使用它。

这个工具只有一个用例:当你有 BTRFS: failed to read log tree 日志时。

Fixing parent transid verify failed errors with usebackuproot

The 3.2 Linux kernel 于2012年1月推出 recovery 选项。 然后,在2016年5月的4.6版本中。 它被取代了 作者: usebackuproot 。 你也可以看到 the commit if you're interested.

The 文件 清楚地解释它的作用。

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.

A 官方常见问题部分的说明指出,这是解决这个 "父代transid "错误的正确方法。

我如何从 "父代转录验证失败 "的错误中恢复?

parent transid verify failed on 29360128 wanted 1486656 found 1486662

如果后两个数字(想要1486656和发现1486662)接近 在一起(大约在20以内),那么就用

-o ro,usebackuproot

可能会有帮助。如果在只读挂载的情况下成功了,那么再试一次 不加ro选项,进行读写挂载。

如果usebackuproot不起作用,那么FS基本上就无法恢复了在其当前状态下,使用当前的工具。你应该使用btrfs restore来刷新你的备份,然后再从备份中恢复。

Commands to use

这些命令只是Fedora安装中btrfs磁盘故障的例子。 用你的设备替换/dev/sda2,用你的挂载点替换/sysroot

在只读模式下第一次尝试。

mount -t btrfs -o ro,usebackuproot /dev/sda2 /sysroot

如果成功了,再试一次,不使用readonly命令。

mount -t btrfs -o usebackuproot /dev/sda2 /sysroot

如果这样做了,你应该能够启动你的Linux。

安装它将不会使它通过btrfsck
Per
Per
发布于 2020-08-19
0 人赞同

在网上冲浪时,我发现有很多 答案 建议通过使用 btrfs 来清除 btrfs-zero-log 的内部日志。我认为 btrfsck 可以提供帮助,但最终我发现 官方建议 which is to 首先只要启动一个 btrfs scrub 在采取其他行动之前!

所以只要运行 btrfs scrub /path/to/mountpoint 就可以了,如果你也能加载你的文件系统。也许就像我的情况一样,它是有效的。

coda
coda
发布于 2020-08-19
0 人赞同

我也面临类似的情况。

  • logs were full with parent transid verify failed on 109973766144 wanted 1823 found 1821
  • dmesg was full with BTRFS info (device sda): no csum found for inode 16485445 start 73728 and BTRFS warning (device sda): csum failed ino 16485465 off 36864 csum 2268363541 expected csum 0
  • 我的系统配置

  • NAS with 3 nfs shares
  • BTRFS file system
  • Rockstor操作系统

  • RAID 10设置

  • btrfs挂载变得只读

  • btrfs-scrub失败, ERROR: scrubbing /dev/md124p2 failed for device id 1: ret=-1, errno=5

  • 我通过删除/etc/export/中的nfs导出,然后重新挂载卷来解决这个问题,果然一切正常了。

    2018年1月29日更新。 工作了几天后,它又完全回到了原来的状态。

    我经历了一个非常类似的问题:4个HDD在RAID 10中,使用madm,BTRFS文件系统(ubuntu 18.04,内核4.18),通过samba访问。 dmesg 报告了很多与你的错误类似的错误,四分之一的文件无法打开( I/O error ), btrfs scrub 以同样的错误代码失败。禁用samba服务并重新挂载文件系统,像一个魅力一样治愈了所有问题。我现在将建立一个新的NAS配置,使用ext4而不是btrfs,因为我不再相信这个文件系统了。在这样的配置中与nfs/samba交互时,似乎有一个错误?
    W.M.
    W.M.
    发布于 2020-08-19
    0 人赞同

    首先运行这个命令。

    sudo btrfs rescue super-recover -v /dev/sda2

    If it tells you "所有超声波都是有效的,不需要恢复" ,你需要运行以下命令来清除文件系统日志树。

    sudo btrfs rescue zero-log /dev/sda2

    现在你应该能够装载你的 Btrfs 文件系统。

    这个命令对我来说是有效的,尽管上面的其他命令并没有。这个命令找到了两个好的超级计算机和一个坏的超级计算机。在我确认文件系统确实是BTRFS之后,它继续前进并恢复了那个坏的超级计算机。之后,我就能够成功启动了。
    Fusca Software
    Fusca Software
    发布于 2020-08-19
    0 人赞同

    这里有类似/相同的问题。

    parent transid verify failed on 29605888 wanted 50 found 46

    对我来说,btrfs已经不能安装了,所以 btrfs scrub 是没有选择的。 而且我的 /etc/exports 也是空的。

    I tried btrfsck --init-extent-tree /dev/sda4 but I still get errors.

    btrfs check(main+0x82)[0x411ba2] /lib64/libc.so.6(__libc_start_main+0xf5)[0x7f8210fab555] btrfs check[0x411ca8] Aborted

    链接到屏幕截图(Updload不可能)。