作为灾难恢复测试的一部分,我们备份了运行 SQL 服务器的虚拟机。备份文件大于 360GB,需要很长时间才能通过 USB 2.0 进行复制(不要问我为什么我们的灾难恢复公司没有 USB 3.0)。但是,当我们恢复虚拟机时,我在其中运行了 WinDirStat 来确定是什么占用了这么多空间,但 WinDirStat 报告的总使用空间只有 100 GB。
额外的 260 GB 来自哪里?我们如何在未来的 VM 备份中减少这部分空间?
答案1
客户端的虚拟硬盘可能有很多已删除的块,但备份会存储它们,因为它们是文件的一部分。
虚拟磁盘与真实磁盘类似 - 操作系统通过将文件和块标记为已删除来删除内容;但不会覆盖内容。从主机系统来看,虚拟硬盘只是一个大文件,主机当然无法决定哪些字节是这种旧残留,哪些是真正需要的,因此所有字节都将被视为文件的一部分,并将进行备份。
有多种方法可以“清理”虚拟硬盘并减少其显性大小。通常,您可以这样做:
在客户端内部进行碎片整理。这应该会将内容压缩到虚拟硬盘的大部分连续块中。
在客户端中用零覆盖空白区域。例如,在 Windows 下,有 MicroSoft 工具 SDELETE 可以执行此操作。对于其他操作系统,也有类似的工具。
在主机系统上,将虚拟硬盘克隆到新文件中。这将删除只有零的块,并导致文件大小非常接近硬盘的实际内容。
在主机上,将原始虚拟硬盘与克隆硬盘进行交换。
请注意,虚拟机的使用量将再次缓慢增加,因为每个写入/删除序列都会产生填充有“数据”的块,因此您需要在使用几个月后重复这些步骤。