如何减少你的虚拟机的大小(附代码)

139 阅读3分钟

作为主机操作系统,我使用Windows 8(刚刚升级到8.1),为什么?经过一些可怕的搜索和配置工具,我设法安装了用于编写和部署代码的基本工具。Vim、Git、PuTTy和一个像Console2[0]这样的体面的控制台替代品。

当然,这些还不够,因为我80%的编码都依赖于*nix,我不会在其他任何东西上运行它;实际上,我仍然在考虑放弃Windows而使用ArchLinux[1]这样的东西,我摆弄着它,享受着Ubuntu桌面中不存在的所有低级别的东西

不用说,我使用了很多虚拟机。我目前有三个镜像,我每天都在使用。Ubuntu桌面,Ubuntu服务器和一个旧的Windows XP*(好吧,我不是每天使用它,而是每月使用一次)*。在许多项目中只使用几个虚拟机的问题是,它涉及到大量的硬盘垃圾(即git,删除和创建大量文件)。

我没有意识到的是,我的虚拟机一天比一天大,而它们的内部硬盘空间使用量却基本保持不变,因为我删除了旧文件并清理了它们。作为参考,这些是最初的尺寸:

  • Ubuntu桌面:19.7 GB
  • Ubuntu服务器: 8.0 GB
  • Windows XP:7.9 GB

尽管我删除了虚拟机中的文件,但在用所有的写入和删除来捣毁固态硬盘时,我却在扩大VHDs。原因是:实际的块并不是零,所以运行VM compact ,不会产生任何结果。

使用--compact选项,可以用来压缩磁盘图像,即删除只包含零的块。这将再次缩小动态分配的镜像;它将减少镜像的物理大小而不影响虚拟磁盘的逻辑大小。压实对基本镜像和作为快照的一部分创建的差异镜像都有效。

修复方法很清楚:人们需要不时地使自由空间失效。在做了一些快速的研究之后,我发现在每个平台上都有简单的方法来做。

在Linux上

第一个版本是使用一个类似安全删除的工具,但运行速度非常快:

sudo apt-get install secure-delete
sfill -f -z -l -l -I -v /

哪里:

-f  fast (and insecure mode): no /dev/urandom, no synchronize mode.
-z  last wipe writes zeros, not random data.
-l  lessens the security (use twice for total insecure mode)
-I  just wipe space, not inodes
-v  is verbose mode.

或者一个更简单的方法:

sudo dd if=/dev/zero of=/bigemptyfile bs=4096k
sudo rm -rf /bigemptyfile

这将用一个空文件来填充整个空空间,在最后被删除。我没有过多的测试,它可能会产生问题,但比第一个版本快。

在Windows上

在Windows Xp上,你只需要下载SysinternalsSuite [2],然后在命令提示符下运行sdelete –z

好的,一旦所有这些都结束了:关闭虚拟机并在VHD上运行 compact。使用VirtualBox,只需从控制台运行VBoxManage modifyhd thedisk.vdi --compact ,使用VMware,只需点击一下,直到你找到它。

好了,该看结果了

  • Ubuntu桌面:11.0 GB~ -45%
  • Ubuntu服务器: 4.3 GB~ -47%
  • Windows XP:6.6 GB~ -16%

这就是我用作系统驱动器的主要固态硬盘128G中高达13.7GB的容量,不错,一点也不差

感谢