如何将数据完整性和性能的虚拟机存储在硬盘上?

首先,我知道这个话题很容易变得主观,但是我试图避免这个问题,因为在这个糟糕的答案中至less应该有一个好的答案,而且很难find答案。

乍一看,我的问题似乎很简单, 如何在Harddisk上存储虚拟机磁盘,同时确保数据完整性不受影响,性能不可怕。

但实际上比看起来更难;

  • ZFS和BTRFS是没有select的:Copy On Write写文件系统在处理大文件方面是非常糟糕的,尤其是如果它们本身可能包含另一个Copy On Write文件系统! 您可以closuresBTRFS上的COW,但是这也会closures校验和(压缩,重复数据删除等)。
  • EXT2 / 3/4,XFS,ReiserFS,NTFS等都不做像BTRFS / ZFS那样的全面的数据校验,而不是和选项。

那么,那么这个囚犯呢? 除了带有其他问题(如写入孔(RAID5))的简单化RAID设置以及不清楚两个副本中哪一个是正确的错误文件的处理方式之外,您无法获得完整的数据完整性。 在高级系统中使用校验和避免的问题,并在文件返回到操作系统或用户之前validation文件的完整性。

我能想到的唯一select是在虚拟机内而不是在主机上使用BTRFS / ZFS,并且在每台机器上适当地调度快照和备份,尽pipe这比在主机上执行快得多。

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

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

  • 至less在RHEL / CentOS主机上,作为VM备份文件系统, ZFS具有比BTRFS更好的性能 。 确实,在纯机械硬盘上,更传统的文件系统仍然比较慢,即使是相对较小的SSD,SLOG设备也会显着提高性能。 换句话说,ZFS上的虚拟机是完全合理的用例;

  • 即使使用传统文件系统而没有将数据校验和作为XFS和EXT4,在健康的系统上数据损坏的可能性也非常小。 BER / UBER / URE的评级通常是在没有定期考虑的情况下引用的,

  • 具有powerloss保护caching的硬件RAID5 / 6卡不会出现写入漏洞。 而且,RAID6也可以用作数据校验和的一种forms(注意:它取决于特定的控制器/实现)。 所以一个适当大小的写回caching的RAID6arrays是一个合理的解决scheme;

  • 最后,如所build议的那样,您可以在VM中使用ZFS。 对于这样的设置,我会将原始LVM卷导出到guest虚拟机,将数据容器格式化为ZFS。 但是,我将自己拍摄LVM卷的快照,而不是从单个guest虚拟机中获取快照。 为了获得更好的性能,我将在主机上使用RAID10(作为LVM的基础)