最近使用Virtual PC 2007创建虚拟机的时候,遇到了硬盘空间不够的情况,在网络上用中文搜,只有一个解决方案,我认为不够好,英文搜出几个方案,比较好。我按照搜出的结果去操作,问题解决了。以下是详细过程。
使用Viatual PC创建虚拟机的时候,虚拟硬盘按照空间增长方式有两种:Dynamic expanding disk和fixed-size disk。Dynamic expanding disk顾名思义就是动态增长的硬盘。不过这个动态增长是指在硬盘空间内的动态增长。默认的情况下创建虚拟机会使用这个Dynamic expanding Disk。默认情况下这个动态扩展的磁盘的空间是16G。在16G的空间没有占满的时候,虚拟机的硬盘是动态增长的。刚开始创建虚拟机,可能只有4G,随着硬盘上文件的增加,硬盘空间会逐渐增加,所以我一开始没注意到这个硬盘是有上限的。后来硬盘到了16G了,空间就不再动态增加了。操作系统开始报C盘空间不够(我在虚拟机中只设了一个分区)。我开始看能不能解决。在Virtual PC的帮助文件中没找到相关内容。在google上搜“virtual pc 硬盘空间 扩展”,搜出的链接中有两个是解决这个问题的,不过内容内容重复。好像这个在先:Virtual PC扩展一个VHD(virtual hard disk)的大小(http://server.zdnet.com.cn/server/2007/1230/693678.shtml)。基本的思路是再做一个虚拟硬盘,把空间设置的大一点,然后用ghost把硬盘上的内容copy到新的虚拟硬盘上。这也是个办法。不过我有点不甘心,既然是动态扩展硬盘,为什么不能动态扩展?后来用“virtual pc expand disk space”(大意,最初怎么输的没记下来)在google上搜,搜出几篇比较有用的英文的文章。
第一篇是一个论坛,介绍了一个免费的小软件VHD Resizer: http://www.aspdeveloper.net/Virtual_PC/rn-739-41613_increase_hard_disk_size.aspx。下载后安装。把虚拟机关掉。使用VHD Resizer把原来的虚拟硬盘扩展到了20G。具体界面没copy,见这个网页:http://www.windows7hacker.com/index.php/2010/01/how-to-resize-vhd-to-get-more-space-for-your-virtual-machine/。实际是用原有虚拟硬盘文件复制出另外一个虚拟硬盘文件(跟ghost好像也没差多少,不过比ghost用起来方便)。我的电脑上做这一步操作大概花了半个小时。
上一个网页(http://www.windows7hacker.com/index.php/2010/01/how-to-resize-vhd-to-get-more-space-for-your-virtual-machine/)还说了windows7下如何扩展虚拟硬盘。直接在磁盘管理器中点右键操作就可以了。不过我的虚拟机是windows2003。
下面两个网页一个英文一个中文给出了在windows2003下用自带的小程序diskpart.exe扩展虚拟硬盘的步骤。http://www.xtralogic.com/extend_fs_part.shtml http://support.microsoft.com/kb/325590 。需要把虚拟磁盘(vhd文件)挂在另外一个虚拟机上,在这个虚拟机上用diskpart来扩展。按照上面给出的步骤操作的时候又遇到了两个问题:
1:这个diskpart.exe与“管理工具->计算机管理->磁盘管理”可能有冲突,两个工具都打开的情况下两个都不好使。现象是diskpart上找不到需要扩展的磁盘,“磁盘管理”上右键选择“更改驱动器和符号”会报错(具体错误信息忘了copy下来)。需要把“磁盘管理”关掉。
2:关掉“磁盘管理”后能找到我需要扩展的磁盘了,但是按步骤走到输入“extend”命令后,报“不能扩展”(仍然是大意)。再仔细看上面两个网页,英文的说了硬盘中不能含system page页。我的这个vhd恰恰是系统启动盘。中文的网页中说只要把system page文件移走就可以。按照说明把c盘下的system page文件移走。输入extend,成功!非常快,只有几秒钟。
成功后把system page文件移回原位。把这个vhd文件从新的虚拟机下remove。然后启动旧的虚拟机。系统启动后说需要重启,重启后再看硬盘已经变成了20G,不再报磁盘空间不够。不过在宿主机中看这个vhd文件还是16G。