我最近使用 btrfs-convert 将 lvm 卷上的 ext4 文件系统迁移到 btrfs。后来安装之后才发现有一些问题。
一旦我做了一些涉及将数据写入磁盘的事情,它就会被强制只读,从dmesg
.我做了一些研究并运行了scrub
,发现两个文件存在 csum 错误。不幸的是,其中之一是ext2_saved
用于回滚。我认为删除带有 csum 错误的文件可以解决问题。所以我删除了备份和其他文件。
重新启动后,scrub
没有发现任何错误。但是安装时,我现在收到以下消息:bdev /dev/mapper/my-volume errs: wr 0, rd 0, flush 0, corrupt 608, gen 0
。看来我现在可以写入磁盘(重命名文件有效,我还没有进行进一步的测试)。
该消息应该让我担心还是可以忽略?或者更好的是:我怎样才能找到它的原因?擦洗甚至 btrfs check --repair 都没有发现任何问题。
更新:
我运行了 Memtest 并检查了坏块。两项测试的结果都是干净的。我还将我的内核更新为4.9.9-gentoo
.当编译内核时我发现我有CONFIG_BTRFS_FS_CHECK_INTEGRITY
启用选项,又名Btrfs with integrity check tool compiled in (DANGEROUS)
.我现在禁用了这个选项。
之后我尝试启动 Chrome - 它显然在提到的磁盘上做了一些事情。不久之后我在 dmesg 中读到这样的内容:
*Some stacktrace*
btrfs_finish_ordered_io:someline errno=-95 unknown
forced readonly
卸载给我留下了这条消息:
cleaner transaction attach returned -30
当我仍然有校验和错误时,我也遇到了这些错误,现在已经解决了。现在我找不到他们的理由。
我再次运行了一次擦洗,结果为 0 个错误。运行时btrfs check --repair /dev/mapper/my-volume
,它现在fixed discount file extents for some inodes
,这显然是新发生的错误,因为更新之前的同一命令没有找到任何内容。
我可能必须将数据以只读方式移至另一个磁盘,然后对其进行格式化。
更新:
看起来,以只读方式复制数据是有效的,不会丢失数据。看起来从 ext4 到 btrfs 的转换尚未完美运行。
系统信息:
Kernel: 4.4.39-gentoo; now: 4.9.9-gentoo
btrfs-progs v.4.9
答案1
btrfs 保留每个设备的统计信息并将其永久存储在磁盘上。您可以使用 手动打印它们btrfs device stats device|mountpoint
。它们也打印在安装上(至少如果其中任何一个非零)。
所以你所看到的只是告诉你过去已经发现了腐败行为;您可以使用 -z 标志清除计数器btrfs device stats -z /dev/mapper/my-volume
:
当然,最好找出最初导致损坏的原因 - 我不确定它是否是 btrfs 转换错误,或者您是否有可能继续导致损坏的东西(不可靠的硬件)。如果您不确定的话,我建议您进行记忆测试。
(当然,应该进行备份,尤其是在使用像 btrfs 这样相对较新的文件系统时。)