分类: LINUX
2011-07-03 18:10:21
最近流行用vboot启动虚拟硬盘,而win7本来就原生支持vhd虚拟硬盘启动的。采用vboot虚拟启动vhd硬盘,这样的好处是既可以像虚拟机那样(都是采用虚拟技术),不会破坏原来硬盘的数据,非常方便地创建和删除虚拟硬盘,非常简单得移动到其他电脑运行;也像安装双系统那样,某个时刻仅仅能运行一个系统,但一个系统就占用系统的全部资源,运行速度快,非常方便地使用外部资源,如:串口、并口等。
作为一名学生,考虑到以后可能随时换电脑(尤其是现在还用着台式电脑),但不会轻易换我的开发平台(操作系统+开发软件)。如果是xp系统,那很好办,重新封装系统,用Ghost打包一下就可以了;而linux呢?如果仅仅换其他电脑设备,而不换硬盘,那没所谓,直接插上硬盘就好了,但要换硬盘的话,就麻烦多了。常用的方法是Ghost 加上 -ia 参数 硬盘对拷,或者在linux下使用使用 dd 命令。但是这样的话,无用的数据也会拷贝过去,太耗时间了。因此,虚拟启动vhd是个人觉得最佳的安装linux平台的方法,而且我们也可以选择虚拟机里启动,跑window系统下的linux模式(就是虚拟机VMLite Workstation的无缝模式):
从上面的图可以看出:linux和xp系统混合在一起,就像运行一个系统那样。经常切换xp和linux系统,那样用VMLite Workstation 安装linux系统,是不错的选择哦。安装后的虚拟硬盘,也可以用来虚拟启动实机,独占实机全部资源。
但是,安装linux的虚拟硬盘会随着使用的频繁,从而导致虚拟硬盘(动态分配)体积会越来越大,尽管里面文件很少。因此我们要考虑一下压缩vhd虚拟硬盘了。
假如是在虚拟硬盘里安装的是window系统,那很好办,网上很多教程和工具。但linux呢?其实也很简单,但网上教程很少,最后找到这中方法:
①在终端输入如下命令:
cat /dev/zero > zero.dat ; sync ; sleep 1 ; sync ; rm zero.dat |
它执行的操作是创建一个zero.dat文件,往这个文件写入0数据,然后再删掉zero.dat这个文件。
以上方法是这篇文章提出的:http://blogs.msdn.com/b/virtual_pc_guy/archive/2005/08/23/454846.aspx
②使用Virtual PC 2007压缩虚拟硬盘:文件——虚拟磁盘向导——编译一个已存在的虚拟磁盘——选中要压缩的虚拟硬盘——选择压缩,下一步——然后就是选择替换原始文件还是另存为,我建议是另存为,毕竟压缩后有可能发送数据错误的情况——然后就等待压缩完成。
第一步这样实际上就是把未使用空间清零。虚拟硬盘之所以越用越大,就是因为我们删掉里面文件时,并不会把里面数据清0,而系统运行时,本身就会不断创建临时文件和删除临时文件,或者有时候我们不断在删除和创建文件也是这样,这样虚拟硬盘就越用越大。把未使用空间清0后,实际上,虚拟硬盘还是不会减少空间的,我们还需要用到 Virtual PC 2007 里面的虚拟硬盘压缩功能,他就是把 数据为 0 的空间都删掉,这样就可以减少虚拟硬盘的东西。
实际上,在执行第一步时,创建的zero.dat 会经过漫长的时间才能填充完整个虚拟硬盘(这样并不会增加虚拟硬盘的实际大小),而实际上,我们只要等待zero.dat 的体积大于 虚拟硬盘实际占用空间和里面占用空间之差就可以了,这里就已经把多余的数据清0,可以按 ctrl+z 结束填充,再删掉zero.dat。因此,第一步可以分为两步进行:
第一步:在终端输入如下命令:
cat /dev/zero > zero.dat |
第二步:等待zero.dat 的体积大于 虚拟硬盘实际占用空间和里面占用空间之差后,执行
rm zero.dat |
经过处理,我8G多的虚拟硬盘变成5G多,与虚拟硬盘文件内容占用空间大小一样,说明已经压缩成功了。然后就拿去给虚拟机启动,验证数据是否丢失,我的测试过,可以正常启动,数据无丢失,最终压缩linux VHD虚拟硬盘成功。。
倘若经常强制关机,那样虚拟硬盘也会像真实硬盘那样出现数据错误的问题,会发现电脑无法再虚拟启动,用虚拟机VMLite Workstation也无法打开虚拟硬盘,用其他可以打开虚拟硬盘的软件也是一样,例如 DiskGenius 。那是不是没法修复呢?
当然不是啦,其实 Virtual PC 2007 里面的虚拟硬盘压缩功能 本身就有修复功能,重新压缩一下,就可以继续使用了。