Tuttavia, reinstallare il sistema operativo all'interno della VM più e più volte diventa faticoso. Ostacola il tuo flusso di lavoro e, quindi, hai bisogno di un modo affidabile per:
- Scatta un'istantanea della tua VM in qualsiasi momento.
- Avere un meccanismo per utilizzare l'istantanea per riportare la VM a uno stato precedentemente funzionante working.
In precedenza ho discusso di come funzionano le istantanee in VirtualBox e questa volta volevo discutere delle istantanee all'interno di Libvirt. Userò QEMU-KVM come hypervisor di backend per la mia installazione di Libvirt. Il tuo caso potrebbe essere diverso, ma la funzionalità e l'interfaccia generali non dovrebbero essere molto diverse, poiché libvirt fa del suo meglio per standardizzare l'interfaccia 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 acquisire e gestire snapshot della tua VM. Le applicazioni GUI come virt-manager e oVirt offrono la funzionalità e puoi persino scrivere script personalizzati per interfacciarti con l'API libvirt che gestisce l'intera gamma di snapshot per te.
Tuttavia, utilizzerò l'interfaccia della riga di comando di virsh per mostrare come gestire le tue macchine virtuali e le loro istantanee. Questa utility viene fornita con quasi tutte le installazioni di libvirt predefinite e dovrebbe essere disponibile su un'ampia 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 a macchine virtuali e contenitori come Domini. Quindi, se vedi un messaggio di errore che suggerisce, ad esempio, "specifica il nome di dominio", devi fornire il nome della tua VM come uno degli argomenti del comando. Usa il seguente comando per elencare tutte le VM sotto la gestione di Libvirt.
$ lista virsh --allPer acquisire uno snapshot di una VM è sufficiente eseguire:
$ virsh snapshot-create VM1E per elencare tutte le istantanee di una determinata VM usa il comando:
$ virsh snapshot-list VM1Nome Tempo di creazione Stato
------------------------------------------------------------
1556533387 2019-04-29 15:53:07 +0530 in esecuzione
Puoi vedere che l'istantanea è stata creata. Per impostazione predefinita, il nome dello snapshot è il suo timestamp di creazione (il numero di secondi dall'epoca UNIX). La colonna Ora di creazione mostra l'ora di creazione in un modo leggibile dall'uomo e la colonna Stato mostra lo stato della VM quando è stata scattata. Poiché questa VM era in esecuzione, anche lo stato dello snapshot è "in esecuzione", ma ciò non significa che lo snapshot stesso sia in esecuzione. Non cambierà con il tempo. Questa funzione è anche nota come snapshot live ed è piuttosto preziosa poiché ti consente di scattare un'istantanea della tua VM senza tempi di inattività. Gli ospiti KVM, almeno, funzionano bene con le istantanee in tempo reale.
Alcuni carichi di lavoro, tuttavia, richiedono l'arresto della VM prima che venga eseguito lo snapshot. Ciò garantisce che i dati nell'istantanea siano coerenti e che non ci siano file scritti a metà o dati mancanti. Se il carico di lavoro in esecuzione nella tua VM ha un IO elevato, probabilmente devi spegnere la VM prima di creare lo snapshot. Creiamone uno in questo modo.
$ virsh spegnimento VM1Il dominio VM1 è in fase di chiusura
$ virsh snapshot-create VM1Istantanea del dominio 1556533868 creata
[email protected]:~# virsh snapshot-list VM1Nome Tempo di creazione Stato
------------------------------------------------------------
1556533387 2019-04-29 15:53:07 +0530 in esecuzione
1556533868 2019-04-29 16:01:08 +0530 spegnimento
$ virsh start VM1
Dominio VM1 avviato
Se vuoi nominare le istantanee qualcosa di diverso da timestamp, usa il comando:
$ virsh snapshot-create-as VM1 --name snap1Nome Tempo di creazione Stato
------------------------------------------------------------
1556533387 2019-04-29 15:53:07 +0530 in esecuzione
1556533868 2019-04-29 16:01:08 +0530 spegnimento
snap1 2019-05-02 22:27:48 +0530 in esecuzione
Ovviamente, non devi chiamarlo snap1, puoi scegliere qualsiasi nome conveniente.
Ripristino da un'istantanea
Scattare un'istantanea non serve a niente se non puoi tornare indietro. Nel caso in cui sia necessario ripristinare un'istantanea, utilizzare semplicemente il comando:
$ virsh snapshot-revert $VMName $snapshot-nameIl nome può essere il timestamp o il nome assegnato dall'utente allo snapshot.
Assicurati che non ci siano dati importanti nella tua VM attuale, o se c'è qualcosa di importante, quindi scatta un'istantanea della tua VM attuale e poi torna a un'istantanea precedente.
Vantaggi di QCOW2
Il meccanismo di copia su scrittura dei file qcow2 consente a ciascuna istantanea di occupare uno spazio molto ridotto. Lo spazio occupato da un'istantanea aumenta nel tempo man mano che l'immagine in esecuzione diverge dall'istantanea. Quindi, finché non riscrivi molti dati, le tue istantanee occuperanno solo pochi MB di spazio di archiviazione.
Significa anche che le istantanee sono anche molto veloci. Poiché, il meccanismo di copia su scrittura deve solo contrassegnare il timestamp quando è stata scattata l'istantanea. I blocchi di dati scritti nel file qcow2 dopo lo snapshot non gli appartengono, ma quelli più vecchi sì. È così semplice. Il mio banco di prova utilizza un disco rigido da 5400 RPM che non è affatto al massimo delle sue prestazioni, ci vogliono comunque meno di pochi secondi per scattare un'istantanea live di una VM su questo disco.
Conclusione
Come con la maggior parte delle utility correlate a libvirt e virsh, la funzionalità snapshot fornisce un'interfaccia molto flessibile con funzionalità di livello aziendale come snapshot live insieme ai vantaggi del meccanismo copy-on-write.
La convenzione di denominazione predefinita rende inoltre più semplice per gli script di shell rimuovere periodicamente le vecchie istantanee e sostituirle con quelle più recenti. Uno dei miei vecchi articoli sugli snapshot OpenZFS e sulle policy snapshot può essere applicato anche al tuo ospite KVM. Per maggiori informazioni sull'utility virsh snapshot puoi usare il comando virsh help snapshot. La pagina di aiuto è molto piccola, precisa e di facile comprensione.