![btrfs/ZFS 是否需要 RAID1 或类似技术来防止位腐烂?](https://linux22.com/image/1412209/btrfs%2FZFS%20%E6%98%AF%E5%90%A6%E9%9C%80%E8%A6%81%20RAID1%20%E6%88%96%E7%B1%BB%E4%BC%BC%E6%8A%80%E6%9C%AF%E6%9D%A5%E9%98%B2%E6%AD%A2%E4%BD%8D%E8%85%90%E7%83%82%EF%BC%9F.png)
我正在运行一个使用 Linux 软件 raid 的文件服务器,设置为 raid6。我选择了 btrfs 作为文件系统。但是,我没有使用 btrfs 自己的 raid6 实现,因为它还不太稳定。所以基本上,我在块级别使用 raid。此外,我正在将真正重要的数据备份到另一个位置。最后,我将 UPS 连接到服务器以防止断电和电涌。
我的问题:
我知道 raid6 可以很好地防止硬盘故障,但其上的 btrfs 真的能检测出位衰减并进行纠正吗?如果能,没有文件系统 raid1 又如何实现呢?
md 是否会不时检查 raid6 块以查找和纠正损坏?我需要安排它吗?
如果我做错了,如果我想要更好地防止数据故障和位衰减,你建议我做什么?
答案1
1:在您的配置中,btrfs 应该检测到数据损坏但不会纠正它,因为就 btrfs 而言没有数据冗余。
2:RAID6 无法检测或可靠地防止位损坏。它只能防止磁盘故障,在某些情况下可能会检测到未使用的坏块。
3:如果 btrfs RAID6 尚未准备好,您可以考虑 btrfs 镜像或 ZFS RAIDZ2。
答案2
BTRFS RAID-6(尽管仍处于试验阶段)实际上现在相当稳定。当前版本甚至可以修复许多典型错误,包括更换故障/丢失的驱动器。
与 ZFS 一样,BTRFS 也会进行校验和,这意味着您可以随时(并且应该定期)运行清理来验证数据。如果驱动器上的数据(数据或元数据)受损,BTRFS 将能够检测到错误,并且如果它具有冗余(使用 BTRFS RAID-6),它可以修复受影响的文件。此后,它将知道修复的文件是否正确,因为它具有校验和。
经典(硬件)RAID 系统(包括 MD(软件)RAID)不是有校验和。这些系统仅依赖奇偶校验,因此多个驱动器上的错误组合很可能会导致损坏。由于没有校验和,RAID 系统(如 md)将无法验证在清除后所有错误是否都已消失(即文件是否正确)。有一些示例(还有一些视频)演示了经典 RAID 系统上的数据损坏。
一旦检测到第一个奇偶校验错误,就立即收到通知并尽快解决问题(清除)非常重要。此外,由于奇偶校验是 RAID 系统了解数据是否正常的唯一(不太可靠)方式,因此应使用电池备份以防止断电时所有这些宝贵的奇偶校验数据丢失到写入孔。
现在,如果您在愚蠢的 RAID-6 系统上使用像 BTRFS 这样的高级文件系统,该文件系统作为单个文件系统(没有冗余)进行校验和,则由该 RAID 系统来检测和修复错误,因为一旦太多错误损坏了 RAID 系统,BTRFS 将无法修复它们。它将检测错误,并通过告诉您哪些文件(路径)已损坏来帮助您决定从备份中恢复什么。但否则,到那时就太晚了。这就是为什么这种设置可能不是一个好主意。
如果您按照 BTRFS 的预期使用方式使用 BTRFS,即通过创建可直接访问驱动器的 BTRFS RAID-6 文件系统(不带 MD RAID),它将能够可靠地修复错误,并且由于具有校验和,它将知道错误是否真的消失了。它会告诉您这些错误发生在哪些驱动器上,因此您知道哪个驱动器坏了(您可以使用 btrfs 命令替换它)。关键是,无论驱动器是否坏了/丢失并且您必须更换它,或者驱动器是否部分损坏(因为它即将坏掉),BTRFS 都会可靠地检测到错误。当然,定期清理与其他 RAID 系统一样重要,以检测无声损坏(提示:计划任务)。
因此,BTRFS RAID-6 在某些方面仍被视为实验性的,但通过校验和,它已经提供了一种可靠的方法来检测(然后修复)错误。它是实验性的,因此在某些情况下可能会崩溃,然后您应该尝试较新的内核版本,这是解决许多 BTRFS 问题的方法。确保保持内核的更新(撰写本文时为 4.3,不要将任何比 RAID-6 更旧的版本)。但典型的 RAID 用例(仅存储大量数据并在某个时候更换驱动器 - 多驱动器故障可能会有所不同)已经适用于 BTRFS。
您的问题已标记为文件系统。ZFS 不包含在 Linux 内核中,因此必须手动安装 -ZFSonLinux 端口运行良好。在安装了新内核版本后,可能需要重新安装它或进行其他修复,但现在这并不重要。当然,在 ZFS 中有些事情的工作方式不同。此外,与 BTRFS 文件系统不同,ZFS RAIDZ2(如 RAID-6)zpool 无法调整大小(有一些“技巧”,但底线是 raidz2 vdev 不能通过添加驱动器来真正增长),因此现有系统无法轻松扩展更多驱动器。但是,就稳定性而言,ZFS 可能是所有选择中最好的。有了校验和,它提供了可靠的数据保护,并且它足够成熟,可以处理几乎所有事情(多个驱动器故障、不稳定的控制器,ZFS 几乎可以承受所有事情,只要您有足够好的驱动器,它就可以保护/修复您的数据)。鉴于(像 BTRFS 一样)ZFS 需要单独访问您的驱动器(才能修复错误),除非您有充分的理由,否则您绝对不应该在 MD RAID 卷上使用它。
答案3
在您的设置中,它不会。
我建议使用 ZFS 内置的 RAID-z2,这样就可以执行位腐烂恢复。启用 lz4 压缩也将提供更好的性能,并节省空间。