我在Mac下使用Virtual Box安装Win7的虚拟机。因为之前装过Win7的32位版。现在因为机器内存升到8G,就可以划出4G来支持Win7虚拟机。所以就重新安装了Win7的64位版。在创建虚拟机的硬盘时,我选择了Virtual Box的默认容量20G。我看到Virtual Box告知的是这个硬盘容量是可以动态调整的,谁知道这其实是一个误导。这里所谓的动态调整并不能超过设置的值,即我设置的20G是存储分配的上限。所谓动态分配其实是一种节约磁盘空间的做法。意思是当我们在创建虚拟机的硬盘时,可以设置足够大。只要这个硬盘没有用完,这些空间是可以被主机所共享的。而Win7的64位版所占用的硬盘空间又远远超过了32位版。在安装了操作系统后,剩下的空间就不多了。在安装了SQL Server 2008后,再想完整安装Visual Studio 2010,空间就不够了。我之前认为硬盘容量可以动态调整,所以在Visual Studio提示空间容量不够时,我仍然选择“继续”,结果安装错误。

那么,该怎么解决这一问题呢?重新安装吗?那就实在太悲催了。虽然现在并没有安装什么软件,但安装操作系统和数据库就挺耗时的。于是,我试着调整Virtual Box的硬盘大小。可是在Virtual Box的管理工具中,并没有找到修改硬盘大小的选项。通过Google,我找到了通过命令行修改磁盘空间的办法,前提是Virtual Box的版本必须是4.0及以上。

这个命令:

VBoxManage modifyhd uuid –resize 40960

这里的40960就是你要调整的容量,即40G。命令中的uuid也可以用vid文件名代替。不过我的文件名不幸包含了空格。或许通过双引号或"/“可以支持空格的文件名,但我没有尝试,因为使用uuid是更好的做法。至于命令行的输入,在Mac下,直接在Terminal下输入即可。因为安装了Virtual Box时,会将VBoxManage添加到路径中,Terminal是可以识别该命令的。

要使用uuid,则需要获得当前虚拟机的uuid。在管理工具中无法获得,因此,我们应通过命令行获得:

VBoxManage list hdds

该命令会显示所有的虚拟硬盘。你可以通过Location来判断你要调整的硬盘。获得uuid,就可以通过modifyhd调整硬盘大小了。注意,在调整硬盘之前,一定要先关闭该虚拟机。

补记:当我通过modifyhd命令调整了磁盘空间后,通过管理工具查看vid文件,容量确实发生了变化,达到了预期的结果。于是我认为可以高枕无忧了。哪知道在Virtual Box下打开该虚拟机后,看到C盘的空间仍然是20G。这让我不禁郁闷不已。于是我想,可能在Virtual Box中还有什么设置。可是看了所有Virtual Box的管理菜单,都没有能够找到。我甚至在Storage中,移除对vid文件的引用,并重新加载,仍然没有变化。我又尝试着重新启动Virtual Box,甚至重新启动计算机,还是如此。究竟问题出在哪儿呢?正在百思不得其解,甚至打算删除该虚拟机,重新安装。可是想到还要去安装操作系统,以及相关软件,就不寒而栗。于是打算退而求其次,在Virtual Box中为其增加一块磁盘。结果,增加之后,启动虚拟机,发现并没有在计算机中增加新的磁盘。突然灵机一动,想到是否是计算机管理中的磁盘分区管理的问题呢。于是,打开Win7"计算机管理”中的“磁盘管理”,发现新增加的磁盘显示为未分配,而原来的磁盘容量赫然为40G,其中却有20G未曾分配。于是选择扩展磁盘,失踪的20G磁盘果然被找了回来。Virtual Box的硬盘大小调整终于取得成功。

因此,通过Virtual Box命令对磁盘进行调整后,一定要记得在Win7操作系统中扩展磁盘。这就好似你为你的计算机新添加了一块磁盘一样,需要进行同样的操作。