Virtualbox虚拟磁盘空间压缩方法讲解
VirtualBox虚拟磁盘增加的原因
如果使用VirtualBox 动态虚拟磁盘,那么一定会发现经过一段时间的使用之后。虚拟磁盘文件的大小远远超过虚拟机内显示的已用空间的大小。这种情况发生的原因就是当虚拟机内操作系统在需要更多空间写入文件时,Virtualbox 会通过增大虚拟磁盘文件的大小来给虚拟机提供空间。而当虚拟机内释放空间时,Virtualbox不会将已经释放的空间返还给宿主操作系统。这样就造成了虚拟磁盘大小不断上涨,直到到达动态虚拟磁盘大小上限时停止增长。
压缩步骤
于是 Virtualbox 提供了一种可以将虚拟磁盘中置零的空间释放出来的功能。这样只要把虚拟机中所有未使用的空间置零就可以通过这个功能将空间释放出来。
1.将未使用空间置零
如果虚拟机中运行的是Linux
#dd if=/dev/zero of=fullfill
#rm fullfill
如果虚拟机中运行的是Windows
SDelete 工具写”零”,下载地址 http://technet.microsoft.com/en-us/sysinternals/bb897443.aspx,在命令行下执行 ”sdelete -c”… 关机…
可以下载Sysinternals Suite
https://technet.microsoft.com/en-us/sysinternals/bb842062/
然后运行
sdelete ?z
2.关闭虚拟机
3.使用VBoxManage压缩虚拟磁盘
$VBoxManage modifyhd /path/to/your.vdi --compact
/path/to/your.vdi 为虚拟磁盘的路径
然后等待它慢慢压缩完成即可,消耗时间与虚拟磁盘的大小相关。
如何减小VirtualBox虚拟硬盘文件的大小
虚拟机使用久了就会发现虚拟硬盘越来越大,但是进入虚拟机里的系统用命令看了下,实际占用的空间远没有虚拟硬盘大小那么大,这个让人很不爽,而且在分享虚拟机镜像的时候也很不方便。VirtualBox似乎没有提供图形界面的方式可以让我们来压缩虚拟硬盘大小,但是可以通过命令行来实现。经过实际测试,我的一个30多G的虚拟硬盘可以压缩到13G大小,可见效果还是非常显著的,这个可以压缩的空间取决于你虚拟机内真实的空间占用大小。
VirtualBox同时支持自己的虚拟硬盘格式VDI和Vmware的VMDK格式,两种格式的压缩略有不同。
1. 碎片整理
第一步要做的是碎片整理,打开虚拟机,执行下面的命令:
Linux系统:
sudo dd if=/dev/zero of=/EMPTY bs=1M
sudo rm -f /EMPTY
Windows系统需要下载Sysinternals Suite并执行:
sdelete ?z
2. 压缩磁盘
关闭虚拟机,现在可以开始压缩虚拟硬盘了
如果你的虚拟硬盘是VirtualBox自己的VDI格式,找到你的虚拟硬盘文件,执行命令:
VBoxManage modifyhd mydisk.vdi --compact
如果你的虚拟硬盘是Vmware的VMDK格式,那就要麻烦点,因为VirtualBox不支持直接压缩VMDK格式,但是可以变通下:先转换成VDI并压缩,再转回VMDK。执行命令:
VBoxManage clonehd "source.vmdk" "cloned.vdi" --format vdi
VBoxManage modifyhd cloned.vdi --compact
VBoxManage clonehd "cloned.vdi" "compressed.vmdk" --format vmdk
事实上,执行命令的过程中可以发现:在从VMDK转换到VDI的过程中似乎已经做了压缩,文件大小已经减少了很多,第二条命令反而没见到文件大小有什么变化,所以这里第二条命令应该可以省略了。
增大VirtualBox虚拟硬盘容量
VirtualBox在创建虚拟磁盘时可以选择动态扩展和固定大小两种方式,然后设定磁盘空间大小。
动态扩展类型: 最初只需占用非常小的物理硬盘空间。然后不断增加(最大到当前指定的大小),具体大小根据虚拟电脑的实际需求动态分配。
固定大小类型: 一旦建立就需分配指定大小的物理磁盘空间给该虚拟硬盘使用,性能上有一定优势。建立这种类型的虚拟硬盘需花费较多的时间.
当动态扩展方式达到上限时,怎么办呢?目前VirtualBox没有提供修改动态扩展磁盘大小的方式。 可以按照以下方法, 在以下操作之前请先备份你的VirtualBox虚拟机中的数据。
在VitrualBox中扩大虚拟磁盘
要增加VirtualBox虚拟磁盘的空间,你必需使用用VBoxManage命令行的形式。
首先,完全关闭需要操作的虚拟机以Window7为例。
其次,从开始——程序——附件 中打开命令提示符窗口,并切换到Virtualbox程序所在位置,可运行命令:
cd “C:\Program Files\Oracle\VirtualBox”
重新调整大小磁盘大小为80G:
VBoxManage modifyhd “C:\Users\Chris\VirtualBox VMs\Windows 7\Windows 7.vdi” ?-resize 81920
注意在resize之前要使用双破折号!操作时把上面的磁盘路径替换成自己的VirtualBox磁盘路径,大小是以MB为单位的。
要说明的是以上过程只是VirtaulBox磁盘的空间大小,并没有扩大对应分区的大小,下面就教你怎么扩大分区。
扩大虚拟机分区
现在你有更大的虚拟磁盘了,然而对应的操作系统里分区的大小还是原来那样,并没有增加。因此不能访问任何刚刚增加的空间。以下扩大分区大小的方法同样适用于VMware虚拟机。
扩展客户机操作系统的分区就像扩展一个物理计算机的真实分区。必须在虚拟机里的系统未运行状态下进行,正像你不能在系统还在运行时来扩大C盘的大小。
这时, 有2个选择:
1. 如果你想增加一个新的分区,而不需要增大C盘的空间. 则可以直接Format该55G未分配的空间. 生成一个新的分区.
2. 如果你想增大C盘空间, 则需要使用GParted工具, 采取下面的方法:
我们可以使用GParted调整虚拟机的分区。GParted简单的可以说是一个”PE系统”,运行在Linux环境下。什么是"PE系统", refer to: http://pchome.baike.com/article-100264.html
首先,下载 gparted。下载地址为: http://gparted.sourceforge.net/download.php. 我下载的版本是: gparted-live-0.14.1-6-i486.iso.
进入windows7虚拟机设置选项,在IDE控制器下的CD/DVD驱动器选项里选择刚刚下载的GParted ISO文件。
然后启动虚拟机,系统将从该ISO镜像启动,GParted会提示若干问题,可以一路”Enter”。
在GParted启动完成后,右键你想要增加的分区。
指定新一个新的大小,可以拖动滚动条来调整分区容量到合适的大小甚至到最大值。单击“resize/Move”确认。
最后,单击“Apply”按钮。
完成调整后,关闭虚拟机并移除GParted ISO文件,再启动虚拟机,在虚拟机里windows会检查磁盘文件系统,中间不能中断这个检查过程。