代码改变世界

VMware虚拟磁盘管理工具

2009-04-27 14:20  Johnny Qian  阅读(3226)  评论(0编辑  收藏  举报

最近发现虚拟机越来越大了,快14G了。但打开虚拟机,里面的文件实际只占用了8G左右,太浪费空间了。在VM的界面上没找到什么功能可以解决这个问题,只找到了一个磁盘整理的功能。后来看到安装程序中有个vmware-vdiskmanager.exe,应该是来管理虚拟硬盘的,查了一下,果然是这样!

方法如下:

使用虚拟磁盘管理软件打开宿主机中的命令行或终端(Linux中的命令行),以运行虚拟磁盘管理软件。在Windows宿主机中,更改目录为你安装Workstation软件所在的目录。默认的安装目录为C:\Program Files\VMware\VMware Workstation。

命令语法:
vmware-vdiskmanager [选项]
这里的选项你必须包含以下的一些选择项或参数
选项和参数
描述
<diskname>
虚拟磁盘文件的名字。虚拟磁盘文件必须是.vmdk为扩展名。你能够指定一个你想要储存的虚拟磁盘文件的路径。如果你在你的宿主机中映射了网络共享,你也可以提供确切的虚拟磁盘文件的路径信息来创建虚拟磁盘在这个网络共享中

-c
创建虚拟磁盘。你必须用-a, -s 和 -t 并指定选项参数,然后你需要指定所要创建的虚拟磁盘文件的文件名。

-r <sourcediskname>
转换已经指定类型的虚拟磁盘的类型,结果会输出创建一个新的虚拟磁盘。你必须用-t选项来指定你想要转换成的磁盘类型,并且指定目标虚拟磁盘的文件名。
一旦转换完成,你可以先测试虚拟磁盘以确保它能够像你所希望的那样工作,然后再删除原来的那个虚拟磁盘文件。
为了让虚拟机重新认识转换后的虚拟磁盘,你应该使用虚拟机设置编辑器先从虚拟机中移除先前存在的虚拟磁盘,然后添加转换好的虚拟磁盘给虚拟机。

-x <n>[GB|MB] <diskname>
增大虚拟磁盘到指定的容量。你必须指定新的更大尺寸的虚拟磁盘用GB或MB单位标示。你不能改变物理磁盘的大小。(废话)
注意:在你运行虚拟磁盘管理软件前,你应该先备份虚拟磁盘文件。(因为不会创建新的文件,所以备份以防增大磁盘操作失败)

-d <diskname>
对指定的虚拟磁盘碎片整理。你只能磁盘碎片整理可增长的虚拟磁盘。你不能磁盘碎片整理预分配的虚拟磁盘。

-p <mountpoint>
为收缩磁盘做准备处理。如果虚拟磁盘被分成多个分区,每个分区必须被单独准备。分区(比如C:或D:)必须用VMware DiskMount工具映射。
在你对分区准备处理后,解除对此分区的映射。继续映射虚拟磁盘的其他每个分区,为收缩磁盘作准备处理直到完成虚拟磁盘上的所有分区的准备工作。
你在同一时刻只能用VMware DiskMount映射虚拟磁盘的一个分区。你仅仅能在Windows宿主机上进行虚拟磁盘的收缩分区准备工作。

-k <diskname>
收缩指定的虚拟磁盘。你只能够收缩可增长磁盘。你只能在Windows宿主机中(用这种方法)收缩虚拟磁盘。
你不能够收缩有虚拟机快照的虚拟磁盘。你可以保持现有虚拟磁盘的状态,而用快照管理器删除所有快照。你也可以放弃自快照以来对虚拟磁盘所做的更改,恢复到快照时状态。

-a [ ide | buslogic | lsilogic ]
指定磁盘适配器的类型。你在创建新的虚拟磁盘时必须指定其类型。选择以下类型之一:
ide —— IDE接口适配器
buslogic —— BusLogic SCSI接口适配器
lsilogic —— LSI Logic SCSI接口适配器

-s <n> [GB|MB]
指定虚拟磁盘的大小。确定大小用GB或MB做单位。你必须在创建磁盘时指定其大小。
尽管你必须指定虚拟磁盘的大小,但当你增长它的大小时,你不能用-s这个选项。
可以指定的磁盘大小规定:IDE和SCSI适配器都为最小100MB,最大950GB。

-t [0|1|2|3]
你在创建一个新的虚拟磁盘或者重新配置一个虚拟磁盘时必须指定虚拟磁盘的类型。指定以下类型之一:
0 —— 创建一个包含在单一虚拟文件中的可增长虚拟磁盘
1 —— 创建一个被分割为每个文件2GB大小的可增长虚拟磁盘
2 —— 创建一个包含在单一虚拟文件中的预分配虚拟磁盘
3 —— 创建一个被分割为每个文件2GB大小的预分配虚拟磁盘

-q
禁止虚拟磁盘管理程序写日志
如果你允许记录日志,日志将会被虚拟磁盘管理程序产生并储存。在虚拟磁盘管理程序运行后,日志的名字和存放位置将会出现在命令行或终端中。

-n <source-disk>
重命名指定的虚拟磁盘。需要指定命名后的虚拟磁盘名字。

相关实例:

使用VMware虚拟磁盘管理工具实例
以下例子描述怎样使用虚拟磁盘管理工具。你需要在命令行中运行虚拟磁盘管理工具。

创建虚拟磁盘
命令:vmware-vdiskmanager -c -t 0 -s 40GB -a ide myDisk.vmdk
这个命令将创建一个40GB大小IDE接口的名字为myDisk的虚拟硬盘。虚拟磁盘包含在一个单一文件中。这个虚拟磁盘没有被预分配磁盘空间。
实际命令输入:
D:\Big Program Files\VMware\VMware Workstation>vmware-vdiskmanager -c -s 40Gb –a ide -t 0 E:\myDisk.vmdk
执行结果显示:
Using log file C:\DOCUME~1\xujun\LOCALS~1\Temp\vmware\vdiskmanager.log
Creating a monolithic growable disk ‘E:\myDisk.vmdk’
Virtual disk creation successful.

转换一个虚拟磁盘
转换一个预分配虚拟磁盘为可增长虚拟磁盘,用以下这个命令:
vmware-vdiskmanager -r sourceDisk.vmdk -t 0 targetDisk.vmdk
这个命令将转换磁盘从它的原始的预分配模式转变为包含在单一文件中的可增长虚拟磁盘。这个虚拟磁盘空间将不会被预先分配,虚拟磁盘工具将收回虚拟磁盘中的一些磁盘空间,而仅仅让里面的数据占用虚拟磁盘空间。
实际命令输入:
C:\Program Files\VMware\VMware Workstation>vmware-vdiskmanager -r “D:\WinXP
SP2 V2.5\Windows XP Professional.vmdk” -t 0 “L:\Windows XP Professional.vmdk”
执行结果显示:
Using log file C:\DOCUME~1\xujun\LOCALS~1\Temp\vmware\vdiskmanager.log
Creating a monolithic growable disk ‘L:\Windows XP Professional.vmdk’
Convert: 100% done.
Virtual disk conversion successful.

增大存在的虚拟磁盘的大小
命令:vmware-vdiskmanager -x 40GB myDisk.vmdk
这条命令将把虚拟磁盘myDisk.vmdk大小增大到40GB
实际命令输入:
C:\Program Files\VMware\VMware Workstation>vmware-vdiskmanager -x 40GB “D:\WinXP SP2 V2.5\Windows XP Professional S.vmdk”
执行结果显示:
Using log file C:\DOCUME~1\xujun\LOCALS~1\Temp\vmware\vdiskmanager.log
Grow: 100% done.
The old geometry C/H/S of the disk is: 8322/16/63
The new geometry C/H/S of the disk is: 16383/16/63
Disk expansion completed successfully.
WARNING: If the virtual disk is partitioned, you must use a third-party
utility in the virtual machine to expand the size of the
partitions. For more information, see:
http://www.vmware.com/support/kb/enduser/std_adp.php?p_faqid=1647
创建好后,可以在磁盘管理中,看到未指派的空间。如果你想扩大磁盘分区的大小,可以用其他第三方软件来做。

重命名虚拟磁盘
重命名虚拟磁盘,首先把虚拟磁盘从虚拟机中移除。(选择 虚拟机 )设置 〉虚拟磁盘,然点移除按钮)
然后重命名命令:vmware-vdiskmanager -n myDisk.vmdk myNewDisk.vmdk
重命名磁盘定位在不同的目录下的命令:
vmware-vdiskmanager -n myDisk.vmdk ..\<new-path>\myNewDisk.vmdk
注意:这是一个在windows宿主机中的路径方式。
定位在不同目录下,但保持相同名字的虚拟磁盘命令:
vmware-vdiskmanager -n myDisk.vmdk ..\<new-path>\myDisk.vmdk
在你重命名或重定位虚拟磁盘后,把虚拟磁盘添加回虚拟机中使用。选择 虚拟机 〉设置,点添加,然后根据向导添加这个已经存在的虚拟磁盘。
实际命令输入:
C:\Program Files\VMware\VMware Workstation>vmware-vdiskmanager -n “D:\WinXP SP2 V2.5\Windows XP Professional S.vmdk” “D:\WinXP SP2 V2.5\Windows XP Professio nal WS.vmdk”
执行结果显示:
Using log file C:\DOCUME~1\xujun\LOCALS~1\Temp\vmware\vdiskmanager.log
Renaming completed successfully.
重命名几乎是瞬间完成的,虽然如此,不过我用MD5验证前后的.vmdk文件,证实文件确实经过了内部修改,得到了不同的MD5码。

磁盘碎片整理虚拟磁盘
命令:vmware-vdiskmanager -d myDisk.vmdk
记住,你不能磁盘碎片整理预分配的虚拟磁盘。你也不能用这条命令磁盘碎片整理物理硬盘。(废话)
实际命令输入:
C:\Program Files\VMware\VMware Workstation>vmware-vdiskmanager -d “D:\WinXP SP2 V2.5\Windows XP Professional S.vmdk”
执行结果显示:
Using log file C:\DOCUME~1\xujun\LOCALS~1\Temp\vmware\vdiskmanager.log
Defragment: 100% done.
Defragmentation completed successfully.

为收缩虚拟磁盘做准备
命令:vmware-vdiskmanager –p S:
一旦准备完成,解除分区映射。重复这个过程在虚拟磁盘的每个分区上。(这样可以得到最好的收缩效果)在你为收缩磁盘准备好了所有分区后,你就可以收缩虚拟磁盘了
实际命令输入:
C:\Program Files\VMware\VMware Workstation>vmware-vdiskmanager -p S:
执行结果显示:
Using log file C:\DOCUME~1\xujun\LOCALS~1\Temp\vmware\vdiskmanager.log
100% wiping done.
我所映射的虚拟磁盘S

收缩虚拟磁盘
(这种方法)收缩虚拟磁盘必须在Windows宿主机下进行。在你收缩虚拟磁盘以前,确保你已经为虚拟磁盘的所有分区进行了收缩准备。
命令:vmware-vdiskmanager -k myDisk.vmdk
记住,你不能收缩预分配的磁盘。你也不能收缩物理磁盘。如果虚拟磁盘有快照,你也不能收缩。在你收缩以前删除所有的快照。
实际命令输入:
C:\Program Files\VMware\VMware Workstation>vmware-vdiskmanager -k “D:\WinXP SP2 V2.5\Windows XP Professional S.vmdk”
执行结果显示:
Using log file C:\DOCUME~1\xujun\LOCALS~1\Temp\vmware\vdiskmanager.log
Shrink: 100% done.
Shrink completed successfully.
收缩磁盘时会产生一个临时文件,其实它就是收缩后的虚拟磁盘文件,会代替原来的那个虚拟磁盘文件。