我使用免费的 VMware Player 创建了 Windows Server 2008 系统的映像,并将最大硬盘大小设置为 100GB。然后我将这些映像文件(当时为 30GB)交给了一家服务器托管公司。几周后,我要求他们归还一份副本;映像的大小应该没有太大变化,但我得到的文件却是完整的 100GB 大小。
我根本不是 VMware 专家,所以我有两个问题:
- 他们如何/为什么扩展整个动态磁盘?
- 有什么方法可以将此图像缩小到实际包含数据的大小?
我尝试了 VMware 转换器,但它似乎无法读取我的图像 (vmdk) 文件;它只是输出一个一般错误。
答案1
我的猜测是,当他们从您的图像创建虚拟机时,他们预先分配了图像的完整大小(这可以提高性能)。当他们导出它们时,您获得了完整的图像。
我怀疑您是否可以使用 VMware Player 缩小映像。VMware Workstation 附带 vmware-vdiskmanager,它显然可以将固定大小的磁盘转换为可增长的磁盘,从而减小映像的大小。我从未尝试过,所以我不能说它的效果如何。
手册在这里:http://www.vmware.com/support/developer/vddk/vddk12_diskmanager.pdf
答案2
我不知道 VMWare Player,但 VMWare Workstation 附带了 vmware-vdiskmanager.exe 命令行实用程序。在 C:\Program Files\VMware\VMware Workstation 文件夹中找到它。
以下是命令行选项:
VMware Virtual Disk Manager - build 385536.
Usage: vmware-vdiskmanager.exe OPTIONS <disk-name> | <mount-point>
Offline disk manipulation utility
Operations, only one may be specified at a time:
-c : create disk. Additional creation options must
be specified. Only local virtual disks can be
created.
-d : defragment the specified virtual disk. Only
local virtual disks may be defragmented.
-k : shrink the specified virtual disk. Only local
virtual disks may be shrunk.
-n <source-disk> : rename the specified virtual disk; need to
specify destination disk-name. Only local virtual
disks may be renamed.
-p : prepare the mounted virtual disk specified by
the mount point for shrinking.
-r <source-disk> : convert the specified disk; need to specify
destination disk-type. For local destination disks
the disk type must be specified.
-x <new-capacity> : expand the disk to the specified capacity. Only
local virtual disks may be expanded.
-R : check a sparse virtual disk for consistency and attempt
to repair any errors.
-D : make disk deletable. This should only be used on disks
that have been copied from another product.
Other Options:
-q : do not log messages
Additional options for create and convert:
-a <adapter> : (for use with -c only) adapter type
(ide, buslogic, lsilogic). Pass lsilogic for other adapter types.
-s <size> : capacity of the virtual disk
-t <disk-type> : disk type id
Options for remote disks:
-h <hostname> : hostname of remote server
-u <username> : username for remote server
-f <filename> : file containing password
-P <port> : optional TCP port number (default: 902)
-S : specifies that the source disk is remote, by default
the remote options are assumed to refer to the
destination.
Disk types:
0 : single growable virtual disk
1 : growable virtual disk split in 2GB files
2 : preallocated virtual disk
3 : preallocated virtual disk split in 2GB files
4 : preallocated ESX-type virtual disk
5 : compressed disk optimized for streaming
6 : thin provisioned virtual disk - ESX 3.x and above
The capacity can be specified in sectors, KB, MB or GB.
The acceptable ranges:
ide adapter : [1MB, 2040.0GB]
scsi adapter: [1MB, 2040.0GB]
ex 1: vmware-vdiskmanager.exe -c -s 850MB -a ide -t 0 myIdeDisk.vmdk
ex 2: vmware-vdiskmanager.exe -d myDisk.vmdk
ex 3: vmware-vdiskmanager.exe -r sourceDisk.vmdk -t 0 destinationDisk.vmdk
ex 4: vmware-vdiskmanager.exe -x 36GB myDisk.vmdk
ex 5: vmware-vdiskmanager.exe -n sourceName.vmdk destinationName.vmdk
ex 6: vmware-vdiskmanager.exe -r sourceDisk.vmdk -t 4 -h esx-name.mycompany.com \
-u username -f passwordfile "[storage1]/path/to/targetDisk.vmdk"
ex 7: vmware-vdiskmanager.exe -k myDisk.vmdk
ex 8: vmware-vdiskmanager.exe -p <mount-point>
(A virtual disk first needs to be mounted at <mount-point>)
您可以免费试用 VMWare Workstation。
答案3
缩小虚拟磁盘通常分为两个阶段:
- 擦拭。 这将把客户文件系统中未使用的块清零。 这必须在客户机内执行。
- 壓縮。 这将从擦除阶段删除 .vmdk 文件的零块。 这必须由主持人执行(尽管它可以由客人触发)。
在主机上运行vmware-vdiskmanager
可以执行压缩阶段,但不能执行擦除阶段。有几种方法可以执行擦除:
运行
vmware-toolbox-cmd disk shrink LOCATION
。运行vmware-toolbox-cmd help disk
以获取更多信息。(在 Windows 客户机上vmware-toolbox-cmd
命名VMwareToolboxCmd
。)这将在擦除完成时触发压缩阶段。该
vmshrink
计划来自VM Back 第三方工具包。对于无法使用 VMware Tools 的客户机,这可能是一个不错的选择。当擦除完成时,这还将触发压缩阶段。您可能可以
dd
在客人中使用(或等效的东西),但这留给读者练习。
在某些情况下,擦除阶段也是不必要的。例如,如果客户机在从文件系统中删除文件时恰好已经将文件内容清零,或者客户机是 Windows,在这种情况下,VMware Workstation 会自行知道如何检查 NTFS 客户机分区以确定哪些块未使用。