1 min read

Migration VMware nach KVM/QEMU

Mit dem folgenden Script lassen sich mehrere virtuelle Maschinen von VMware zu Proxmox oder QMEMU basierten Systemen migrieren.

#!/bin/bash

# Liste der VM-Namen
VM_NAMES=("VM_Name_1" "VM_Name_2" "VM_Name_3")

SOURCE_SERVER="root@source_server_ip"
TARGET_STORAGE="local-lvm"  # Hier den gewünschten Zielspeicher angeben
TEMP_DIR="/tmp"  # Hier den Pfad zum temporären Verzeichnis festlegen
DELETE_TEMP_FILE=true  # Setzen Sie auf "false", wenn die temporäre Datei nicht gelöscht werden soll

# Funktion zur Ermittlung der nächsten freien VMID
get_next_free_vmid() {
  local vmids=($(qm list | awk '{if(NR>1)print $1}'))
  local next_vmid=100  # Starten Sie bei VMID 100 oder passen Sie dies an Ihre Bedürfnisse an

  while [[ " ${vmids[@]} " =~ " $next_vmid " ]]; do
    ((next_vmid++))
  done

  echo $next_vmid
}

# Schritt 2: Ermitteln des BIOS-Typs (UEFI oder nicht) und Import für jede VM
for VM_NAME in "${VM_NAMES[@]}"; do
    echo "Verarbeite VM: $VM_NAME"
    
    # Manuelle Definition des BIOS-Typs (true für UEFI, false für Legacy)
    UEFI=true  # Ändern Sie dies entsprechend dem BIOS-Typ Ihrer VM

    # Schritt 1: Exportieren der VM von VMware mit ovftool
    echo "Schritt 1: Exportieren der VM von VMware mit ovftool"
    ovftool vi://$SOURCE_SERVER/$VM_NAME $TEMP_DIR/$VM_NAME.ova

    # Schritt 2: Importieren der VM in Proxmox und Ermitteln der nächsten freien VMID
    VMID=$(get_next_free_vmid)
    echo "Schritt 2: Importieren der VM in Proxmox mit VMID $VMID"
    qm importovf $VMID $TEMP_DIR/$VM_NAME.ova $TARGET_STORAGE
    
    # Schritt 3: Setzen des BIOS auf UEFI oder Legacy
    if [[ $UEFI == true ]]; then
        echo "Schritt 3: Setzen des BIOS auf UEFI"
        qm set $VMID --bios ovmf
    else
        echo "Schritt 3: Setzen des BIOS auf Legacy (nicht UEFI)"
        qm set $VMID --bios seabios
    fi

    # Schritt 4: Anpassen der Speichercontroller-Einstellungen (nur für Windows)
    if [[ $UEFI == true ]]; then
        echo "Schritt 4: Anpassen der Speichercontroller-Einstellungen (nur für Windows)"
        sed -i 's/scsi/sata/g' /etc/pve/qemu-server/$VMID.conf
    fi

    # Schritt 5: Starten der VM
    echo "Schritt 5: Starten der VM"
    qm start $VMID

    # Optionale Löschung der temporären Datei
    if [[ $DELETE_TEMP_FILE == true ]]; then
        echo "Bereinigen temporärer Dateien"
        rm $TEMP_DIR/$VM_NAME.ova
    fi

    echo "Migration der VM $VM_NAME abgeschlossen mit VMID $VMID"
done