电脑技术学习

如何有效的压缩虚拟磁盘

dn001

在使用虚拟机时,可能虚拟硬盘文件占用了宿主机上的大量硬盘空间让你很头痛吧,那么如何有效的减少虚拟硬盘文件所占用的硬盘空间呢?

你可以采用以下两个方法:

压缩虚拟硬盘。微软已经考虑到了虚拟硬盘文件会占用大量的硬盘空间,因此在VPC和VS中均附带了虚拟硬盘压缩功能,支持对动态扩展类型的虚拟硬盘进行压缩,从而减少虚拟硬盘文件所占用的硬盘空间。

针对虚拟硬盘文件启用NTFS压缩功能。这可以显著的降低虚拟硬盘文件所占用的硬盘空间,但是带来的后果是降低了宿主机的磁盘读写性能,从而导致虚拟机的性能降低,建议只有在特别需要时才使用此功能。

这两个方法是相互独立的,你可以同时使用这两个方法。启用NTFS压缩非常简单,但是会降低性能,因此我不推荐你使用这种方式。在这篇文章中,我将为大家介绍一下如何有效的压缩虚拟磁盘。

首先介绍一下VPC和VS中虚拟硬盘压缩的原理。虚拟硬盘压缩只支持对动态扩展类型的虚拟硬盘进行压缩,不支持压缩其他类型的虚拟硬盘。当使用动态扩展类型的虚拟硬盘时,VPC和VS会根据虚拟机的需求动态扩展宿主机上虚拟硬盘文件所占用的硬盘空间;但是当虚拟机中删除文件后,虽然虚拟机中不再使用被删除的文件所占用的那部分磁盘空间,但是VPC和VS并不会相应的减少宿主机上虚拟硬盘所占用的硬盘空间,你必须通过压缩虚拟硬盘,才能根据虚拟机所使用的磁盘空间大小来减少宿主机上虚拟硬盘所占用的硬盘空间大小。回想一下虚拟机中不同虚拟硬盘类型的特性(参考Virtual PC 使用指南一文中的创建虚拟硬盘一节),憔涂梢悦靼孜裁粗挥卸┱估嘈偷男槟庥才滩胖С盅顾酢?/FONT>

那么,VPC和VS如何判断虚拟硬盘文件中的哪部分数据是虚拟机所使用的,而哪部分数据是虚拟机未使用的呢?关于这个压缩机制,微软只是在官方文档中简单的提及当执行磁盘压缩时,将移除所有只是包含数据“0”的扇区。不过由于在删除文件时,Windows系统并没有把被删除的文件所占用的硬盘扇区进行清零处理,而是简单的把这些硬盘扇区标注为可以使用,因此微软在VPC 2004 SP1和VS中均提供了一个Precompactor工具,它可以把未使用的扇区进行清零处理(用数据“0”覆写整个扇区),从而便于进行磁盘压缩。

从上面的磁盘压缩原理可以看出,它只能从宿主机上的虚拟硬盘文件中清除虚拟机未使用的磁盘空间,并不能对虚拟机所使用的磁盘空间进行压缩操作,因此对于磁盘压缩而言,最好的效果就是压缩后的虚拟硬盘文件大小非常接近于虚拟机中所使用的磁盘空间大小。

因此,在压缩虚拟硬盘文件之前,我们必须先在虚拟机中进行预压缩处理,以Undo磁盘禁用模式启动虚拟机,然后进行以下三个操作步骤:

1、在虚拟机中删除临时文件和不必要的文件,具体的操作步骤如下:

首先,对Windows组件进行处理,删除不需要的组件;你也可以删除Windows目录下不需要的文件,不过我不建议这样做,如果需要建议只是删除*.log文件;

然后,删除不需要的其他应用程序;

禁用虚拟内存(可能需要重启虚拟机);

最后,删除临时文件并清空回收站。默认情况下,Windows系统的临时文件主要存放在以下几个目录:

%systemroot%temp,默认为c:windowstemp,存放Windows系统的临时文件

%userprofile%%username%Local Settingstemp,默认为C:Documents and Settings%username%Local SettingsTemp,存放用户的临时文件,如果有多个用户,则分别进行删除;

%userprofile%%username%Local SettingsTemporary Internet Files,默认为C:Documents and Settings%username%Local SettingsTemporary Internet Files,存放用户的Internet临时文件,如果有多个用户,则分别进行删除;

2、在虚拟机中进行磁盘碎片整理。磁盘碎片整理可以极大的提高VPC和VS在进行磁盘压缩时识别未使用的磁盘空间的能力,对于Windows 2000之后的Windows系统而言,使用自带的磁盘碎片整理程序即可,不过经过我的多次对比测试,使用Executive Diskeeper来进行磁盘碎片整理具有最好的效果(Windows 2000及其后系统中所提供的磁盘碎片整理程序就是Diskeeper的简化版本),大家可以点击此链接下载Diskeeper的试用版本。

3、在虚拟机中运行Precompactor工具对未使用的扇区进行清零处理。Precompactor工具通过一个光盘镜像的方式提供,当挂接到虚拟机中时,可以利用Windows的光盘自动播放功能运行。具体的操作方式VPC和VS略有不同:

VPC: