我有一个硬盘。我想使用一个可以减少存储空间的文件系统,但作为权衡,请为我提供校验和或任何其他方法来帮助保持数据完整性。
据我了解,像 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 snapshot
和zfs 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
删除意外添加的单个驱动器。