自愈文件系统对一般用途有多大好处?

Pro*_*700 34 raid filesystems mdadm software-raid data-integrity

我最近研究了用于数据冗余和可用性的高级文件系统(Btrfs、ZFS),并对它们提供的附加功能感兴趣,尤其是它们针对数据损坏的“自我修复”功能。

但是,我认为我需要退后一步,尝试了解与传统的 mdadm-Raid1 + 相比,对于一般家庭/SMB 使用而言,这种好处是否超过了它们的缺点(Btrfs 错误和未解决的问题以及 ZFS 可用性和性能影响) Ext4 解决方案。无论哪种方式都可以使用镜像备份。

假设我有几个文件服务器用于存档目的并且资源有限,但是有 ECC 内存和稳定的电源。

  1. 我什至遇到实际数据损坏导致文件不可读的可能性有多大?如何?
  2. Ext4 或系统文件管理器是否可以在复制/移动操作中检测到​​数据错误,至少让我意识到问题所在?
  3. 如果其中一个 madam-Raid1 驱动器因一个驱动器有坏扇区而保存不同的数据,会发生什么情况?我是否仍然能够检索正确的文件,或者阵列是否无法确定哪个文件是正确的并完全丢失它?

sho*_*hok 31

是的,功能性校验和文件系统是一件非常好的事情。然而,真正的动机并不是在神话中的“bitrot”中找到,虽然确实发生了,但非常罕见。相反,主要优点是这样的文件系统提供端到端的数据校验和,通过错误的磁盘行为积极保护您,例如与磁盘自己的私有 DRAM 缓存失败和/或由于电源导致的错误行为相关的错误写入和数据损坏问题。

我亲身经历过这个问题,当时 Linux RAID 1 阵列由于电源问题而损坏。一个磁盘的缓存开始损坏数据,而嵌入在磁盘扇区中的 ECC 本身没有捕获任何内容,仅仅是因为写入的数据已经损坏并且 ECC 是根据损坏的数据本身计算的。

多亏了它的校验和日志,它检测到一些奇怪的东西并暂停了文件系统,XFS 限制了损坏;但是,某些文件/目录已不可修复地损坏。由于这是一台没有立即停机压力的备用机器,我使用 ZFS 对其进行了重建。当问题再次出现时,在第一次清理期间,ZFS 通过从其他磁盘读取好的副本来更正受影响的块。结果:没有数据丢失和停机时间。这是使用校验和文件系统的两个很好的理由。

值得注意的是,数据校验和非常有价值,以至于提供它的设备映射器目标(通过模拟 T-10 DIF/DIX 规范),称为dm-integrity,正是为了将这种保护扩展到经典块设备(尤其是冗余块设备)而开发的作为 RAID1/5/6)。凭借Stratis 项目,它将被集成到一个综合管理 CLI/API 中。

但是,您必须将此类文件系统带来的任何潜在优势与其继承的劣势进行比较。ZFS 的主要问题是它没有主流化到标准内核中,但除此之外它非常快速和稳定。另一方面,BTRFS 虽然是主线,但有许多重要的问题和性能问题(对数据库或 VM 的常见建议是禁用 CoW,从而禁用校验和 - 坦率地说,这是不可接受的答案)。而不是使用 BTRFS,我会使用 XFS 并希望最好,或者使用 dm-integrity 保护的设备。

  • XFS 日志和元数据校验和在线执行:如果发现严重错误,则文件系统暂停。无论如何,XFS 行为可以(部分)通过在 `/sys/fs/xfs/<blockdev>/error/` 中找到的 sysfs 条目进行微调。有关更多信息,我建议您阅读 XFS 文档和/或在邮件列表中询问。 (2认同)

Mir*_*ici 11

  1. 我有一个希捷硬盘,每次运行 zfs 时都会开始校验和失败。几周后它失败了。ZFS 和 Btrfs 具有数据和元数据的校验和。ext4 只有元数据校验和。

  2. 只有 CRC 错误和元数据校验和错误。可能会发生数据损坏。

  3. 如果它有坏扇区,那不是问题。整个磁盘将“失败”,但您拥有另一个“正常”的磁盘。问题是当数据具有正确的 CRC,但数据已损坏时。由于磁盘较大,这可能会随机发生。

  • @Prototype700 元数据校验和的要点在于,与数据校验和不同,它们可以改装为非 CoW 文件系统,并且它们仍然可以防止最严重的损坏。虽然任何给定文件的内容不受保护,但文件系统结构受到保护,因此文件系统的其余部分将继续工作,并且损坏将仅限于直接受影响的文件。如果没有元数据校验和,元数据的损坏可能会导致核心文件系统结构(哪些块属于文件,哪些块是空闲的)的无声增长损坏,直到整个 FS 损坏到无法修复为止。 (3认同)

Jos*_*osh 8

6 年多来,我一直在 Linux 和 FreeBSD 下的服务器和家庭办公室 NAS 的生产中使用 ZFS。我发现它稳定、快速、可靠,而且我亲眼看到它检测并(当能够)纠正简单md设备或ext4文件系统无法做到的错误。

但是,我认为我需要退后一步,尝试了解这种好处是否超过了它们的缺点(Btrfs 错误和未解决的问题以及 ZFS 可用性和性能影响)

关于许可,ZFS 是开源的,它只是在 CDDL 许可下发布的,这与 linux 内核发布的 GPLv2 许可在法律上不兼容。详情请看这里。这并不意味着它处于“暂时陷入困境”的状态,也不意味着存在任何技术不兼容。这只是意味着主线 linux 内核源没有这些模块,必须从https://zfsonlinux.org 之类的地方检索它们。请注意,某些发行版(例如 debian)在其发行版中包含 ZFS 在Debian / Ubuntu 上安装 ZFS 通常可以使用单个apt命令完成。

至于性能,如果有足够的 RAM,ZFS 性能对我来说是从接近 ext4 到超过 ext4,这取决于内存、可用池空间和数据的可压缩性。在我看来,ZFS 的最大缺点是内存使用:如果生产服务器的 RAM 少于 16 GiB,则可能要避免使用 ZFS。这是一个过于简单的经验法则;网上有很多关于 ZFS 内存要求的信息。我个人在具有 32GB RAM 的家庭办公室 linux 系统上运行一个 10TB 池和一个 800GB 池以及一些备份池,并且性能非常好。该服务器运行 LXC 并运行多个服务。

ZFS 功能远远超出了数据校验和和自愈能力;它强大的快照比 LVM 快照要好得多,而且它的内联 lz4 压缩实际上可以通过减少磁盘写入来提高性能。我个人在 10TB 池上实现了 1.55 倍的节省(仅在磁盘上的 6.3GiB 空间中存储 9.76GiB 数据)

根据我的经验,ZPF 性能在池使用率达到 75% 或 80% 时迎合,所以只要您保持在该点以下,性能应该足以满足一般家庭/SMB 使用。

在我看到 ZFS 检测并纠正坏数据的情况下,根本原因尚不清楚,但可能是坏磁盘块。我也有 EEC 内存并使用 UPS,所以我不相信 RAM 中的数据已损坏。事实上,您需要 EEC RAM 才能从 ZFS 校验和中获益。但是,在过去的 6 年中,我看到了少数(约 10-15 个)块校验和失败的案例。ZFS 相对于 md RAID 的一大优势是 ZFS 知道哪些文件受到校验和错误的影响。因此,如果没有冗余的备份池出现校验和错误,ZFS 会告诉我受影响的确切文件,允许我替换这些文件。

尽管 ZFS 使用的许可证无法与 linux 内核相比,但安装模块非常容易(至少在 Debian 上),并且一旦熟悉了工具集,管理就很简单了。尽管很多人担心互联网上的 ZFS 会丢失数据,但自从迁移到 ZFS 以来,我从未丢失过任何数据,而且 ZFS 快照和数据校验和/冗余的结合使我个人多次免于数据丢失。这是一个明显的胜利,我个人永远不会回到md阵列。