KVM Ospite Snapshot con Libvirt

KVM Ospite Snapshot con Libvirt
Le macchine virtuali hanno molti casi d'uso, uno dei quali è la capacità delle macchine virtuali da utilizzare come macchine di prova. Puoi sperimentare all'interno di una VM, applicare patch e testare gli aggiornamenti prima di fare lo stesso sui sistemi di produzione o della workstation. Puoi anche utilizzare VM usa e getta, che mancano di dati personali o sensibili, per i test di malware come fa la maggior parte della comunità di sicurezza, assicurati solo che la rete della VM sia isolata dal tuo host e LAN.

Tuttavia, diventa noioso per reinstallare il sistema operativo all'interno della VM più e più volte. Ostacola il tuo flusso di lavoro e, quindi, hai bisogno di un modo affidabile per:

  1. Prendi un'istantanea della tua VM in qualsiasi momento.
  2. Avere un meccanismo per utilizzare l'istantanea per ripristinare la VM a uno stato di lavoro precedente.

In precedenza ho discusso di come funzionano le snapshot in VirtualBox e questa volta volevo discutere delle istantanee all'interno di Libvirt. Userò QEMU-KVM come hypervisor backend per la mia installazione di libvirt. Il tuo caso potrebbe differire, ma la funzionalità e l'interfaccia complessive non dovrebbero essere molto diverse, poiché Libvirt fa del suo meglio per standardizzare l'interfaccia del frontend.

Se non hai familiarità con Libvirt e Qemu-Kvm, ecco una guida su come configurare KVM su Debian.

Creazione di un'istantanea

Esistono diversi modi con cui puoi prendere e gestire le istantanee della tua VM. Applicazioni GUI come Virt-Manager e Ovirt offrono la funzionalità e puoi persino scrivere script personalizzati per interfacciarsi con API Libvirt che gestisce l'intera gamma di snapshot per te.

Tuttavia, utilizzerò l'interfaccia della riga di comando VIRSH per mostrare come gestire le VM e le loro istantanee. Questa utilità viene fornita con quasi tutte le installazioni di Libvirt predefinite e dovrebbe essere disponibile in una vasta gamma di distribuzioni.

Per i comandi seguenti assicurati di sostituire il nome della mia VM, VM1, con il nome effettivo della tua VM. Libvirt si riferisce spesso alla macchina virtuale e ai contenitori come Domini. Quindi, se vedi un messaggio di errore che suggerisce, diciamo: "Specifica il nome di dominio", è necessario fornire il nome della tua VM come uno degli argomenti al comando. Utilizzare il comando seguente per elencare tutte le macchine virtuali in Management di Libvirt.

$ virsh list -Tutto

Per fare un'istantanea di una VM semplicemente eseguire:

$ virsh-istantanea-creato VM1

E per elencare tutte le istantanee di una determinata VM usa il comando:

$ virsh-snapshot-list VM1
Nome Creation Time State
------------------------------------------------------------
1556533387 2019-04-29 15:53:07 +0530 in esecuzione

Puoi vedere che l'istantanea è creata. Per impostazione predefinita, il nome dell'istantanea è il suo timestamp di creazione (il numero di secondi da Unix Epoch). La colonna Time Creation mostra il tempo della creazione in modo leggibile umano e la colonna di stato mostra lo stato della VM quando è stato snapshot. Come questa VM era in esecuzione, anche lo stato dell'istantanea è "in esecuzione", ma ciò non significa che l'istantanea stessa è in esecuzione. Non cambierà con il tempo. Questa funzione è anche conosciuta come snapshot dal vivo ed è piuttosto preziosa poiché ti consente di prendere un'istantanea della tua VM senza tempi di inattività. Gli ospiti KVM, almeno, funzionano bene con le istantanee dal vivo.

Alcuni carichi di lavoro, tuttavia, richiedono di fermare la VM prima che venga snapshot. Ciò garantisce che i dati nell'istantanea siano coerenti e che non ci siano file a metà scrittura o dati mancanti. Se il carico di lavoro in esecuzione nella tua VM ha un IO elevato, probabilmente è necessario disattivare la VM prima di creare l'istantanea. Creiamo uno in questo modo.

$ VIRSH Shutdown VM1

Il dominio VM1 viene arrestato

$ virsh-istantanea-creato VM1

Dominio Snapshot 1556533868 Creato

root@deb: ~# virsh-snapshot-list vm1
Nome Creation Time State
------------------------------------------------------------
1556533387 2019-04-29 15:53:07 +0530 in esecuzione
1556533868 2019-04-29 16:01:08 +0530 Shutoff
$ virsh start vm1
Domain VM1 è iniziato

Se vuoi nominare le istantanee qualcosa di diverso da Timestamp, usa il comando:

$ VIRSH Snapshot-Create-As VM1-NAME SNAP1
Nome Creation Time State
------------------------------------------------------------
1556533387 2019-04-29 15:53:07 +0530 in esecuzione
1556533868 2019-04-29 16:01:08 +0530 Shutoff
SNAP1 2019-05-02 22:27:48 +0530 in esecuzione

Ovviamente, non devi nominarlo Snap1, puoi scegliere qualsiasi nome comodo.

Tornando indietro da un'istantanea

Per prendere un'istantanea è inutile se non puoi tornarci. Nel caso in cui è necessario tornare a un'istantanea semplicemente utilizzare il comando:

$ virsh snapshot-revert $ vmname $ snapshot-name

Il nome può essere il timestamp o il nome dell'utente assegnato all'istantanea.

Assicurati che non ci siano dati importanti nella VM attuale o se c'è qualcosa di importante, quindi prendi l'istantanea della VM attuale e poi torna a una vecchia snapshot.

Vantaggi di QCOW2

Il meccanismo di copia-on-write dei file QCOW2 consente a ciascuna istantanea di assumere uno spazio molto piccolo. Lo spazio assunto da un'istantanea aumenta nel tempo mentre l'immagine in esecuzione diverge dall'istantanea. Quindi, finché non riscrivi molti dati, le tue istantanee richiederanno solo pochi MB di archiviazione.

Significa anche che anche le istantanee sono molto veloci. Da allora, il meccanismo di copia-on-write deve solo contrassegnare il timestamp quando è stata presa l'istantanea. I blocchi di dati scritti nel file QCOW2 dopo l'istantanea non ne appartengono, ma quelli più vecchi lo fanno. È così semplice. La mia panchina di test utilizza un disco rigido da 5400 giri / min che non è affatto al culmine delle sue prestazioni, ci vogliono ancora meno di qualche secondo per prendere un'istantanea dal vivo di una VM su questo disco.

Conclusione

Come per la maggior parte delle utility relative a Libvirt e Virsh, la funzionalità di Snapshot fornisce un'interfaccia molto flessibile con funzionalità di grado aziendale come Snapshot in diretta insieme ai vantaggi del meccanismo di copia-on-write.

La convenzione di denominazione predefinita rende anche più facile per gli script di shell rimuovere periodicamente le vecchie istantanee e sostituirle con quelle più recenti. Uno dei miei articoli più vecchi su OpenZFS Snapshot e le politiche di istantanee possono anche essere applicati per il tuo ospite KVM. Per ulteriori informazioni sull'utilità di Snapshot VIRSH è possibile utilizzare il comando di snapshot della Guida Virsh. La pagina di aiuto è molto piccola, precisa e facile da capire.