修复btrfs" btrfs parent transid验证失败..."

时间:2017-09-28 15:03:07

标签: linux filesystems repair btrfs

btrfs fi show显示所有btrfs文件系统,但也有很多错误,如:

  

父母transid验证失败109973766144想要1823找到1821

文件系统仍然可以卸载并重新安装。

4 个答案:

答案 0 :(得分:3)

注意 btrfs-zero-log

btrfs-zero-log documentation 明确指出它不是一个通用的工具:

<块引用>

btrfs-zero-log 不是通用的解决所有问题的工具尽管互联网上有许多人相信和陈述的内容。您通常不需要使用它。

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

使用usebackuproot

修复父传输验证失败错误

3.2 Linux 内核 introduced in January 2012 recovery 选项。 然后,在 2016 年 5 月的 4.6 版本中,usebackuprootit was superseded。 如果您有兴趣,也可以查看 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 声明这是解决此“父传输”错误的正确方法:

<块引用>

如何从“父传输验证失败”错误中恢复?

例如:

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。

答案 1 :(得分:2)

我遇到了类似的情况:

  1. 日志已满parent transid verify failed on 109973766144 wanted 1823 found 1821
  2. dmesg 已满BTRFS info (device sda): no csum found for inode 16485445 start 73728BTRFS warning (device sda): csum failed ino 16485465 off 36864 csum 2268363541 expected csum 0
  3. 我的系统配置

    1. 拥有3个nfs股份的NAS
    2. BTRFS文件系统
    3. Rockstor操作系统

    4. RAID 10设置

    5. 其他信息

      1. btrfs mount变为只读

      2. btrfs-scrub因ERROR: scrubbing /dev/md124p2 failed for device id 1: ret=-1, errno=5

      3. 而失败

        我通过删除nfs导出来解决它,即。从/ etc / export /然后重新安装卷,瞧一切都好了

        更新2018年1月29日:工作几天后,它又回到了同一个州

答案 2 :(得分:1)

网上冲浪我发现很多answers建议使用btrfs来清除btrfs-zero-log'内部日志。我认为btrfsck可能会有所帮助,但最终我发现official recommendation 首先开始btrfs scrub ,然后再采取其他措施!

如果您仍然可以挂载文件系统,那么只需运行btrfs scrub /path/to/mountpoint即可。也许它就像我的情况一样。

答案 3 :(得分:0)

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

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