KVM Guest Snaphots avec libvirt

KVM Guest Snaphots avec libvirt
Les machines virtuelles ont de nombreux cas d'utilisation, dont l'un est la capacité des machines virtuelles à utiliser comme machines d'essai. Vous pouvez expérimenter dans une machine virtuelle, appliquer des correctifs et tester les mises à niveau avant de faire de même sur vos systèmes de production ou votre poste de travail. Vous pouvez également utiliser des machines virtuelles jetables, qui manquent de données personnelles ou sensibles, pour les tests de logiciels malveillants, comme le fait la majeure partie de la communauté de sécurité, assurez-vous simplement que le réseau de machine virtuelle est isolé de votre hôte et de votre LAN.

Cependant, il devient fatigant de réinstaller le système d'exploitation à l'intérieur de votre machine virtuelle. Il entrave votre flux de travail et, par conséquent, vous avez besoin d'un moyen fiable de:

  1. Prenez un instantané de votre machine virtuelle à un moment donné dans le temps.
  2. Avoir un mécanisme pour utiliser l'instantané pour revenir à votre machine virtuelle à un état de travail précédemment.

J'ai déjà expliqué comment les instantanés fonctionnent dans VirtualBox et cette fois, je voulais discuter des instantanés dans Libvirt. J'utiliserai Qemu-kvm comme hyperviseur backend pour mon installation LibVirt. Votre cas peut différer, mais la fonctionnalité globale et l'interface ne doivent pas être très différentes, car Libvirt fait son mieux pour normaliser 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éer un instantané

Il existe plusieurs façons de prendre et de gérer les instantanés de votre machine virtuelle. Des applications d'interface graphique comme Virt-Manager et Ovirt offrent les fonctionnalités et vous pouvez même écrire des scripts personnalisés pour interface avec l'API LibVirt qui gère toute la gamme des 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 livré avec presque toutes les installations de LibVirt par défaut et devrait être disponible sur une large gamme de distributions.

Pour les commandes ci-dessous, assurez-vous de remplacer le nom de ma machine virtuelle, VM1, avec le nom réel de votre machine virtuelle. Libvirt fait souvent référence à la machine virtuelle et aux conteneurs comme Domaines. Donc, si vous voyez un message d'erreur suggérant, par exemple, «spécifiez 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 direction de Libvirt.

$ lish lish - tout

Pour prendre un instantané d'une machine virtuelle simplement:

$ virsh snapshot-créate VM1

Et pour répertorier tous les instantanés d'une machine virtuelle donnée, utilisez la commande:

$ virsh snapshot-list VM1
État de temps de création de noms
------------------------------------------------------------
1556533387 2019-04-29 15:53:07 +0530 Running

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 Unix Epoch). La colonne de création Time montre le temps de création de manière lisible humaine et la colonne d'État montre l'état de la machine virtuelle quand il a été instantanément. Le 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 signifiait 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 il est assez précieux car il 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 des instantanés en direct.

Certaines charges de travail, cependant, vous obligent à vous arrêter de la machine virtuelle avant qu'il ne soit instantanément. 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 exécutée dans votre machine virtuelle a une IO élevée, vous devez probablement éteindre la machine virtuelle avant de créer l'instantané. Créons-nous un de cette façon.

$ VIRSH COSTDOWN VM1

Le domaine VM1 est en cours de fermeture

$ virsh snapshot-créate VM1

Instantané de domaine 1556533868 Créé

root @ deb: ~ # VIRSH Snapshot-list VM1
État de temps de création de noms
------------------------------------------------------------
1556533387 2019-04-29 15:53:07 +0530 Running
1556533868 2019-04-29 16:01:08 +0530 Arrêt
$ virsh start VM1
Le domaine VM1 a commencé

Si vous souhaitez nommer les instantanés autre chose que l'horodatage, utilisez la commande:

$ virsh instantanée-créate-as VM1 --name snap1
État de temps de création de noms
------------------------------------------------------------
1556533387 2019-04-29 15:53:07 +0530 Running
1556533868 2019-04-29 16:01:08 +0530 Arrêt
SNAP1 2019-05-02 22:27:48 +0530 Running

De toute évidence, vous n'avez pas à le nommer Snap1, vous pouvez choisir n'importe quel nom pratique.

Revenir d'un instantané

Prendre un instantané n'est d'aucune utilité si vous ne pouvez pas y retourner. Dans le cas, vous devez revenir à un instantané utilisez simplement la commande:

$ virsh snapshot-révertre $ vmname $ snapshot-name

Le nom peut être l'horodatage ou le nom affecté par l'utilisateur donné à l'instantané.

Assurez-vous qu'il n'y a pas de données importantes dans votre machine virtuelle actuelle, ou s'il y a quelque chose d'important, alors prenez un instantané de votre machine virtuelle actuelle, puis revenez à un instantané plus ancien.

Avantages de QCOW2

Le mécanisme de copie sur l'écriture des fichiers QCOW2 permet à chaque instantané de prendre un très petit espace. L'espace pris par un instantané augmente au fil du temps alors que l'image en cours d'exécution diverge de l'instantané. Donc, tant que vous ne réécrivez pas beaucoup de données, vos instantanés ne prendront que quelques MBS de stockage.

Cela signifie également que les instantanés sont également très rapides. Depuis, le mécanisme de copie-écriture doit simplement 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 5400 tr / min qui n'est en aucun cas au sommet de ses performances, il faut encore moins de quelques secondes pour prendre un instantané en direct d'une machine virtuelle sur ce disque.

Conclusion

Comme pour la plupart des utilitaires liés à LibVirt et VIRSH, la fonctionnalité Snapshot offre une interface très flexible avec des fonctionnalités de qualité d'entreprise comme les instantanés en direct ainsi que les avantages du mécanisme de copie-écriture.

La convention de dénomination par défaut permet également aux scripts de shell de supprimer périodiquement les anciens instantanés et de les remplacer par des instantanés plus récents. Un de mes anciens articles sur les instantanés OpenZFS et les politiques d'instantané peuvent également être appliqués pour votre invité KVM. Pour plus d'informations sur l'utilitaire d'instantané VIRSH, vous pouvez utiliser la commande VIRSH Help Snapshot. La page d'aide est très petite, précise et facile à comprendre.