虚拟机中的 ZFS

Las*_*ann 4 virtualization zfs

我应该在虚拟机中使用 ZFS 吗?根据现有信息(特别是这个线程,我将在下面引用)这不是一个好主意,除非提供了某些措施(例如使用 VT-d)。据称的基本问题是管理程序可能会报告要写入的块,而实际上它尚未写入。据称,与其他文件系统相比,ZFS 对这种差异特别敏感:

为什么它如此糟糕的细节与它的 fsck-less 设计有关。

在那次讨论中还承认:

据我所知,“在数据之前写入的指针”变成“已写入但没有数据的指针”的唯一情况仍然是操作系统或管理程序崩溃的事件。

但是,如果发生这种崩溃,最坏的后果是什么?

  • 崩溃时写入的文件损坏或丢失?
  • 数据集中的任何其他文件损坏或丢失?
  • 数据集中的任何文件损坏或丢失在崩溃时没有被修改,例如,在崩溃前很长时间拍摄的快照?

是否存在任何无法通过擦洗检测到的静默损坏?

我尝试通过使用 VirtualBox 并在将数据写入 VM 内的 ZFS 时选择关闭/关闭电源来模拟崩溃。我这样做了大约 20 次,但无法检测到任何问题。也许这种测试方法不太合适。有没有更好的方法来试验这个?

sho*_*hok 7

基本上,任何现代管理程序(VMWare、Xen、KVM、HyperV,甚至 VirtualBox)都支持屏障传递:当 VM 显式地将某些内容刷新到磁盘(通过发出屏障/FUA)时,管理程序会将屏障向下传递给主机,迫使来宾操作系统执行的相同刷新。换句话说,对于重要/持久写入(作为文件系统本身用于更新其元数据的写入),预计不会发生损坏。

虽然大多数管理程序可以配置为忽略刷新,但这可能会危及任何文件系统 - XFS、EXT4 等将面临与 ZFS 一样严重的损坏。

回到主要问题:在来宾操作系统中使用 ZFS 是完全安全的,而且我对类似设置有第一手经验。这将使来宾能够使用高级功能,如压缩、快照和发送/接收。但是,这可能会导致客户机性能有所降低(ZFS 并非旨在成为获得基准测试的文件系统)。此外,由于许多 SAN 在磁盘映像级别实现了非常相同的功能,您应该评估双 CoW 对性能的影响是否值得在来宾级别获得额外的灵活性。

由于上述原因,我通常在磁盘映像/管理程序级别使用 ZFS,而在虚拟机本身内部使用 XFS 或 EXT4。但是,在我无法了解底层 SAN/存储(及其快照/压缩/复制策略)的情况下,我有时会在来宾级别使用 ZFS。

在这些情况下,添加的功能不仅仅是补偿性能影响,例如与普通的 XFS 设置相比。而且我完全没有稳定性/耐用性问题。

旁注: VT-d 仅在您计划将原始磁盘(或其他硬件设备)传递给来宾本身时才有用。如果使用基于文件或卷的虚拟磁盘,则不是在使用 VT-d。