btrfs:逻辑校验和/标头错误

btrfs:逻辑校验和/标头错误

我使用 BTRFS 作为我的文件系统已经快两年了,完全没有发生任何事故,但是,昨天,我遇到了一个问题,我的文件系统会自动切换到只读。如果我重新启动计算机,它会以读写模式正确安装,但一段时间后会自动切换到只读模式。经过大量挖掘后,我将问题归结为 BTRFS 错误。

运行后

btrfs scrub start /dev/sda5

我在我的中找到以下内容dmesg

[  107.910348] BTRFS warning (device sda5): checksum/header error at logical 100470390784 on dev /dev/sda5, physical 36045881344: metadata leaf (level 0) in tree 7
[  107.910354] BTRFS warning (device sda5): checksum/header error at logical 100470390784 on dev /dev/sda5, physical 36045881344: metadata leaf (level 0) in tree 7
[  107.910364] BTRFS error (device sda5): unable to fixup (regular) error at logical 100470390784 on dev /dev/sda5

所以文件系统中有些东西已损坏。我还要指出,这/dev/sda5就是我的根分区所在的位置。但是,这似乎不是至关重要的事情,因为大多数时候一切都工作得很好。我猜想一定有什么东西每隔一段时间就会触发对损坏的块或文件的磁盘访问,使 BTRFS 崩溃并切换到只读模式。

我已经跑了btrfs scrub start /dev/sda5两次了,输出是

UUID:             8b0f88e4-8fb2-4201-8cfa-ed08f40fb185
Scrub started:    Wed Sep 18 14:26:47 2019
Status:           finished
Duration:         0:03:56
Total to scrub:   101.19GiB
Rate:             439.09MiB/s
Error summary:    verify=1
  Corrected:      0
  Uncorrectable:  1
  Unverified:     0

由于/dev/sda5是我的根分区,因此在安装时我无法执行任何操作。所以我使用实时 USB 启动到机器并运行btrfs rescue zero-log /dev/sda5,但这并没有解决问题。

其他一些可能有用的信息。我正在使用 Arch linux 和 5.2.11-arch1-1-ARCH。我还怀疑 Dropbox 可能是罪魁祸首,因为我几天前安装了它,但删除该程序并删除 dropbox 文件夹并没有解决问题。

我以前从未处理过这个问题,显然,每次系统锁定为只读模式时我都无法重新启动。任何帮助将不胜感激。

答案1

希望其他人能够希望得到的不仅仅是这个部分答案,但是:

Btrfs 为文件系统使用的每个块存储校验和。该错误消息意味着 btrs 读取了一个块并且校验和不匹配。通常,这是一个用户(文件)数据块,很容易修复(从备份中替换文件)。但是,在本例中,它是文件系统元数据块。

理想情况下,校验和损坏仅由于硬件问题(例如磁盘上的“位腐烂”)而发生。而且 btrfs 通常会存储两个元数据副本,即使只有一个磁盘(元数据配置文件 DUP)。因此,btrfs scrub通常会通过查看另一个副本来解决此问题 - 您没有该副本(创建的文件系统或转换为单个元数据配置文件),或者两个副本都已损坏。

您需要做的第一件事(实际上应该在像 之类的步骤之前完成zero-log)是确保您有备份,尤其是重要文件的备份。

之后,您肯定可以通过创建新的文件系统并复制数据来使其再次工作。我能给出的唯一其他建议是询问 btrfs 邮件列表

相关内容