Cependant, il devient fastidieux de réinstaller le système d'exploitation à l'intérieur de votre machine virtuelle encore et encore. Cela entrave votre flux de travail et, par conséquent, vous avez besoin d'un moyen fiable pour :
- Prenez un instantané de votre machine virtuelle à un moment donné.
- Disposer d'un mécanisme permettant d'utiliser l'instantané pour rétablir votre machine virtuelle dans un état de fonctionnement antérieur.
J'ai déjà discuté du fonctionnement des instantanés dans VirtualBox et cette fois, je voulais discuter des instantanés dans Libvirt. J'utiliserai QEMU-KVM comme hyperviseur principal pour mon installation Libvirt. Votre cas peut différer, mais la fonctionnalité et l'interface globales ne devraient pas être très différentes, car libvirt fait de son mieux pour standardiser l'interface frontale.
Si vous n'êtes pas familier avec libvirt et qemu-kvm, voici un guide sur la façon dont vous pouvez configurer KVM sur Debian.
Création d'un instantané
Il existe plusieurs façons de prendre et de gérer des instantanés de votre machine virtuelle. Les applications GUI telles que virt-manager et oVirt offrent la fonctionnalité et vous pouvez même écrire des scripts personnalisés pour l'interface avec l'API libvirt qui gère toute la gamme d'instantanés pour vous.
Cependant, j'utiliserai l'interface de ligne de commande virsh pour montrer comment vous pouvez gérer vos machines virtuelles et leurs instantanés. Cet utilitaire est fourni avec presque toutes les installations libvirt par défaut et devrait être disponible sur un large éventail de distributions.
Pour les commandes ci-dessous, assurez-vous de remplacer le nom de ma VM, VM1, par le nom réel de votre VM. Libvirt fait souvent référence à la machine virtuelle et aux conteneurs comme Domaines. Donc, si vous voyez un message d'erreur suggérant, disons, "spécifier le nom de domaine", vous devez fournir le nom de votre machine virtuelle comme l'un des arguments de la commande. Utilisez la commande suivante pour répertorier toutes les machines virtuelles sous la gestion de Libvirt.
$ virsh liste --allPour prendre un instantané d'une VM, exécutez simplement :
$ virsh snapshot-create VM1Et pour lister tous les snapshots d'une VM donnée, utilisez la commande :
$ virsh liste d'instantanés VM1Nom Heure de création État
------------------------------------------------------------
1556533387 2019-04-29 15:53:07 +0530 en cours d'exécution
Vous pouvez voir que l'instantané est créé. Par défaut, le nom de l'instantané est son horodatage de création (le nombre de secondes depuis l'époque UNIX). La colonne Heure de création affiche l'heure de création d'une manière lisible par l'homme et la colonne État affiche l'état de la VM lorsqu'elle a été prise de vue. Comme cette machine virtuelle était en cours d'exécution, l'état de l'instantané est également « en cours d'exécution », mais cela ne signifie pas que l'instantané lui-même est en cours d'exécution. ça ne changera pas avec le temps. Cette fonctionnalité est également connue sous le nom d'instantané en direct et elle est très utile car elle vous permet de prendre un instantané de votre machine virtuelle sans aucun temps d'arrêt. Les invités KVM, au moins, fonctionnent bien avec les instantanés en direct.
Cependant, certaines charges de travail nécessitent que vous arrêtiez la machine virtuelle avant qu'elle ne soit instantanée. Cela garantit que les données de l'instantané sont cohérentes et qu'il n'y a pas de fichier à moitié écrit ou de données manquantes. Si la charge de travail s'exécutant sur votre machine virtuelle a des E/S élevées, vous devrez probablement désactiver la machine virtuelle avant de créer l'instantané. Créons-en un de cette façon.
$ virsh arrêt VM1Le domaine VM1 est en cours d'arrêt
$ virsh snapshot-create VM1Instantané de domaine 1556533868 créé
[email protected] :~# virsh snapshot-list VM1Nom Heure de création État
------------------------------------------------------------
1556533387 2019-04-29 15:53:07 +0530 en cours d'exécution
1556533868 2019-04-29 16:01:08 +0530 arrêt
$ virsh démarrer VM1
Domaine VM1 démarré
Si vous souhaitez nommer les instantanés autrement que par horodatage, utilisez la commande :
$ virsh snapshot-create-as VM1 --name snap1Nom Heure de création État
------------------------------------------------------------
1556533387 2019-04-29 15:53:07 +0530 en cours d'exécution
1556533868 2019-04-29 16:01:08 +0530 arrêt
snap1 2019-05-02 22:27:48 +0530 en cours d'exécution
Évidemment, vous n'êtes pas obligé de le nommer snap1, vous pouvez choisir n'importe quel nom pratique.
Revenir en arrière à partir d'un instantané
Prendre un instantané ne sert à rien si vous ne pouvez pas y revenir. Au cas où vous auriez besoin de revenir à un instantané, utilisez simplement la commande :
$ virsh snapshot-revert $VMName $snapshot-nameLe nom peut être l'horodatage ou le nom attribué à l'instantané par l'utilisateur.
Assurez-vous qu'il n'y a pas de données importantes dans votre VM actuelle, ou s'il y a quelque chose d'important, prenez un instantané de votre VM actuelle, puis revenez à un instantané plus ancien.
Avantages de QCOW2
Le mécanisme de copie sur écriture des fichiers qcow2 permet à chaque instantané de prendre très peu de place. L'espace occupé par un instantané augmente avec le temps à mesure que l'image en cours diverge de l'instantané. Tant que vous ne réécrivez pas beaucoup de données, vos instantanés ne prendront que quelques Mo de stockage.
Cela signifie également que les instantanés sont également très rapides. Depuis, le mécanisme de copie sur écriture a juste besoin de marquer l'horodatage lorsque l'instantané a été pris. Les blocs de données écrits dans le fichier qcow2 après l'instantané ne lui appartiennent pas, mais les plus anciens le font. C'est aussi simple que ça. Mon banc de test utilise un disque dur de 5400RPM qui n'est en aucun cas au sommet de ses performances, il faut quand même moins de quelques secondes pour prendre un instantané en direct d'une VM sur ce disque.
Conclusion
Comme avec la plupart des utilitaires liés à libvirt et virsh, la fonctionnalité d'instantané fournit une interface très flexible avec des fonctionnalités de niveau entreprise telles que l'instantané en direct ainsi que les avantages du mécanisme de copie sur écriture.
La convention de nommage par défaut permet également aux scripts shell de supprimer périodiquement les anciens instantanés et de les remplacer par des plus récents. L'un de mes anciens articles sur les instantanés OpenZFS et les politiques d'instantané peut également être appliqué à votre invité KVM. Pour plus d'informations sur l'utilitaire virsh snapshot, vous pouvez utiliser la commande virsh help snapshot. La page d'aide est très petite, précise et facile à comprendre.