如何缩小我的 VMware 映像?

如何缩小我的 VMware 映像?

我使用免费的 VMware Player 创建了 Windows Server 2008 系统的映像,并将最大硬盘大小设置为 100GB。然后我将这些映像文件(当时为 30GB)交给了一家服务器托管公司。几周后,我要求他们归还一份副本;映像的大小应该没有太大变化,但我得到的文件却是完整的 100GB 大小。

我根本不是 VMware 专家,所以我有两个问题:

  1. 他们如何/为什么扩展整个动态磁盘?
  2. 有什么方法可以将此图像缩小到实际包含数据的大小?

我尝试了 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

缩小虚拟磁盘通常分为两个阶段:

  1. 擦拭。 这将把客户文件系统中未使用的块清零。 这必须在客户机内执行
  2. 壓縮。 这将从擦除阶段删除 .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 客户机分区以确定哪些块未使用。

相关内容