This guide walks through the complete manual process to migrate a VM from VMware vCenter to Proxmox VE using Everpure vVols. The migration will be to a LVM Thick volume.
Prerequisites
Access Requirements
-
VMware vCenter access with VM power management permissions
-
Everpure FlashArray access (GUI or CLI)
-
SSH root access to all Proxmox cluster nodes
-
The VM to migrate uses Everpure vVol storage
Proxmox Host Group
Ensure all Proxmox nodes are configured in a Everpure host group with proper FC/iSCSI initiators.
Proxmox Multipath Configuration
Ensure dm-multipath is installed and configured. Multipathd should be running and configured to auto-discover and add Everpure LUNs (blacklisting all devices except for Everpure LUNs and find_multipaths = off is recommended). This guide uses /dev/mapper devices for the cloned LUNs. This guide does not cover setting up multipath for general use. That should be done following the Proxmox and Everpure documentation.
Required Packages on Proxmox Nodes
apt-get install -y sg3-utils multipath-tools
Verification
Verify VM is Running on Proxmox Storage
# Check VM config shows storage syntax
cat /etc/pve/qemu-server/${VMID}.conf | grep scsi
# Output should be like:
# scsi0: iscsi:vm-108-disk-0,size=100G
lvs | grep vm-${VMID
Test Proxmox GUI Migration
After successful migration, you should be able to use the Proxmox GUI to:
- Move the VM between nodes
- Move disks between storage pools
- Take snapshots (if available)
Post-Migration Steps
Additional steps to take after migration to fully optimize the VM. These changes require installation of drivers, configuration changes, and a reboot of the VM.
-
Remove VMware Tools
VMware Tools can cause issues with Proxmox. It is recommended to remove VMware Tools and reboot the VM.
-
Install virtio drivers and qemu-guest-agent
The virtio drivers are much more efficient than the emulated devices. The qemu-guest-agent is required for Proxmox to be able to manage the VM (shutdown, reboot, etc.) and for the guest to be able to mount ISOs and have proper time sync.-
virtio drivers
Download the virtio drivers from the Proxmox host to a local directory on the guest. The drivers are located in /usr/share/virtio-win/virtio-win.iso on the Proxmox host. Mount the ISO and install the drivers. A reboot may be required.
-
qemu-guest-agent
The qemu-guest-agent is available in the package manager of most Linux distributions and can be downloaded from the Proxmox host. The package is called qemu-guest-agent. Once installed, the service should be enabled and started. The VM will need to be rebooted for the agent to be available. While rebooting, configure Proxmox to enable the guest agent.
-
-
Change the SCSI controller to virtio-scsi-single
The pvscsi controller can be used, but virtio-scsi-single is recommended for Linux VMs. Windows VMs can use the megasas controller.
-
Change the network adapter to virtio
The vmxnet3 adapter can be used, but virtio is recommended for both Windows and Linux VMs.
-
Enable HA for the VM
HA should be enabled for the VM after the migration, as Proxmox does not do this by default. This can be done in the Proxmox GUI or CLI. The VM should be configured in Proxmox to enable HA.
Troubleshooting
Device has open count > 0 after mirror
Cause: kpartx created partition mappings or LVM activated VGs.
Solution:
# Check what's holding device open
dmsetup ls | grep ${WWN}
# If partition mappings exist:
kpartx -d /dev/mapper/${WWN}
# If LVM VGs are active:
vgs # identify VG
vgchange -an <vg-name>
Mirror job not starting
Cause: QMP socket not found or drive name mismatch.
# Verify VM is running on this node
qm status ${VMID}
# Check QMP socket exists
ls /run/qemu-server/${VMID}.qmp
# Query actual drive names via QMP
# The drive is typically "drive-scsi0" for scsi0 disk
multipath -f fails with "in use"
Cause: Something still has the device open.
Solution:
- Check for LVM:
pvs /dev/mapper/${WWN}* - Check for kpartx:
ls /dev/mapper/ | grep ${WWN} - Check processes:
fuser -v /dev/mapper/${WWN} - If udev-workers are stuck, you may need to reboot the node
Volume connection fails on Everpure
Cause: Host group doesn't exist or initiators not configured.
Solution:
- Verify host group exists in Everpure
- Verify all Proxmox node initiators (FC WWPN or iSCSI IQN) are in the host group
Quick Reference: WWN Construction
Example (replace with your actual serial from Everpure):
Pure Volume Serial: 8EABCB40CC4241B208501082 <- Get this from Pure Storage GUI or purecli
Pure NAA prefix: 3624a9370 <- Always this prefix for Pure Storage
WWN: 3624a93708eabcb40cc4241b208501082 <- prefix + lowercase(serial)
Multipath device: /dev/mapper/3624a93708eabcb40cc4241b208501082
Quick Reference: purecli Commands
# List volumes
purevol list
# Copy/clone volume
purevol copy <source> <dest>
# Connect to host group
purevol connect <volume> --hgroup <group>
# Disconnect from host group
purevol disconnect <volume> --hgroup <group>
# Destroy volume
purevol destroy <volume>
# Eradicate volume (permanent)
purevol eradicate <volume>
# List connections
purevol listconnection <volume>
Quick Reference: QMP Commands
// Negotiate capabilities (required first)
{"execute": "qmp_capabilities"}
// Query block nodes
{"execute": "query-named-block-nodes"}
// Add target block device
{"execute": "blockdev-add", "arguments": {"driver": "raw", "node-name": "target", "file": {"driver": "host_device", "filename": "/dev/vg/lv"}}}
// Start mirror
{"execute": "blockdev-mirror", "arguments": {"job-id": "mirror-scsi0", "device": "drive-scsi0", "target": "target", "sync": "full", "replaces": "source-node"}}
// Query job progress
{"execute": "query-block-jobs"}
// Complete mirror when ready
{"execute": "block-job-complete", "arguments": {"device": "mirror-scsi0"}}
// Delete orphaned source node
{"execute": "blockdev-del", "arguments": {"node-name": "source-node"}}