3

I created an image of a Windows Server 2008 system using the free VMware Player and set the maximum hard drive size to 100GB. I then gave those image files - 30GB at the time - to a server hosting company. A few weeks later I asked them for a copy of them back; the image should not have changed much in size, but the files I got back were the full 100GB size.

I am not a VMware expert at all, so I have two questions:

  1. How/why did they expand the whole dynamic disk?
  2. Is there any way I can somehow shrink this image down to the size that actually contains data?

I tried the VMware converter, and it can't seem to read my image (vmdk) file; it just outputs a generic error.

3 Answers 3

3

My speculation is that when they created the VM from your image they pre-allocated the full size of the images (this can have better performance). When they exported them you got the full image.

I doubt you can shrink the images with VMware player. VMware Workstation comes with vmware-vdiskmanager that can apparently convert from a fixed size disk to a growable disk reducing the size of the image. I have never tried this so I cannot say how well it works.

The manual is here: http://www.vmware.com/support/developer/vddk/vddk12_diskmanager.pdf

1
  • I think you can do the same type of conversion with VirtualBox command line tools. Commented Aug 16, 2011 at 7:02
2

I don't know about VMWare Player, but VMWare Workstation ships with vmware-vdiskmanager.exe command line utility. Find it C:\Program Files\VMware\VMware Workstation folder.

Here are the command line options:

    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>)

You can get a free VMWare Workstation trial.

0

There are typically two phases to shrinking a virtual disk:

  1. Wiping. This zeroes unused blocks of the guest file system. This must be performed within the guest.
  2. Compacting. This removes the zeroed blocks of the .vmdk file from the wiping phase. This must be performed by the host (although it can be triggered by the guest).

Running vmware-vdiskmanager on the host can do the compacting phase but not the wiping phase. There are a few ways to do the wipe:

  • Run vmware-toolbox-cmd disk shrink LOCATION. Run vmware-toolbox-cmd help disk for more information. (vmware-toolbox-cmd is named VMwareToolboxCmd on Windows guests.) This will trigger the compacting stage when the wipe is complete.

  • The vmshrink program from the VM Back third-party package of tools. This can be a good alternative for guests for which VMware Tools is not available. This also will trigger the compacting stage when the wipe is complete.

  • You probably could use dd (or something equivalent) in the guest, but that's left as an exercise for the reader.

There are also some circumstances where the wiping phase is not necessary. For example, if the guest happens to already zero the contents of files when deleting them from the file system, or if the guest is Windows, in which case VMware Workstation knows on its own how to inspect NTFS guest partitions to determine which blocks are unused.

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .