包含虚拟磁盘的 btrfs 上的 csum 错误

包含虚拟磁盘的 btrfs 上的 csum 错误

我有一个 btrfs 磁盘,由于硬件故障而受到一些损坏,并且在复制某些文件时出现 I/O 错误。我运行了 btrfs scrap,当它报告 csum 错误时,我将其脱机并执行了 a btrfs check --check-data-csum,它返回了以下几十行:

mirror 0 bytenr 549766098944 csum 1874004453 expected csum 2335064354

据我所知,使用--backup很有可能解决这个问题,并且将是修复文件系统的第一步。然而,这是我用于 qemu 的虚拟磁盘存储,我担心如果我这样做,虚拟磁盘(尤其是 Windows 磁盘)的内部一致性会受到损害。

btrfs 联机帮助页--init-csum-tree在其他危险命令旁边提到了一个标志。这是使用此功能的好借口,还是我还有其他选择?

CentOS Linux 7,内核3.10.0-514.26.2.el7.x86_64

btrfs-progs 版本 4.4.1 发行版 1.el7

磁盘为WD red 6TB (5.5TiB) WD60EFRX,1个5.5TiB分区

虚拟磁盘采用 .qcow2 格式

答案1

请注意,btrfs 上的虚拟机映像存在一个已知问题。所以你的数据确实没问题。您应该预料到将来会出现更多此类警告/错误。 https://www.spinics.net/lists/linux-btrfs/msg25940.html

答案2

如果校验和不好,数据可能是坏的,清除校验和树(就是这样--init-csum-tree做的)并不能解决这个问题,它只会将坏数据直接暴露给用户空间,并防止检测旧数据中的任何其他位腐烂在FS上。本质上,您在磁盘上只有一份数据副本,并且该副本已损坏,因此您不再需要担心数据潜在地这些磁盘映像很糟糕,因为几乎可以肯定存在一些数据损坏。如果您只收到十几条错误消息,那么就不会出现很多至少,每个损坏应该对应 4-16KiB 的数据,因为 BTRFS 在块级别进行校验和),所以这是一件好事。

在这种情况下,我实际上建议使用btrfs restore将文件从磁盘拉到不同的位置,或者从备份恢复。如果您只有一个磁盘,因此没有数据复制,那么当您遇到校验和错误时,除了将已知的良好数据恢复到新位置之外,您无能为力。

相关内容