How to Import a VMware VM into Proxmox: qm importdisk Guide
A hands-on guide to importing VMware virtual machines into Proxmox VE using qm importdisk, covering VMDK conversion, disk attachment, boot order configuration, and post-import cleanup.
Importing VMware Disks into Proxmox
While the qm importovf command handles complete OVF packages, many real-world migration scenarios involve working directly with VMDK disk files. Perhaps you only have access to the raw disk files from a datastore, or the OVF export failed, or you need more control over the import process. The qm importdisk command gives you that control by letting you import individual disk images into existing Proxmox VMs.
This guide covers the entire workflow: understanding VMDK formats, converting disks, importing them, attaching them to VMs, setting boot order, and cleaning up afterward.
Understanding VMDK Formats
VMware uses several VMDK sub-formats, and understanding them helps avoid conversion issues:
| VMDK Type | Description | Files |
|---|---|---|
| Monolithic sparse | Single file, thin provisioned | disk.vmdk |
| Monolithic flat | Single file, thick provisioned | disk.vmdk + disk-flat.vmdk |
| Split sparse | Multiple 2 GB files, thin | disk.vmdk + disk-s001.vmdk, disk-s002.vmdk... |
| Split flat | Multiple 2 GB files, thick | disk.vmdk + disk-f001.vmdk, disk-f002.vmdk... |
| VMFS thin | ESXi datastore format | disk.vmdk + disk-flat.vmdk (descriptor + data) |
The key detail: when a VMDK consists of a descriptor file (small text file) plus a data file (the actual disk content, e.g., disk-flat.vmdk), you must have both files in the same directory. Always reference the descriptor file (the smaller .vmdk file) when converting — qemu-img will find the data file automatically.
Step 1: Convert the VMDK
First, transfer the VMDK files to your Proxmox host. Then convert to a Proxmox-compatible format:
# Convert to qcow2 (good for directory-based or NFS storage)
qemu-img convert -f vmdk -O qcow2 MyVM.vmdk MyVM.qcow2
# Convert to raw (best for ZFS or LVM-thin — no format overhead)
qemu-img convert -f vmdk -O raw MyVM.vmdk MyVM.raw
# Show progress for large disks
qemu-img convert -p -f vmdk -O qcow2 MyVM.vmdk MyVM.qcow2
Verify the converted disk looks correct:
qemu-img info MyVM.qcow2
The output should show the correct virtual size matching the original VMware disk.
Step 2: Create the Target VM
Create a VM in Proxmox that will receive the imported disk. You can do this from the web UI or the command line:
# Create a VM shell with no disk
qm create 250 \
--name imported-webserver \
--memory 4096 \
--cores 2 \
--sockets 1 \
--net0 virtio,bridge=vmbr0 \
--ostype l26 \
--scsihw virtio-scsi-single
Set the OS type appropriately: l26 for Linux 2.6+ kernels, win11 for Windows 11, win10 for Windows 10, etc. This ensures Proxmox applies the correct default settings.
Step 3: Import the Disk with qm importdisk
Now import the converted disk into the VM:
# Import to local-lvm storage
qm importdisk 250 /tmp/imports/MyVM.qcow2 local-lvm
# Import to a ZFS pool
qm importdisk 250 /tmp/imports/MyVM.raw local-zfs
# Import to directory storage (keeps qcow2 format)
qm importdisk 250 /tmp/imports/MyVM.qcow2 local
After the import completes, the disk appears as an unused disk in the VM's hardware list. The command output tells you the exact disk identifier, for example: Successfully imported disk as 'unused0:local-lvm:vm-250-disk-0'.
Step 4: Attach the Disk and Configure Boot Order
The imported disk is not yet attached to a bus. Attach it and set the boot order:
# Attach as SCSI disk (recommended for performance with virtio-scsi)
qm set 250 --scsi0 local-lvm:vm-250-disk-0
# If you have multiple disks, attach additional ones:
# qm set 250 --scsi1 local-lvm:vm-250-disk-1
# Set boot order to boot from the imported disk
qm set 250 --boot order=scsi0
# For UEFI VMs, add an EFI disk:
qm set 250 --efidisk0 local-lvm:1,efitype=4m,pre-enrolled-keys=1
qm set 250 --bios ovmf
For Windows VMs that need VirtIO drivers, initially attach the disk as IDE to ensure bootability:
# Temporary IDE attachment for Windows VMs without VirtIO drivers
qm set 250 --ide0 local-lvm:vm-250-disk-0
qm set 250 --boot order=ide0
# Attach VirtIO driver ISO
qm set 250 --ide2 local:iso/virtio-win.iso,media=cdrom
Step 5: First Boot and Validation
Start the VM and verify it boots correctly:
# Start the VM
qm start 250
# Access the console via the web UI or with a VNC client
# Check the VM status
qm status 250
Common first-boot tasks:
- Verify the OS boots without errors in the console.
- Check that all disks are visible and have the correct sizes.
- Confirm network connectivity and update IP configuration if needed.
- For Windows: install VirtIO drivers, then switch from IDE to VirtIO SCSI.
- For Linux: install
qemu-guest-agentand remove any VMware tools.
Step 6: Post-Import Cleanup
After the VM is running correctly, clean up:
# Remove temporary import files
rm /tmp/imports/MyVM.vmdk /tmp/imports/MyVM.qcow2
# Remove any unused disks from the VM config (visible in Hardware tab)
# Use the web UI: select the unused disk → Remove
# Optimize the disk (optional, for qcow2 on directory storage)
# Stop the VM first
qm stop 250
qemu-img convert -O qcow2 /var/lib/vz/images/250/vm-250-disk-0.qcow2 /var/lib/vz/images/250/vm-250-disk-0-optimized.qcow2
mv /var/lib/vz/images/250/vm-250-disk-0-optimized.qcow2 /var/lib/vz/images/250/vm-250-disk-0.qcow2
qm start 250
Importing Multiple VMs Efficiently
When importing many VMs, a simple shell script can automate the repetitive steps:
#!/bin/bash
# Batch import example — adjust VMID, filenames, and storage as needed
VMID_START=300
STORAGE="local-lvm"
for vmdk in /tmp/imports/*.vmdk; do
name=$(basename "$vmdk" .vmdk)
echo "Importing $name as VM $VMID_START..."
qemu-img convert -p -f vmdk -O raw "$vmdk" "/tmp/imports/${name}.raw"
qm create $VMID_START --name "$name" --memory 4096 --cores 2 --net0 virtio,bridge=vmbr0
qm importdisk $VMID_START "/tmp/imports/${name}.raw" $STORAGE
qm set $VMID_START --scsi0 "${STORAGE}:vm-${VMID_START}-disk-0" --boot order=scsi0
((VMID_START++))
done
After batch importing, tools like ProxmoxR make it convenient to quickly check the status of all your newly imported VMs from your phone, verify they are running, and catch any that failed to start — especially useful when you have imported a large batch and need to triage issues efficiently.
Summary
The qm importdisk workflow gives you full control over the VMware-to-Proxmox import process. Convert the VMDK with qemu-img, create a VM, import the disk, attach it, set boot order, and validate. For Windows VMs, remember the VirtIO driver step. For Linux VMs, the process is usually seamless. Clean up temporary files when done to reclaim storage space.
Take Proxmox management mobile
All the features discussed in this guide — accessible from your phone with ProxmoxR. Real-time monitoring, power control, firewall management, and more.