Det blir dock tråkigt att installera om operativsystemet i din virtuella dator om och om igen. Det hindrar ditt arbetsflöde och därför behöver du ett tillförlitligt sätt att:
- Ta en ögonblicksbild av din virtuella dator vid en viss tidpunkt.
- Ha en mekanism för att använda ögonblicksbilden för att återställa din virtuella dator till ett tidigare fungerande tillstånd.
Jag har tidigare diskuterat hur snapshots fungerar i VirtualBox och den här gången ville jag diskutera snapshots inom Libvirt. Jag kommer att använda QEMU-KVM som backend hypervisor för min Libvirt-installation. Ditt fall kan skilja sig, men den övergripande funktionaliteten och gränssnittet borde inte vara väldigt annorlunda, eftersom libvirt försöker sitt bästa för att standardisera frontend-gränssnittet.
Om du inte känner till libvirt och qemu-kvm, här är en guide om hur du kan ställa in KVM på Debian.
Skapa en ögonblicksbild
Det finns flera sätt som du kan ta och hantera ögonblicksbilder av din virtuella dator. GUI-applikationer som virt-manager och oVirt erbjuder funktionaliteten och du kan till och med skriva anpassade skript för att gränssnitt med libvirt API som hanterar hela utbudet av ögonblicksbilder för dig.
Jag kommer dock att använda virsh kommandoradsgränssnitt för att visa hur du kan hantera dina virtuella datorer och deras ögonblicksbilder. Detta verktyg levereras med nästan alla standard libvirt-installationer och borde vara tillgängligt i ett brett spektrum av distributioner.
För kommandona nedan, se till att ersätta namnet på min virtuella dator, VM1, med det faktiska namnet på din virtuella dator. Libvirt hänvisar ofta till virtuell maskin och containrar som Domäner. Så om du ser ett felmeddelande som föreslår, säg "ange domännamn", måste du ange din virtuella dators namn som ett av argumenten till kommandot. Använd följande kommando för att lista alla virtuella datorer under Libvirts hantering.
$ virsh-lista - alltFör att ta en ögonblicksbild av en virtuell dator kör du bara:
$ virsh snapshot-skapa VM1Och för att lista alla ögonblicksbilder av en viss virtuell dator använder du kommandot:
$ virsh snapshot-lista VM1Namnskapande Tidstillstånd
------------------------------------------------------------
1556533387 2019-04-29 15:53:07 +0530 igång
Du kan se att ögonblicksbilden skapas. Som standard är ögonblicksbildens skapande tidsstämpel (antalet sekunder sedan UNIX-epoken). Kolumnen Skapningstid visar tidpunkten för skapandet på ett mänskligt läsbart sätt och statskolumnen visar tillståndet för den virtuella datorn när den blev ögonblicksbild. Eftersom den här virtuella datorn kördes, körs stillbildens tillstånd också, men det betyder inte att ögonblicksbilden körs. Det kommer inte att förändras med tiden. Den här funktionen kallas också live-ögonblicksbild och den är ganska värdefull eftersom den låter dig ta en ögonblicksbild av din virtuella dator utan driftstopp. KVM-gästerna fungerar åtminstone bra med live-snapshots.
Vissa arbetsbelastningar kräver dock att du stoppar den virtuella datorn innan den snapshots. Detta säkerställer att data i ögonblicksbilden är konsekventa och att det inte finns någon halvskriven fil eller saknas data. Om arbetsbelastningen som körs i din virtuella dator har hög IO måste du antagligen stänga av den virtuella datorn innan du skapar ögonblicksbilden. Låt oss skapa en på detta sätt.
$ virsh avstängning VM1Domän VM1 stängs av
$ virsh snapshot-skapa VM1Domän ögonblicksbild 1556533868 skapad
[e-postskyddad]: ~ # virsh snapshot-list VM1Namnskapande Tidstillstånd
------------------------------------------------------------
1556533387 2019-04-29 15:53:07 +0530 igång
1556533868 2019-04-29 16:01:08 +0530 avstängning
$ virsh start VM1
Domän VM1 startade
Om du vill namnge ögonblicksbilderna något annat än tidsstämpel, använd kommandot:
$ virsh snapshot-create-as VM1 --name snap1Namnskapande Tidstillstånd
------------------------------------------------------------
1556533387 2019-04-29 15:53:07 +0530 igång
1556533868 2019-04-29 16:01:08 +0530 avstängning
snap1 2019-05-02 22:27:48 +0530 igång
Uppenbarligen behöver du inte namnge det snap1, du kan välja vilket lämpligt namn som helst.
Återgår från en stillbild
Att ta en ögonblicksbild är till ingen nytta om du inte kan gå tillbaka till den. Om du behöver återgå till en ögonblicksbild använder du bara kommandot:
$ virsh snapshot-revert $ VMName $ snapshot-nameNamnet kan vara tidsstämpeln eller det användartilldelade namnet som ges till stillbilden.
Se till att det inte finns några viktiga data i din nuvarande virtuella dator, eller om det finns något av betydelse, ta sedan ögonblicksbild av din nuvarande virtuella dator och återgå sedan till en äldre ögonblicksbild.
Fördelar med QCOW2
Kopierings- och skrivmekanismen för qcow2-filer gör att varje ögonblicksbild tar mycket litet utrymme. Utrymmet som tas av en ögonblicksbild ökar med tiden när den löpande bilden avviker från ögonblicksbilden. Så länge du inte skriver om mycket data tar dina ögonblicksbilder bara några MB lagringsutrymme.
Det betyder också att ögonblicksbilderna är mycket snabba också. Eftersom copy-on-write-mekanismen bara måste markera tidsstämpeln när ögonblicksbilden togs. Datablocken som skrivs till qcow2-filen efter ögonblicksbilden tillhör inte den, men de äldre. Det är så enkelt som det. Min testbänk använder en 5400 RPM-hårddisk som inte alls är på topp för dess prestanda, det tar fortfarande mindre än några sekunder att ta en live-ögonblicksbild av en virtuell dator på den här disken.
Slutsats
Som med de flesta libvirt- och virsh-relaterade verktyg ger ögonblicksbildfunktionaliteten ett mycket flexibelt gränssnitt med funktioner i företagskvalitet som live snapshotting tillsammans med fördelarna med copy-on-write-mekanism.
Standardnamnkonventionen gör det också lättare för skalskript att regelbundet ta bort gamla ögonblicksbilder och ersätta dem med nyare. En av mina äldre artiklar om OpenZFS-snapshots och snapshot-policyer kan också tillämpas på din KVM-gäst. För mer information om virsh snapshot-verktyget kan du använda virsh help snapshot-kommandot. Hjälpsidan är väldigt liten, exakt och lätt att förstå.