So you’ve got a VMWare system but when you created it you did so but specified the wrong disk type. For example I have a Win7 32bit VM specifically for iTunes (in my family we have iPhones and iPads). Unfortunately when I created this for some silly reason decided to set the 40GB drive to preallocated meaning I have a single 40GB file taking up far too much room on my limited SSD.

I wanted to convert this down to a growable disk and was able to do so using the vmware-vdiskmanager tool:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
phillips321@Ubuntu-Desktop:/nfs/vm/iTunes$ vmware-vdiskmanager -h
Diskname or some other argument is missing.
VMware Virtual Disk Manager - build 471780.
Usage: vmware-vdiskmanager 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.
     -e                   : check for disk chain consistency.
     -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

  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 -c -s 850MB -a ide -t 0 myIdeDisk.vmdk
        ex 2: vmware-vdiskmanager -d myDisk.vmdk
        ex 3: vmware-vdiskmanager -r sourceDisk.vmdk -t 0 destinationDisk.vmdk
        ex 4: vmware-vdiskmanager -x 36GB myDisk.vmdk
        ex 5: vmware-vdiskmanager -n sourceName.vmdk destinationName.vmdk
        ex 6: vmware-vdiskmanager -r sourceDisk.vmdk -t 4 -h esx-name.mycompany.com \
              -u username -f passwordfile "[storage1]/path/to/targetDisk.vmdk"
        ex 7: vmware-vdiskmanager -k myDisk.vmdk
        ex 8: vmware-vdiskmanager -p <mount-point>
              (A virtual disk first needs to be mounted at <mount-point>)

I order to convert down i needed to use the -r flag along with the disk type that i wished to end with, in this case 0.

1
2
3
4
5
6
7
8
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

A quick one-liner and my virtual disk was converted after about an hour.

1
2
3
4
5
phillips321@Ubuntu-Desktop:/nfs/vm/iTunes$ vmware-vdiskmanager -r iTunes_preallocated.vmdk -t 0 iTunes_growable.vmdk
Creating disk 'iTunes_growable.vmdk'
  Convert: 100% done.
Virtual disk conversion successful.
phillips321@Ubuntu-Desktop:/nfs/vm/iTunes$

This tool will be great for those that need to split their disk into 2GB files in order to cope with various file system types, preallocate their disk to improve performance or set their disk to growable in order to decrease wasted disk space.

If anyone knows what the option compressed disk optimized for streaming means I would love to know as googling didn’t help.

Leave a Reply