关于 linux 上 btrfs 的一项很酷的事情是,如果它有冗余数据,它可以纠正位腐烂,因为它的每个块校验和。我可以通过设置一个带有两个磁盘的raid1 来获取冗余数据。但是,我还可以获取冗余数据以防止单个磁盘上的位腐烂吗?
我看到 btrfs 有一个元数据 ( -m dup
)的 DUP 选项,它在每个驱动器上存储两个元数据副本。但是,文档说 dup 不是数据的选项(即-d dup
不是选项)。有什么好的方法可以解决这个问题吗?将单个磁盘分成两个相等的部分并将它们一起raid1?
或者,是否有另一种简单的方法可以在 linux 上进行文件系统级别的错误检测和纠正(类似于文件系统的自动存档)?
(我对建议我使用两个驱动器的答案不感兴趣。)
编辑:我确实找到了这个,它是一个 FUSE 文件系统,可以像普通文件一样安装带有纠错功能的文件。也就是说,这是某人在 2009 年提出的一个小技巧/概念证明,此后就没有真正接触过。
我有一个 btrfs 文件系统,我已经清理了几次并发现了一些错误。如果我检查设备状态,我会看到我有 generation_errs:
$ sudo btrfs device stats /dev/nvme0n1p5
[/dev/nvme0n1p5].write_io_errs 0
[/dev/nvme0n1p5].read_io_errs 0
[/dev/nvme0n1p5].flush_io_errs 0
[/dev/nvme0n1p5].corruption_errs 0
[/dev/nvme0n1p5].generation_errs 3
Run Code Online (Sandbox Code Playgroud)
这些 generation_errs 是什么?有什么值得担心的吗?
FWIW,以下是清理后在内核日志中发现的错误消息:
5/22/16 12:00 AM BTRFS warning (device nvme0n1p5): checksum/header error at logical 343949312 on dev /dev/nvme0n1p5, sector 671776: metadata leaf (level 0) in tree 321435615232
5/22/16 12:00 AM BTRFS warning (device nvme0n1p5): checksum/header error at logical 343949312 on dev /dev/nvme0n1p5, sector 671776: metadata leaf (level 0) in tree 321376649216
5/22/16 12:00 AM BTRFS warning (device nvme0n1p5): checksum/header …
Run Code Online (Sandbox Code Playgroud)