VMDK and QCOW2 are virtual-disk formats, not universal performance settings. The right choice usually follows the hypervisor:
- Use VMDK when VMware is the destination.
- Use QCOW2 when QEMU, KVM, or file-based Proxmox storage is the destination.
- Consider raw on Proxmox storage where maximum simplicity and predictable I/O matter more than file-level snapshot features.
Format conversion improves compatibility; it does not automatically make a VM faster.
Practical comparison
| Question | VMDK | QCOW2 |
|---|---|---|
| Native ecosystem | VMware | QEMU and KVM |
| Thin allocation | Supported by sparse variants | Supported |
| Internal snapshots | VMware-dependent | Supported |
| Compression | Some subformats | Supported for converted clusters |
| Backing files | Supported in some workflows | Core copy-on-write feature |
| Best default | VMware workloads | QEMU/KVM file storage |
Actual performance depends on cache mode, preallocation, underlying storage, guest drivers, queue settings, and workload. Benchmark your own storage path instead of choosing from format names alone.
Before converting
- Shut the VM down cleanly.
- Back up the source image and VM configuration.
- Check whether the source uses snapshots, split extents, or backing files.
- Make sure the destination has enough free space.
- Work on copies, not the only production image.
QEMU explicitly warns against modifying an image that is in use by a running VM.
Inspect the source
Install the tool on Debian or Ubuntu:
sudo apt update
sudo apt install qemu-utils
Then inspect the image and any backing chain:
qemu-img info --backing-chain source.vmdk
qemu-img check source.vmdk
If the image is encrypted, split across files, or depends on a backing chain, resolve that structure before a simple conversion.
Convert VMDK to QCOW2
qemu-img convert -p -f vmdk -O qcow2 source.vmdk destination.qcow2
For a destination that supports sparse files, the converted QCOW2 will normally avoid allocating known-zero areas. Optional preallocation can change performance and disk usage; do not add it without understanding the storage backend.
Convert QCOW2 to VMDK
A broadly portable VMware output is streamOptimized:
qemu-img convert -p -f qcow2 -O vmdk \
-o subformat=streamOptimized \
source.qcow2 destination.vmdk
Confirm that your target VMware product accepts the selected VMDK subformat.
Verify before import
qemu-img info destination.qcow2
qemu-img check destination.qcow2
Or for VMDK:
qemu-img info destination.vmdk
qemu-img check destination.vmdk
Compare the reported virtual size with the source. Then import the converted disk into a disposable VM definition, boot it without deleting the source, and verify:
- partition and filesystem health;
- network interface naming;
- bootloader behavior;
- application data;
- guest-agent and paravirtualized drivers.
Proxmox-specific note
Proxmox supports multiple storage backends. QCOW2 features are useful on directory or NFS storage, while LVM-thin, ZFS, Ceph, and other backends have their own snapshot and allocation behavior. Choose the storage architecture first; then choose the image format it supports best.
The definitive command reference is the official qemu-img documentation. For the next layer inside a guest, see resizing a Debian VM disk.