Skip to content
Vladimir Chavkov
Go back

VMware to Proxmox Migration: Complete Transition Guide

Edit page

VMware to Proxmox Migration: Complete Transition Guide

With VMware’s changing licensing model and rising costs following Broadcom’s acquisition, many organizations are evaluating alternatives. Proxmox Virtual Environment (VE) offers a compelling open-source alternative with enterprise features, no licensing costs, and excellent performance. This comprehensive guide covers strategies, tools, and best practices for migrating from VMware vSphere to Proxmox VE.

Why Migrate to Proxmox?

Cost Comparison

AspectVMware vSphereProxmox VE
License Cost$995-$5,995+ per CPUFree (Open Source)
SupportRequired with licenseOptional, affordable
Annual Maintenance20-25% of licenseSubscription-based
3-Year TCO (100 VMs)$150,000-$500,000+$0-$50,000 (optional support)
FeaturesFullComparable
Vendor Lock-inHighLow

Feature Comparison

FeatureVMware vSphereProxmox VE
HypervisorESXi (Type 1)KVM/LXC (Type 1)
Live MigrationvMotionYes (built-in)
HA ClusteringYesYes
StorageVMFS, vSANZFS, Ceph, LVM
NetworkingvSwitch, NSXLinux Bridge, OVS
BackupvSphere ReplicationProxmox Backup Server
APIvSphere APIREST API
Web UIvCenterBuilt-in Web UI
ContainersNoLXC native
CostHighFree

Migration Planning

Pre-Migration Assessment

Terminal window
# Inventory collection script for VMware
# Run on vCenter or ESXi host
# Get VM list
Get-VM | Select-Object Name, PowerState, NumCpu, MemoryGB, @{N="DiskGB";E={(Get-HardDisk -VM $_).CapacityGB | Measure-Object -Sum).Sum}} | Export-Csv vm-inventory.csv
# Get network information
Get-VM | Get-NetworkAdapter | Select-Object Parent, Name, NetworkName, MacAddress | Export-Csv vm-networks.csv
# Get storage information
Get-Datastore | Select-Object Name, Type, CapacityGB, FreeSpaceGB | Export-Csv datastores.csv
# Get cluster configuration
Get-Cluster | Select-Object Name, HAEnabled, DRSEnabled | Export-Csv clusters.csv

Migration Strategy Options

1. Cold Migration (Offline)

Advantages:
- Simplest approach
- No data sync issues
- Clean state
Disadvantages:
- Downtime required
- Not suitable for 24/7 services
Best For:
- Non-critical VMs
- Scheduled maintenance windows
- Development/test environments

2. Live Migration (Minimal Downtime)

Advantages:
- Minimal downtime (seconds)
- Continuous service
- Gradual transition
Disadvantages:
- More complex
- Requires network bandwidth
- Potential sync issues
Best For:
- Production systems
- 24/7 services
- Critical applications

3. Parallel Running (Coexistence)

Advantages:
- Zero risk
- Full testing period
- Easy rollback
Disadvantages:
- Double infrastructure
- Higher cost short-term
- More management
Best For:
- Large migrations
- Risk-averse organizations
- Critical infrastructure

Proxmox Cluster Setup

Install Proxmox VE

Terminal window
# Download Proxmox VE ISO
wget https://www.proxmox.com/en/downloads/proxmox-virtual-environment/iso
# Install on bare metal
# Follow installer wizard:
# 1. Select target disk
# 2. Configure network (static IP recommended)
# 3. Set hostname (FQDN)
# 4. Set root password
# 5. Configure management interface
# Post-installation configuration
# Access web UI: https://proxmox-ip:8006
# Update system
apt update && apt full-upgrade -y
# Configure enterprise repository (with subscription)
# Or use no-subscription repository
echo "deb http://download.proxmox.com/debian/pve bookworm pve-no-subscription" > /etc/apt/sources.list.d/pve-no-subscription.list
rm /etc/apt/sources.list.d/pve-enterprise.list
apt update
# Install useful tools
apt install -y vim htop iotop ifupdown2

Create Proxmox Cluster

Terminal window
# On first node (will be cluster master)
pvecm create production-cluster
# Get cluster join information
pvecm status
# On additional nodes
pvecm add <first-node-ip>
# Enter root password when prompted
# Verify cluster
pvecm nodes
pvecm status
# Configure quorum (3+ nodes recommended)
pvecm expected 3

Storage Configuration

Terminal window
# ZFS storage (recommended for performance)
zpool create -o ashift=12 \
-O compression=lz4 \
-O atime=off \
-O relatime=on \
-m /tank \
tank raidz2 /dev/sdb /dev/sdc /dev/sdd /dev/sde /dev/sdf
# Add ZFS to Proxmox
pvesm add zfspool tank -pool tank
# Or Ceph for distributed storage
pveceph install --repository no-subscription
pveceph init --network 10.0.2.0/24
pveceph createmon
pveceph createmgr
# Create OSDs
pveceph createosd /dev/sdb
pveceph createosd /dev/sdc
pveceph createosd /dev/sdd
# Create Ceph pool
pveceph pool create vm-storage --size 3
# Add Ceph to Proxmox
pvesm add rbd ceph-storage --pool vm-storage --content images,rootdir
# Or NFS storage
pvesm add nfs nfs-storage \
--server 192.168.1.100 \
--export /export/proxmox \
--content images,iso,vztmpl

Network Configuration

Terminal window
# Configure Linux bridge
cat >> /etc/network/interfaces << 'EOF'
# VM Bridge
auto vmbr1
iface vmbr1 inet static
address 192.168.100.1/24
bridge-ports none
bridge-stp off
bridge-fd 0
# VLAN-aware bridge
auto vmbr2
iface vmbr2 inet manual
bridge-ports bond0
bridge-stp off
bridge-fd 0
bridge-vlan-aware yes
bridge-vids 2-4094
EOF
# Apply network configuration
ifreload -a
# Or Open vSwitch
apt install -y openvswitch-switch
ovs-vsctl add-br vmbr0

Migration Methods

Method 1: OVF Export/Import

Terminal window
# On VMware: Export VM to OVF
# UI: Right-click VM → Export → Export OVF Template
# Or via PowerCLI
Get-VM -Name "myvm" | Export-VApp -Destination "C:\exports\myvm.ovf" -Format OVF
# Transfer OVF files to Proxmox server
scp -r myvm.ovf root@proxmox:/var/lib/vz/template/
# On Proxmox: Convert VMDK to QCOW2
cd /var/lib/vz/template/myvm/
qemu-img convert -f vmdk -O qcow2 myvm-disk1.vmdk myvm-disk1.qcow2
# Create VM on Proxmox
qm create 100 \
--name myvm \
--memory 4096 \
--cores 2 \
--net0 virtio,bridge=vmbr0
# Import disk
qm importdisk 100 myvm-disk1.qcow2 local-zfs
# Attach disk to VM
qm set 100 --scsi0 local-zfs:vm-100-disk-0
# Set boot order
qm set 100 --boot order=scsi0
# Start VM
qm start 100

Method 2: virt-v2v (Automated)

Terminal window
# Install virt-v2v on migration server
apt install -y virt-v2v libguestfs-tools
# Convert VMware VM to KVM
virt-v2v \
-ic vpx://root@vcenter.example.com/Datacenter/Cluster/esxi01.example.com?no_verify=1 \
-os pool:default \
-of qcow2 \
-on myvm-proxmox \
myvm
# Import to Proxmox
qm importdisk 101 /var/lib/libvirt/images/myvm-proxmox-sda local-zfs
qm set 101 --scsi0 local-zfs:vm-101-disk-0
qm set 101 --boot order=scsi0
qm set 101 --name myvm
qm set 101 --memory 4096
qm set 101 --cores 2
qm set 101 --net0 virtio,bridge=vmbr0

Method 3: Storage-Level Migration (Best for Live)

Terminal window
# Using Proxmox import wizard
# 1. Create new VM with same specs
# 2. Don't create disk
# 3. Upload VMDK to Proxmox storage
# 4. Attach uploaded disk to VM
# Automated script
#!/bin/bash
VMID=102
VMNAME="production-db"
CORES=4
MEMORY=8192
DISK_SIZE=100G
VMDK_PATH="/path/to/vm-disk.vmdk"
# Create VM
qm create $VMID \
--name $VMNAME \
--memory $MEMORY \
--cores $CORES \
--net0 virtio,bridge=vmbr0 \
--ostype l26 \
--cpu host
# Convert and import disk
qemu-img convert -f vmdk -O qcow2 $VMDK_PATH /tmp/temp-disk.qcow2
qm importdisk $VMID /tmp/temp-disk.qcow2 local-zfs
# Attach disk
qm set $VMID --scsi0 local-zfs:vm-$VMID-disk-0
# Configure boot
qm set $VMID --boot order=scsi0
# Install QEMU guest agent
qm set $VMID --agent enabled=1
# Start VM
qm start $VMID

Method 4: Bulk Migration Script

#!/bin/bash
# bulk-migrate.sh - Migrate multiple VMs from VMware to Proxmox
VCENTER="vcenter.example.com"
VCENTER_USER="administrator@vsphere.local"
VCENTER_PASS="password"
PROXMOX_HOST="proxmox01"
PROXMOX_STORAGE="local-zfs"
START_VMID=200
# VM list (name,cores,memory_gb)
VMS=(
"web-server-01,2,4"
"db-server-01,4,16"
"app-server-01,4,8"
)
# Function to migrate single VM
migrate_vm() {
local vm_name=$1
local cores=$2
local memory=$3
local vmid=$4
echo "Migrating $vm_name (VMID: $vmid)..."
# Export from VMware
ovftool \
"vi://$VCENTER_USER:$VCENTER_PASS@$VCENTER/$vm_name" \
"/tmp/exports/$vm_name.ovf"
# Convert VMDK to QCOW2
qemu-img convert -f vmdk -O qcow2 \
"/tmp/exports/$vm_name-disk1.vmdk" \
"/tmp/exports/$vm_name.qcow2"
# Create VM on Proxmox
ssh root@$PROXMOX_HOST "qm create $vmid \
--name $vm_name \
--memory $((memory * 1024)) \
--cores $cores \
--net0 virtio,bridge=vmbr0 \
--agent enabled=1"
# Copy disk to Proxmox
scp "/tmp/exports/$vm_name.qcow2" \
root@$PROXMOX_HOST:/tmp/
# Import disk
ssh root@$PROXMOX_HOST "qm importdisk $vmid \
/tmp/$vm_name.qcow2 $PROXMOX_STORAGE"
# Attach disk
ssh root@$PROXMOX_HOST "qm set $vmid \
--scsi0 $PROXMOX_STORAGE:vm-$vmid-disk-0 \
--boot order=scsi0"
# Cleanup
rm -rf "/tmp/exports/$vm_name"*
ssh root@$PROXMOX_HOST "rm /tmp/$vm_name.qcow2"
echo "✓ Migrated $vm_name"
}
# Main migration loop
VMID=$START_VMID
for vm in "${VMS[@]}"; do
IFS=',' read -r name cores memory <<< "$vm"
migrate_vm "$name" "$cores" "$memory" "$VMID"
((VMID++))
done
echo "Migration complete!"

Post-Migration Configuration

Install QEMU Guest Agent

Terminal window
# On Linux VMs
apt install -y qemu-guest-agent # Debian/Ubuntu
yum install -y qemu-guest-agent # RHEL/CentOS
systemctl enable --now qemu-guest-agent
# On Windows VMs
# Download and install virtio-win drivers
# https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/
# Enable in Proxmox
qm set <vmid> --agent enabled=1

Network Optimization

Terminal window
# Change network adapter to VirtIO
qm set 100 --net0 virtio,bridge=vmbr0,firewall=1
# Enable multiqueue
qm set 100 --net0 virtio,bridge=vmbr0,queues=4
# Configure SR-IOV (if supported)
qm set 100 --hostpci0 0000:01:00.0

Storage Optimization

Terminal window
# Enable discard for SSD TRIM
qm set 100 --scsi0 local-zfs:vm-100-disk-0,discard=on
# Enable SSD emulation
qm set 100 --scsi0 local-zfs:vm-100-disk-0,ssd=1
# Enable IO thread
qm set 100 --scsi0 local-zfs:vm-100-disk-0,iothread=1
# Set cache mode
qm set 100 --scsi0 local-zfs:vm-100-disk-0,cache=writeback

Performance Tuning

Terminal window
# CPU type (best performance)
qm set 100 --cpu host
# Enable NUMA
qm set 100 --numa 1
# Balloon driver
qm set 100 --balloon 2048
# Set CPU units (prioritization)
qm set 100 --cpuunits 2048 # Higher = more priority

High Availability Setup

Terminal window
# Configure HA for VM
ha-manager add vm:100
# Set migration settings
ha-manager set vm:100 --state started --max_restart 3 --max_relocate 3
# Configure fencing
pvecm expected 3
# Add watchdog (recommended for HA)
qm set 100 --watchdog model=i6300esb,action=reset

Backup Configuration

Terminal window
# Install Proxmox Backup Server (optional)
# Or configure vzdump backups
# Create backup schedule
cat > /etc/pve/vzdump.cron << 'EOF'
# Backup all VMs daily at 2 AM
0 2 * * * root vzdump --quiet --mode snapshot --compress zstd --storage backup-nfs --all 1
EOF
# Manual backup
vzdump 100 --storage backup-nfs --mode snapshot --compress zstd
# Restore from backup
qmrestore /path/to/backup/vzdump-qemu-100.vma.zst 100 --storage local-zfs

Migration Checklist

Pre-Migration

During Migration

Post-Migration

Common Issues and Solutions

Issue: Poor Disk Performance

Terminal window
# Solution: Optimize storage settings
qm set 100 --scsi0 local-zfs:vm-100-disk-0,cache=writeback,iothread=1,discard=on,ssd=1
# Check if virtio-scsi is used
qm config 100 | grep scsi
# Use virtio-blk for better performance (if no snapshots needed)
qm set 100 --virtio0 local-zfs:vm-100-disk-0

Issue: Network Performance Problems

Terminal window
# Solution: Enable multiqueue
qm set 100 --net0 virtio,bridge=vmbr0,queues=4
# Verify inside VM (Linux)
ethtool -l eth0
# Adjust offloading
ethtool -K eth0 gso off gro off tso off

Issue: Windows VM Boot Issues

Terminal window
# Solution: Use IDE for Windows boot disk initially
qm set 100 --ide0 local-zfs:vm-100-disk-0
# After boot, install virtio drivers
# Then switch to SCSI/VirtIO

Cost Savings Analysis

Example: 100 VM Environment
VMware vSphere:
- vSphere Standard: $200,000
- Annual Support (20%): $40,000/year
- 3-year TCO: $320,000
Proxmox VE:
- Software License: $0
- Optional Support (100 nodes): $8,000/year
- 3-year TCO: $24,000
Total Savings: $296,000 (92.5% reduction)

Conclusion

Migrating from VMware to Proxmox offers substantial cost savings while maintaining enterprise features and performance. With careful planning, the right tools, and a phased approach, organizations can successfully transition to Proxmox with minimal risk and downtime.


Master Proxmox and virtualization with our infrastructure training programs. Contact us for migration assistance and custom training.


Edit page
Share this post on:

Previous Post
Platform Engineering: Complete Guide to Internal Developer Platforms
Next Post
Apache Kafka: Complete Event Streaming Platform Guide