GNU/Linux >> LINUX-Kenntnisse >  >> Linux

So exportieren und importieren Sie virtuelle KVM-Maschinen unter Linux

In diesem Artikel werde ich Sie durch die Schritte zum Exportieren der Festplatte und der Konfigurationen der virtuellen KVM-Maschine führen und sie später auf dieselbe Maschine oder auf eine andere Maschine importieren. Ich werde Ihnen auch zeigen, wie Sie virtuelle KVM-Maschinen mit einem Bash-Skript exportieren und importieren.

Einführung

Kürzlich habe ich meinen Hypervisor von Oracle VirtualBox umgestellt zu KVM für seine nativen Funktionen und Leistung. Soweit ich getestet habe, laufen die virtuellen KVM-Maschinen im Vergleich zu Virtualbox-VMs schnell.

Es ist immer wichtig, Ihre VMs regelmäßig zu sichern. Im Falle einer Diskrepanz können Sie also das Backup-Image verwenden, um die virtuelle Maschine wiederherzustellen. Das Exportieren und Importieren virtueller KVM-Maschinen ist ein zweistufiger Prozess.

  • Zuerst müssen Sie überprüfen, wo die Disk-Images gespeichert sind, und das Disk-Image an einen Sicherungsort kopieren.
  • Exportieren Sie zweitens die Maschinenkonfigurationen, damit sie später zum Erstellen der Domäne verwendet werden können.

Virtuelle Maschinendefinition

Es gibt zwei Möglichkeiten, Domäneninformationen der virtuellen Maschine abzurufen. Entweder Sie können den "Virsh" verwenden Programm oder verwenden Sie "Virt-manager" .

Den Namen der VM erhalten Sie vom Virt-Manager oder durch Ausführen des folgenden virsh Befehl.

$ virsh list --all
 Id   Name                State
------------------------------------
 -    Linux_Mint_20       shut off
 -    mxlinux             shut off
 -    popos_21_10         shut off
 -    rocky_linux_8       shut off
 -    ubuntu20.04         shut off
 -    ubuntu20.04-clone   shut off

Sie können den folgenden Befehl ausführen, um vollständige Domäneninformationen (VM-Konfiguration) zu einer bestimmten virtuellen Maschine anzuzeigen. Dadurch wird das Ergebnis im XML-Format angezeigt.

$ virsh dumpxml vm_name | less
$ virsh dumpxml ubuntu20.04-clone | less

Sie können auch eine bestimmte Maschinenkonfiguration abrufen, indem Sie sie an grep weiterleiten Befehl. Nehmen wir an, wenn Sie die Speicherzuweisung anzeigen möchten, können Sie den folgenden Befehl ausführen.

$ virsh dumpxml ubuntu20.04-clone | grep -i "MEMORY"
  <memory unit='KiB'>5632000</memory>
  <currentMemory unit='KiB'>5632000</currentMemory>

Wenn Sie den Virt-Manager bevorzugen, können Sie diese Informationen im XML-Format abrufen, indem Sie auf die Registerkarte XML klicken im Abschnitt "Virtuelle Hardware anzeigen".

Festplattenspeicherort der virtuellen Maschine

Die Festplatten der virtuellen Maschine werden in qcow2 erstellt Format. Standardmäßig wird die Festplatte der virtuellen Maschine im Verzeichnis /var/lib/libvirt/images/ gespeichert Verzeichnis, es sei denn, Sie haben die Festplatte ausdrücklich in einem separaten Verzeichnis gespeichert.

Führen Sie den folgenden Befehl aus, um den Verzeichnispfad der Festplatte abzurufen.

$ virsh dumpxml ubuntu20.04-clone | grep -i "source"
      <source file='/var/lib/libvirt/images/ubuntu20.04-clone.qcow2'/>

Aus dem Virt-Manager, unter der Übersicht Suchen Sie im Abschnitt nach <disk> Abschnitt.

Wenn Sie unterschiedliche Pfade zum Speichern der Disk-Images verwendet haben und alle VM-Disk-Pfade kennen möchten, können Sie das folgende Snippet vom Terminal oder vom Shell-Skript ausführen.

VM_NAMES=($(virsh list --all| awk '(NR>2)' | awk '{ print $2 }'))

for VM in ${VM_NAMES[@]}; do
  DISK_PATH=$(virsh dumpxml ${VM} | grep -i "<source file")
  echo "${VM} ${DISK_PATH}"
done | column -t 

Domäneninformationen exportieren und Datenträger kopieren

Nachdem Sie nun wissen, wie Sie den Festplattenpfad und die Domäneninformationen erhalten, ist es an der Zeit, die Domäneninformationen für eine VM zu exportieren und das Festplatten-Image an einen anderen Speicherort zu kopieren.

Um die Domäneninformationen zu exportieren, können Sie das folgende „virsh dumpxml“ ausführen " und speichern Sie die Ausgabe in einem XML Datei.

$ virsh dumpxml vm-name > /path/to/xm_file.xml
$ virsh dumpxml ubuntu20.04-clone > ~/Documents/ubuntu.xml

Kopieren Sie nun das Disk-Image an einen anderen Ort, der später verwendet werden kann.

$ sudo cp /var/lib/libvirt/images/ubuntu20.04-clone.qcow2 ~/Documents/

Der Exportvorgang ist abgeschlossen. So einfach ist das!

Vorsicht: Sie sollten sudo verwenden oder kopieren Sie die Diskette mit dem root Benutzer, da die Festplatte dem Root-Benutzer gehört.

Virtuelle KVM-Maschine importieren

Um die virtuelle KVM-Maschine zu importieren, müssen Sie die Domäne aus der exportierten XML-Datei definieren, indem Sie den folgenden Befehl ausführen.

$ virsh define --file <path-to-xml-file>
$ virsh define –file ~/Documents/ubuntu.xml

Jetzt können Sie den Virt-Manager überprüfen oder virsh ausführen Befehl, sollte die Domäne erfolgreich erstellt werden. Sie müssen das Disk-Image in den Verzeichnispfad kopieren, der in der XML-Datei definiert ist. In meinem Fall ist es der Standardspeicherort /var/lib/libvirt/images/ .

$ sudo cp ~/Documents/ubuntu20.04-clone.qcow2 /var/lib/libvirt/images/

Der Importvorgang ist abgeschlossen. Jetzt können Sie die virtuelle Maschine starten.

Ein Bash-Skript zum Exportieren und Importieren von virtuellen KVM-Maschinen

Ich habe ein Bash-Skript erstellt, das sich um den Export aller Konfigurations- und Disk-Images kümmert. Wenn Sie interessiert sind, können Sie sich dieses Skript in meinem GitHub-Repository ansehen . Ihre Vorschläge zur Verbesserung dieses Skripts werden sehr geschätzt.

#!/usr/bin/env bash

# ----------------------------------------------------------------------------------------------------
# AUTHOR   : KARTHICK S
# PURPOSE  : THIS SCRIPT WILL EXPORT/IMPORT THE CONFIG AND VM DISK. 
#
# usage: 
# export function will take care of exporting the necessary for all VM. Run as "<scriptname.sh> export"
# import function will take care of importing the necessary for all VM. Run as "<scriptname.sh> import"
#
# NOTE: Do not add trailing / for the directory when giving export and import path.
#------------------------------------------------------------------------------------------------------

# Trigger the script with root user or exit.
if [[ ${UID} -ne 0 ]]; then
  echo -e "[EXIT] - Run the script as root user or with sudo privilege..."
  exit
fi

function export_vm(){
  
  # Get the export location.
  read -p "Provide the directory path where disk and config files to be exported: " EXPORT_LOCATION

  # Create the destination directory if not exists.
  [[ -d ${EXPORT_LOCATION} ]] || mkdir -p ${EXPORT_LOCATION}

  # Exporting the config using virsh dumpxml command.
  VM_NAMES=($(virsh list --all| awk '(NR>2)' | awk '{ print $2 }'))
  for VM in ${VM_NAMES[@]}; do
    virsh dumpxml ${VM} > ${EXPORT_LOCATION}/${VM}.xml
  done

  # Using rsync copy the entire directory from default location.
  echo -e "\n[ Copying disk images ]\n" && sudo rsync -avxp --progress /var/lib/libvirt/images ${EXPORT_LOCATION}

  echo -e "\n[ Exported Files ] \n" && ls -lR ${EXPORT_LOCATION}

} 

function import_vm(){

  # Get the source location.
  read -p "Provide the directory path where disk and config files are stored: " SOURCE_LOCATION

  # Throws error if directory is not available and exit.
  [[ -d ${SOURCE_LOCATION} ]] || { echo "Directory not available"; exit 1 ; }

  # Copy all the files to default disk location.
  echo -e "[ Copying disk images ]\n" && sudo rsync -avxp --progress ${SOURCE_LOCATION}/images /var/lib/libvirt/

  if [[ $? -eq 0 ]]; then
    # Define VM
    echo -e "\n[ Defining VM ]\n"
    for XML_FILE in ${SOURCE_LOCATION}/*.xml; do
      virsh define --file ${XML_FILE} 
    done
    echo -e "\n[ Imported VM List ]\n" && virsh list --all
  fi

}

case $1 in
 export ) export_vm ;;
 import ) import_vm ;;
 *) echo -e "USAGE : 
kvm_export_import.sh export - Export config and disk
kvm_export_import.sh import - Define VM and copy the disk"; exit 
esac

Die Verwendung dieses Skripts ist wie folgt.

Sie können den folgenden Befehl ausführen, um den Kern von GitHub zu klonen.

$ git clone https://gist.github.com/d6c671597592fe5634a39b7974bc8029.git

Das Skript führt sowohl Backups (d. h. Export) als auch Restore (d. h. Restore) durch.

Lassen Sie uns die virtuelle KVM-Maschine mit diesem Skript wie unten exportieren.

$ sudo bash kvm_export_import.sh export

Sie müssen den Verzeichnispfad angeben, in den die XML-Datei und das Disk-Image kopiert/exportiert werden sollen. Fügen Sie kein nachgestelltes / hinzu Schrägstrich bei Angabe des Exportverzeichnisses. Es kopiert zuerst das Disk-Image (.qcow2 ) und führen Sie die Datei „virsh dumpxml " Befehl zum Exportieren aller Konfigurationen.

Das folgende Bild zeigt, wie der Export funktioniert.

Wenn Sie "import " als Argument kopiert es zuerst das Disk-Image an den Standardspeicherort /var/lib/libvirt/ und führen Sie die "virsh define "-Befehl gegen alle Export-XML-Dateien.

$ sudo bash kvm_export_import.sh import

Schlussfolgerung

In diesem Artikel habe ich Ihnen gezeigt, wie Sie die virtuelle KVM-Maschine exportieren und in dieselbe oder eine andere Maschine importieren. Das Erstellen der virtuellen Maschine von Grund auf ist eine zeitaufwändige Aufgabe. Also eine richtige Strategie, die befolgt werden muss, um die Bilder vor dem Verlust aufgrund irgendeiner Situation zu schützen. Wenn Sie irgendwelche Tricks oder Tipps für diesen Artikel haben, würden wir uns freuen, sie von Ihnen zu hören.

Hoffe das hilft.


Linux
  1. So entfernen Sie KVM-basierte virtuelle Maschinen unter Redhat Linux

  2. So klonen Sie KVM-basierte virtuelle Maschinen unter Redhat Linux

  3. So exportieren und importieren Sie DNS-Einstellungen in CloudFlare

  4. Quickemu – Führen Sie virtuelle Windows-, macOS- und Linux-Maschinen aus

  5. So fügen Sie Arbeitsspeicher, vCPU und Festplatte zu einer virtuellen Linux-KVM-Maschine hinzu

So installieren Sie KVM und erstellen virtuelle Maschinen unter Ubuntu 16.04 LTS

So installieren und konfigurieren Sie KVM unter Ubuntu Linux

So erstellen und verwalten Sie virtuelle Maschinen in KVM

So importieren Sie einen VM-Export auf Windows Server 2012

So überprüfen Sie die Größe von Dateien und Verzeichnissen unter Linux

So erhöhen Sie den virtuellen Speicherplatz der VM auf VirtualBox und VMware