Det bliver dog trættende at geninstallere operativsystemet i din VM igen og igen. Det hindrer din arbejdsgang, og du har derfor brug for en pålidelig måde at:
- Tag et øjebliksbillede af din VM på et hvilket som helst tidspunkt.
- Har en mekanisme til at bruge øjebliksbillede til at vende din VM tilbage til en tidligere fungerende tilstand.
Jeg har tidligere diskuteret, hvordan snapshots fungerer i VirtualBox, og denne gang ville jeg diskutere snapshots inden for Libvirt. Jeg bruger QEMU-KVM som backend hypervisor til min Libvirt installation. Din sag kan variere, men den overordnede funktionalitet og grænseflade bør ikke være meget forskellig, da libvirt prøver sit bedste for at standardisere frontend-grænsefladen.
Hvis du ikke er fortrolig med libvirt og qemu-kvm, her er en guide til, hvordan du kan konfigurere KVM på Debian.
Oprettelse af et øjebliksbillede
Der er flere måder, hvorpå du kan tage og administrere snapshots af din VM. GUI-applikationer som virt-manager og oVirt tilbyder funktionaliteten, og du kan endda skrive brugerdefinerede scripts til interface med libvirt API, der administrerer hele spektret af snapshots til dig.
Jeg bruger dog virsh kommandolinjegrænseflade til at vise, hvordan du kan administrere dine virtuelle computere og deres snapshots. Dette værktøj leveres med næsten alle standard libvirt-installationer og skal være tilgængelige i en bred vifte af distributioner.
For nedenstående kommandoer skal du sørge for at erstatte navnet på min VM, VM1, med det faktiske navn på din VM. Libvirt refererer ofte til virtuel maskine og containere som Domæner. Så hvis du ser en fejlmeddelelse, der antyder, siger "angiv domænenavn", skal du angive din VM's navn som et af argumenterne til kommandoen. Brug følgende kommando til at liste alle de virtuelle computere under Libvirts ledelse.
$ virsh-liste - altFor at tage et øjebliksbillede af en VM skal du bare køre:
$ virsh snapshot-opret VM1Og for at liste alle snapshots af en given VM skal du bruge kommandoen:
$ virsh snapshot-liste VM1Navn Oprettelse Tidstilstand
------------------------------------------------------------
1556533387 2019-04-29 15:53:07 +0530 kører
Du kan se, at øjebliksbillede er oprettet. Som standard er snapshotets navn dets oprettelsestidsstempel (antallet af sekunder siden UNIX-epoke). Kolonnen Oprettelsestid viser tidspunktet for oprettelsen på en menneskelig læsbar måde, og kolonnen Stat viser tilstanden for den virtuelle maskine, da den blev snapshottet. Da denne VM kørte, kører snapshotets tilstand også, men det betyder ikke, at selve snapshotet kører. Det vil ikke ændre sig med tiden. Denne funktion er også kendt som live øjebliksbillede, og det er meget værdifuldt, da det giver dig mulighed for at tage et øjebliksbillede af din VM uden nedetid. KVM-gæsterne fungerer i det mindste fint med live snapshots.
Visse arbejdsbelastninger kræver dog, at du stopper med VM, før den snapshots. Dette sikrer, at dataene i øjebliksbillede er konsistente, og at der ikke er nogen halvskrevet fil eller manglende data. Hvis arbejdsbyrden, der kører i din virtuelle maskine, har høj IO, er du sandsynligvis nødt til at slukke for den virtuelle computer, før du opretter øjebliksbillede. Lad os skabe en på denne måde.
$ virsh nedlukning VM1Domæne VM1 lukkes ned
$ virsh snapshot-Opret VM1Domæne snapshot 1556533868 oprettet
[email protected]: ~ # virsh snapshot-list VM1Navn Oprettelse Tidstilstand
------------------------------------------------------------
1556533387 2019-04-29 15:53:07 +0530 kører
1556533868 2019-04-29 16:01:08 +0530 afbrydelse
$ virsh start VM1
Domæne VM1 startet
Hvis du vil navngive snapshotsne noget andet end tidsstempel, skal du bruge kommandoen:
$ virsh snapshot-create-as VM1 --navn snap1Navn Oprettelse Tidstilstand
------------------------------------------------------------
1556533387 2019-04-29 15:53:07 +0530 kører
1556533868 2019-04-29 16:01:08 +0530 afbrydelse
snap1 2019-05-02 22:27:48 +0530 kører
Det er klart, at du ikke behøver at navngive det snap1, du kan vælge et hvilket som helst praktisk navn.
Vender tilbage fra et øjebliksbillede
At tage et øjebliksbillede er til ingen nytte, hvis du ikke kan gå tilbage til det. I tilfælde af at du skal vende tilbage til et øjebliksbillede skal du blot bruge kommandoen:
$ virsh snapshot-revert $ VMName $ snapshot-nameNavnet kan være tidsstemplet eller det brugertildelte navn, der gives til snapshotet.
Sørg for, at der ikke er vigtige data i din nuværende virtuelle maskine, eller hvis der er noget, der er vigtigt, så tag et øjebliksbillede af din nuværende VM og vend tilbage til et ældre øjebliksbillede.
Fordele ved QCOW2
Copy-on-write-mekanismen for qcow2-filer tillader hvert øjebliksbillede at tage meget lille plads. Rummet, der tages af et øjebliksbillede, øges over tid, når det kørende billede afviger fra øjebliksbillede. Så længe du ikke omskriver en masse data, tager dine snapshots kun et par MB lagerplads.
Det betyder også, at snapshots også er meget hurtige. Da kopiering-til-skriv-mekanismen bare skal markere tidsstemplet, da øjebliksbillede blev taget. Datablokkene skrevet til qcow2-filen efter snapshotet hører ikke til den, men de ældre. Det er så simpelt som det. Min testbænk bruger en 5400 RPM harddisk, der på ingen måde er på toppen af dens ydeevne, det tager stadig mindre end et par sekunder at tage et live øjebliksbillede af en VM på denne disk.
Konklusion
Som med de fleste libvirt- og virsh-relaterede hjælpeprogrammer giver snapshot-funktionaliteten en meget fleksibel grænseflade med enterprise grade-funktioner som live snapshotting sammen med fordelene ved copy-on-write-mekanisme.
Standard navngivningskonventionen gør det også lettere for shell-scripts med jævne mellemrum at fjerne gamle snapshots og erstatte dem med nyere. En af mine ældre artikler om OpenZFS snapshots og snapshot-politikker kan også anvendes til din KVM-gæst. For mere information om virsh snapshot-værktøjet kan du bruge virsh help snapshot-kommandoen. Hjælpesiden er meget lille, præcis og let at forstå.