我从这篇文章中学到了使用sdelete作为缩小 VDI 文件的步骤:
sdelete -c c:
Run Code Online (Sandbox Code Playgroud)
但是-c(帮助文本中描述的“清理可用空间”)是什么意思?它不是用零写入可用空间吗?还有呢-z(零可用空间)呢?sdelete -c 和 -z 有什么区别?
我尝试了之前文章中提到的步骤,但未能减小.vid文件大小。然后我关注了这个超级用户帖子,并将选项更改-c为-z,并成功。
因此,它似乎-z将零写入可用空间,并-c写入其他内容(可能是随机位)。
我知道互联网上有大量帖子说这行不通,为什么我几个月前真的花了几天时间寻找解决方案,但我昨天发现了一些关于如何为来宾机器“启用 TRIM 命令支持”的提示. 我试过了,“它看起来”像工作一样。我想知道的是问题在哪里,或者这是否真的正常工作。
来源:
https: //forums.virtualbox.org/viewtopic.php ? f =7& t =
51768 http://jaysonrowe.blogspot.com/2013/08/compacting-virtualbox-vdi.html
我附加磁盘文件的确切命令:
VBoxManage storageattach "GuestOsMachineName" --storagectl "SATA" --port 1 --device 0 --nonrotational on --discard on --medium "C:\path\to\file.vdi" --type hdd
它在机器的 *.vbox 文件中生成了这个条目:
<AttachedDevice nonrotational="true" discard="true" type="HardDisk" port="1" device="0">
<Image uuid="{3836a042-a83e-4000-9a59-e95ad65162ce}"/>
</AttachedDevice>
Run Code Online (Sandbox Code Playgroud)
为了确保我不会丢失任何数据,该驱动器是连接到机器的第二个驱动器。我做了一些简单的测试,比如将一些文件复制到驱动器,离开它,重新启动机器,关闭机器,重新启动后检查它是否在那里,查看主机操作系统中的磁盘文件使用情况。结果是:
现在我的问题是:
- --discard 选项究竟有什么作用?VirtualBox 手册(http://www.virtualbox.org/manual/ch08.html#vboxmanage-storageattach)中没有描述
它 - 它真的将 TRIM 传递给主机操作系统还是只是看起来像?
我一直主要为 Oracle virtualbox 使用固定大小的磁盘映像,但我正在考虑切换到动态磁盘映像,因为我听说除了扩展时动态映像的性能与固定大小的映像相似。
我经常做的一个操作是在使用 zip 程序备份之前对固定大小的磁盘映像进行零填充(以减小 zip 存档的大小)。我的问题是,当我对动态磁盘进行零填充时,磁盘大小会增加到其最大声明值吗?(对于我的具体情况,我sdelete -z在 Windows 分区上使用。)
另一个问题是,有没有一种方法可以在不增加磁盘大小的情况下对分区进行零填充?
谢谢。
- 编辑 -
为了澄清,我问的原因是我想将压缩的虚拟机图像的大小保持在最小。对固定大小的图像进行零填充可以完成这项工作,因为零填充部分对压缩图像几乎没有任何贡献。但是,如果我切换到动态磁盘,零填充似乎违背了使用动态大小图像的目的。
我的问题的第二部分实际上是问是否有比零填充更好的替代方案,可以在不扩大磁盘大小的情况下删除未使用的扇区。