带校验和的文件系统?

带校验和的文件系统?

我有一个硬盘。我想使用一个可以减少存储空间的文件系统,但作为权衡,请为我提供校验和或任何其他方法来帮助保持数据完整性。

据我了解,像 ext4 或 xfs 这样的东西不会这样做,因此您可能会遭受静默数据损坏,又名 bitrot。

zfs 看起来是一个很好的选择,但我读到的所有内容都表明您需要多个磁盘才能使用它。为什么是这样?我意识到只有一个磁盘无法容忍单个磁盘故障,但这就是多个备份方案的用途。什么备份惯于帮助是类似 bitrot 的东西。

那么我可以在单个硬盘上使用 zfs 来实现防止 bitrot 的单一目的吗?如果没有,你有什么推荐?

答案1

您可以使用 ZFS 或 btrfs。

它们都是写时复制文件系统,但有错误检测(如果有足够的冗余来修复原始数据,例如镜像驱动器或 RAID-Z)、透明压缩、快照等,也可以进行更正。

ZFS 允许您在数据集上设置copies属性以保留文件的多个副本 - 例如,在 ZFS 上,您可以运行zfs set copies=2 pool/dataset告诉 ZFS 保留该特定数据集上所有内容的两个副本 - 请参阅man zfsprops并搜索copies=。我认为btrfs也有类似的功能,但是我已经很久没有使用btrfs了,在文档中找不到它。

这些额外的副本确实为纠错提供了冗余(在位腐烂的情况下),但不能保护您免受磁盘故障的影响。为此,您至少需要一个镜像 vdev(即 RAID-1),或者进行定期备份(但无论如何您都应该这样做 - RAID 或类似 RAID 的技术,如 ZFS 或 btrfs)不是备份的替代品)。

备份可以像使用zfs snapshotzfs send/zfs receive将初始备份和增量备份发送到通过 USB 插入的单驱动器 zfs 池一样简单。或者通过网络连接到另一台计算机上的池。即使使用zfs send将备份存储在非 ZFS 文件系统上的文件中也比没有好。

如果您的计算机具有支持第二个驱动器的物理空间和硬件,则应添加一个。您可以在首次创建池时执行此操作,也可以使用 随时将镜像驱动器添加到任何单驱动器或镜像 vdev zpool attach pool device new-device

注意:使用 很重要zpool attach,而不是zpool add为此。 attach将镜像添加到 vdev 中的现有驱动器,同时add将另一个 vdev 添加到现有池。将单驱动器 vdev 添加到现有池将有效地与池中的其他 vdev 形成 RAID-0,从而使所有数据面临风险。这是一个相当常见的错误,并且(如果池包含任何 RAID-Z vdev),唯一的修复方法是备份整个池,销毁它,从头开始重新创建它,然后恢复。如果池只有镜像或单驱动器 vdev(即没有 RAID-Z vdev),则可以用于zpool remove删除意外添加的单个驱动器。

答案2

我想在 @cas 的回答中添加一点,即校验和也可以在块级别上完成DM-完整性然后你可以使用任何文件系统。与 btrfs 中的校验和类似,dm-integrity 仅提供错误检测,因此您需要 RAID 才能真正修复错误。您可以通过使用以下命令将完整性设备放置在 RAID 1 的每个分支下来手动执行此操作完整性设置米达德姆但这可能有点复杂,较新版本的 LVM 支持创建逻辑卷磁盘阵列只需使用即可具有完整性

lvcreate --type raidN --raidintegrity y

正如我所说,您可以将任何文件系统放置在 RAID 逻辑卷之上,LVM 将负责检测错误并在读取时更正它们。

相关内容