是否存在一个文件系统,在释放块或范围时将其清零?

是否存在一个文件系统,在释放块或范围时将其清零?

此功能会毫无理由地减慢本机操作系统上的文件删除速度,但对于压缩虚拟机映像特别有用。某些格式(如 VirtualBox').vdi不仅允许在创建映像文件后根据空间分配动态增长,而且还允许用引用替换仅由零组成的块,从而将映像缩小到最小尺寸,该尺寸仅略大于客户操作系统实际占用的空间。

由于客户操作系统不知道也不应该知道它在虚拟机中运行,因此它会留下未使用的非零字节填充的已释放块。这会导致在映像文件中分配大量块,但客户操作系统的文件系统不会分配这些块,这表示单个文件中包含了大量不必要的数据。

必须使用zerofreeext2/3/4 等工具或其他方式将映像文件完全填满一次,然后才能在主机上通过检测零块进行压缩。如果主机系统不支持带内重复数据删除,这将非常麻烦。而且虚拟机最终会在长达数小时内无法使用,因为清零需要对数据进行独占或只读访问。

可以通过减少仅包含 0 的块或范围(因为它们从未被触及或由于其他非系统性(和不可能)的原因而全部变为 0)来压缩 VM 映像文件,而无需在 VM 内部运行命令。我正在寻找最大化效果的方法。当然,可以通过重复数据删除来减少 VM 映像的存储需求,但这又是另一回事。

答案1

  1. 要执行这样的操作(收缩磁盘),您需要在磁盘末尾有空块/扇区,因此您应该对文件系统进行碎片整理。
  2. 另外,您不能指望 VM 软件知道所有可能的文件系统。因此,您还需要缩小文件系统(需要第 1 点)
  3. 最后你应该缩小你的分区以释放虚拟磁盘末尾的磁盘空间(需要第 1 点和第 2 点)

对我来说,这是减少虚拟机虚拟磁盘的方法

相关内容