修复 btrfs “btrfs parent transid verify failed on ...”

问题描述 投票:0回答:5

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

父传输验证失败 109973766144 想要 1823 找到 1821

文件系统仍然可以卸载和重新挂载。

linux filesystems repair btrfs
5个回答
9
投票

提防 btrfs-zero-log

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

btrfs-zero-log 不是一个通用的修复一切工具尽管互联网上有很多人相信和陈述。你通常不需要使用它。

所以这个工具只有一个用例:当您在日志中看到

BTRFS: failed to read log tree
消息时。

修复parent transid验证失败错误与
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。


4
投票

网上冲浪我发现很多answers建议使用

btrfs
清除
btrfs-zero-log
'内部日志。我以为
btrfsck
会有所帮助,但最终我发现了官方推荐,即先开始
btrfs scrub
,然后再采取其他行动!

所以只要运行

btrfs scrub /path/to/mountpoint
如果你仍然可以挂载你的文件系统。也许它像我的情况一样工作。


4
投票

首先运行这个命令:

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

如果它告诉你“All supers are valid, no need to recover”,你需要运行以下命令来清除文件系统日志树:

sudo btrfs rescue zero-log /dev/sda2

现在你应该可以挂载你的

Btrfs
文件系统了。


2
投票

我遇到过类似的情况:

  1. logs充满了
    parent transid verify failed on 109973766144 wanted 1823 found 1821
  2. dmesg充满了
    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

我的系统配置

  1. 具有 3 个 nfs 共享的 NAS
  2. BTRFS 文件系统
  3. Rockstor操作系统

  4. RAID 10 设置

补充信息

  1. btrfs 挂载变为只读

  2. btrfs-scrub 失败并显示

    ERROR: scrubbing /dev/md124p2 failed for device id 1: ret=-1, errno=5

我通过删除 nfs export ie 解决了这个问题。从 /etc/export/ 然后重新安装卷,瞧,一切都好了

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


-1
投票

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

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

.

© www.soinside.com 2019 - 2024. All rights reserved.