Comparisons

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.

ProxmoxR app icon

Managing Proxmox? Try ProxmoxR

Monitor and control your VMs & containers from your phone.

Try Free

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 sparseSingle file, thin provisioneddisk.vmdk
Monolithic flatSingle file, thick provisioneddisk.vmdk + disk-flat.vmdk
Split sparseMultiple 2 GB files, thindisk.vmdk + disk-s001.vmdk, disk-s002.vmdk...
Split flatMultiple 2 GB files, thickdisk.vmdk + disk-f001.vmdk, disk-f002.vmdk...
VMFS thinESXi datastore formatdisk.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-agent and 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.

ProxmoxR

Manage Proxmox from your phone

Monitor, control, and manage your clusters on the go.

Free 7-day trial · No credit card required