您如何在具有数据完整性和性能的 HDD 上存储 VM?

Ale*_*lex 2 performance storage filesystems virtual-machines data-integrity

首先,我知道这个话题很容易变得主观,但我试图避免这种情况,因为在一堆糟糕的答案中至少应该有一个很好的答案,而且很难找到。

乍一看,我的问题似乎很简单;您如何在硬盘上存储虚拟机磁盘,同时确保数据完整性不会受到损害,并且性能不会太差。

但它实际上比看起来更难;

  • ZFS 和 BTRFS 没有选择:写时复制文件系统在处理大文件方面是出了名的差,特别是如果它们本身可能包含另一个写时复制文件系统!您CAN关闭COW上BTRFS,但是这也将关闭执行校验和(和压缩,重复数据删除等)。
  • EXT2/3/4、XFS、ReiserFS、NTFS 等都不会像 BTRFS/ZFS 那样进行完整的数据校验和。

那么它是将死吗?除了具有其他问题的简单 RAID 设置之外,您无法获得完整的数据完整性,例如写入漏洞 (RAID5) 以及通常对损坏文件的处理非常糟糕,其中不清楚两个副本中哪一个是正确的。在将文件返回给操作系统或用户之前,对文件进行校验和验证并验证其完整性的更高级别系统可以避免这些问题。

我能想到的唯一选择是在 VM 内部而不是在主机上使用 BTRFS/ZFS,并在每台机器上适当地安排快照和备份,尽管这比在主机上执行要麻烦得多。

有谁知道任何其他方式来实现我的目标?

sho*_*hok 5

让我们从一个简单的证据开始:更高的数据弹性和完整性功能通常会带来性能损失。从这里,我们可以做一些更多的考虑:

  • ZFS在用作 VM 支持文件系统时比 BTRFS 具有更好的性能,至少在 RHEL/CentOS 主机上是这样。虽然在纯机械 HDD 上它仍然比更传统的文件系统慢,但即使使用相对较小的 SSD 作为 SLOG 设备也会显着提高其性能。换句话说,ZFS 上的 VM 是一个完全合理的用例;

  • 即使使用没有完整数据校验和的传统文件系统作为 XFS 和 EXT4,健康系统上数据损坏的几率也非常小。BER/UBER/URE 评级经常被断章取义地引用,也没有考虑到常规的擦洗;

  • 硬件RAID5 / 6卡与powerloss保护缓存免疫写的孔。此外,RAID6 还可以用作数据校验和的一种形式(注意:这取决于特定的控制器/实现)。因此,具有适当大小的回写缓存的 RAID6 阵列是一个合理的解决方案;

  • 最后,建议你可以使用ZFS的VM。对于这样的设置,我会将原始 LVM 卷导出到来宾,将数据容器格式化为 ZFS。但是,我会拍摄 LVM 卷本身的快照,而不是从单个来宾 VM 内部拍摄。为了获得更好的性能,我会在主机上使用 RAID10(作为 LVM 的基础)