在我们开始之前,是的,我知道这个设置不是最佳的,但我们正在制定一个从头开始设置一切的计划。我从一位不再在这里工作的兼职学生那里继承了这一点。这是一个关于潜在解决方案的问题。
不过,我们有一个相当紧急的故障需要在重建 NAS 之前修复。
设置:2 台服务器,1 台 Windows Server 2012r2(称为 Vmhost)和 1 台 FreeBSD(称为 Nas),Raidz2 中有 8 块 300GB 磁盘。nas 使用 iscsi 将 2 个 lun 暴露给 vmhost。
Vmhost 正在运行存储在这些 iscsi 磁盘上的几个虚拟机 (duh)。
问题:有 1 台 VM 在 hyper-v 中具有 2 年前的快照(或检查点)(不要问为什么),这导致快照文件与实际磁盘文件(vhdx 磁盘)一样大。
我们的 nas 上的空间不足,这导致我们的虚拟机运行缓慢或无响应。
有一件事我不明白(但可能很容易解释),那就是 Windows 报告 iscsi 磁盘上有近 4TB 的数据,而我安装的 HDD 不超过 300*6(+2 奇偶校验)GB。这只是 ZFS 的良好压缩吗?
建议的解决方案:将虚拟机的磁盘移动到其他磁盘并更正虚拟机配置中的映射,然后只需在 hyper-v 中按“删除检查点”并让 hyper-v 将快照合并到磁盘,然后将其移回 iscsi 磁盘。
问题是:如果 vhdx 磁盘是 1TB,而快照文件是 1TB,那么 3TB 的磁盘是否足以用作合并磁盘?它实际上会解锁 1TB 吗?(vhdx 的大小是固定的)还是不会做太多事情(因为它显然没有报告正确的大小)?
更大的问题:由于大小实际上没有任何意义,我可以相信哪些数字?如果按数字计算,我在 1800gb 的空间上总共有超过 4TB 的数据。zfs 是否如此智能,以至于可以看到快照中的某些数据可能与磁盘上的数据相同,并且不使用额外的空间?
答案1
总体而言,ZFS 可以轻松实现虚拟机磁盘的 1.2:1 压缩。它也很智能,不会在磁盘上保存任何零块。数据库压缩效果更好。总体而言,如果某个压缩性良好的 4Tb 虚拟磁盘能够装入具有 1.8T 物理空间的阵列,我不会感到惊讶。
如果您使用 ZFS 制作快照,它将是 CoW 快照。一开始,ZFS 会知道数据是相同的,并且只将相同的数据存储在磁盘上一次。当某个副本写入一个块时,该块将被复制并存储在其他地方(即写时复制,CoW),然后其中一个副本会被更改。从现在开始,即使您将副本恢复为具有相同的数据,它们通常也不会合并。
您可以合并任何碰巧相同的块,即使您不是从快照开始。您可以告诉它检查数据区域是否有一些重复的块,并且您猜对了,只存储它们一次。此功能称为重复数据删除,但我没有看到您正在使用它,因为您在 zpool 列表中有 DEDUP 1.00x。另外,请注意,此功能会消耗大量内存。
我会首先启动可疑的 Windows VM,然后安装一些磁盘备份软件,该软件通过逐扇区复制进行备份,并从该 VM 内部对虚拟磁盘进行完整备份(即备份 Windows 看到的内容)。或者/和备份虚拟磁盘映像。这样至少可以避免丢失您肯定可以访问的数据。然后按照您描述的方式操作。
还有一点需要说明。我在你的截图上看到了一个叫做“虚拟备份”的东西。不要这样备份。不要依赖相同的逻辑结构。如果你的堆栈中出现了一些罕见的错误(虚拟磁盘中的 NTFS 覆盖 ZFS 池上的基础磁盘上的 NTFS)破坏了磁盘结构,你将丢失备份以及它必须保护的数据,并且不可能从这种双重结构中进行数据取证恢复。通常最好将备份存储到最简单的结构中,该结构独立于主存储,即单独的磁盘,只有没有高级卷管理的裸分区表,最简单的文件系统。无论如何,这更容易访问和恢复。