V tomto článku vás provedu kroky k exportu disku a konfigurací virtuálního počítače KVM a jejich pozdějšímu importu do stejného počítače nebo do jiného počítače. Také vám ukážu, jak exportovat a importovat virtuální stroje KVM pomocí skriptu Bash.
Úvod
Nedávno jsem změnil svůj hypervizor z Oracle VirtualBox na KVM pro jeho nativní funkce a výkon. Pokud jsem testoval, virtuální stroje KVM běží rychle ve srovnání s virtuálními počítači Virtualbox.
Vždy je důležité pravidelně zálohovat vaše virtuální počítače. Takže v případě jakékoli nesrovnalosti můžete k obnovení virtuálního stroje použít záložní bitovou kopii. Export a import virtuálních počítačů KVM je dvoufázový proces.
- Nejprve musíte zkontrolovat, kde jsou uloženy obrazy disku, a zkopírovat obraz disku do umístění zálohy.
- Zadruhé exportujte konfigurace stroje, aby je bylo možné později použít k vytvoření domény.
Definice virtuálního stroje
Existují dva způsoby, jak získat informace o doméně virtuálního stroje. Buď můžete použít "Virsh" program nebo použijte "Virt-manager" .
Název virtuálního počítače můžete získat od správce Virt nebo spuštěním následujícího virsh
příkaz.
$ 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
Následující příkaz můžete spustit a zobrazit informace o celé doméně (Konfigurace virtuálního počítače) o konkrétním virtuálním počítači. Tím se zobrazí výsledek ve formátu XML.
$ virsh dumpxml vm_name | less
$ virsh dumpxml ubuntu20.04-clone | less
Konkrétní konfiguraci stroje můžete také získat propojením s grep příkaz. Řekněme, že pokud chcete zobrazit přidělení paměti, můžete spustit následující příkaz.
$ virsh dumpxml ubuntu20.04-clone | grep -i "MEMORY" <memory unit='KiB'>5632000</memory> <currentMemory unit='KiB'>5632000</currentMemory>
Pokud dáváte přednost Virt-manageru, můžete tyto informace získat ve formátu XML stisknutím karty XML v části „zobrazit virtuální hardware“.
Umístění disku virtuálního počítače
Disky virtuálního stroje jsou vytvořeny v qcow2
formát. Ve výchozím nastavení je disk virtuálního počítače uložen v /var/lib/libvirt/images/
adresář, pokud jste disk výslovně neuložili do samostatného adresáře.
Spusťte následující příkaz a získejte cestu k adresáři disku.
$ virsh dumpxml ubuntu20.04-clone | grep -i "source" <source file='/var/lib/libvirt/images/ubuntu20.04-clone.qcow2'/>
Ve správci Virt v části Přehled sekce, zkontrolujte <disk>
sekce.
Pokud jste k ukládání obrazů disků použili různé cesty a chcete znát všechny cesty k disku VM, můžete spustit následující fragment z terminálu nebo ze skriptu shellu.
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
Exportovat informace o doméně a zkopírovat disk
Nyní víte, jak získat cestu k disku a informace o doméně, je čas exportovat informace o doméně pro virtuální počítač a zkopírovat obraz disku do jiného umístění.
Chcete-li exportovat informace o doméně, můžete spustit následující "virsh dumpxml
“ a uložte výstup do XML
soubor.
$ virsh dumpxml vm-name > /path/to/xm_file.xml
$ virsh dumpxml ubuntu20.04-clone > ~/Documents/ubuntu.xml
Nyní zkopírujte obraz disku na jiné místo, které lze použít později.
$ sudo cp /var/lib/libvirt/images/ubuntu20.04-clone.qcow2 ~/Documents/
Proces exportu je dokončen. Je to tak jednoduché!
Pozor: Měli byste použít sudo
nebo zkopírujte disk s root
uživatel, protože disk je ve vlastnictví uživatele root.
Importovat virtuální stroj KVM
Chcete-li importovat virtuální stroj KVM, musíte definovat doménu z exportovaného souboru XML spuštěním následujícího příkazu.
$ virsh define --file <path-to-xml-file>
$ virsh define –file ~/Documents/ubuntu.xml
Nyní můžete zkontrolovat Virt-manager nebo spustit virsh
by měla být doména úspěšně vytvořena. Musíte zkopírovat obraz disku do cesty k adresáři, která je definována v souboru XML. V mém případě je to výchozí umístění /var/lib/libvirt/images/
.
$ sudo cp ~/Documents/ubuntu20.04-clone.qcow2 /var/lib/libvirt/images/
Proces importu je dokončen. Nyní můžete spustit virtuální počítač.
Bash skript pro export a import virtuálních strojů KVM
Vytvořil jsem bash skript, který se postará o export všech konfiguračních a diskových obrazů. Pokud máte zájem, můžete se na tento skript podívat v mém úložišti GitHub . Vaše návrhy na vylepšení tohoto skriptu budou velmi oceněny.
#!/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
Použití tohoto skriptu je následující.
Ke klonování podstaty z GitHubu můžete spustit následující příkaz.
$ git clone https://gist.github.com/d6c671597592fe5634a39b7974bc8029.git
Skript provádí zálohu (tj. export) i obnovu (tj. obnovení).
Exportujeme virtuální stroj KVM pomocí tohoto skriptu, jak je uvedeno níže.
$ sudo bash kvm_export_import.sh export
Musíte zadat cestu k adresáři, kam se má soubor XML a obraz disku zkopírovat/exportovat. Nepřidávejte koncové /
lomítko při zadávání exportního adresáře. Nejprve zkopíruje obraz disku (.qcow2
) a spusťte soubor "virsh dumpxml
" k exportu všech konfigurací.
Níže uvedený obrázek ukazuje, jak export funguje.
Když předáte "import
" jako argument nejprve zkopíruje obraz disku do výchozího umístění /var/lib/libvirt/
a spusťte "virsh define
" proti všem exportovaným souborům XML.
$ sudo bash kvm_export_import.sh import
Závěr
V tomto článku jsem vám ukázal, jak exportovat virtuální stroj KVM a importovat je do stejného nebo jiného stroje. Vytvoření virtuálního stroje od začátku je časově náročný úkol. Správná strategie, kterou je třeba dodržovat, abyste ochránili snímky před ztrátou v jakékoli situaci. Pokud máte nějaké triky nebo tipy pro tento článek, rádi bychom je od vás slyšeli.
Doufám, že to pomůže.