Hyper-V : avantages et dangers des points de contrôle
Un mauvais usage des points de contrôle Hyper-V risque de dégrader les performances et d'engendrer des pénuries de disques, pénalisant les VM que vous cherchiez à protéger.
Quand j'ai entendu parler pour la première fois de snapshots des machines virtuelles (VM), j'ai imaginé qu'il s'agissait de réaliser une copie intégrale de l'état courant d'une VM, puis de la mettre en lieu sûr. Ainsi, en cas de besoin, il suffirait de restaurer l'instantané en chargeant la copie. Après avoir travaillé avec ces instantanés, j'ai compris le processus et je me suis aperçu que je m'étais trompé.
Pour clarifier les conventions de dénomination, à partir de Windows Server 2012 R2, Microsoft a rebaptisé ses « captures instantanées » (snapshots) Hyper-V en « points de contrôle » (checkpoints). System Center Virtual Machine Manager les avait toujours appelés « points de contrôle », donc cette harmonisation de la terminologie Microsoft est une bonne chose, même si les commandes PowerShell parlent toujours d'« instantanés ». En fait, il n'existe aucune différence technique entre les deux.
Pour Hyper-V sous Windows Server 2008 et 2012, Microsoft recommande de ne pas utiliser de points de contrôle en production, mais uniquement en environnements de test et de développement. Ils sont quand même pris en charge (sauf en cas d'exécution d'Exchange ou de SQL), ce qui peut prêter à confusion et conduire les administrateurs système à se demander s'ils doivent ou non utiliser des points de contrôle Hyper-V dans les systèmes de production. Il n'y a guère eu de changements depuis Windows Server 2012, mais Microsoft a adopté cette approche prudente pour différentes raisons.
Première raison : les performances du serveur se dégradent dès qu'un point de contrôle est utilisé, à cause du pic d'E/S qu'il implique. Sans pour autant le résoudre entièrement, il est possible d'atténuer le problème en enregistrant les points de contrôle sur un disque autre que le fichier VHD de la VM.
Deuxième raison : chaque point de contrôle occupe un espace disque supplémentaire, espace qui n'est libéré qu'à l'arrêt de la VM. Or, les effets sur le fonctionnement de votre environnement peuvent être désastreux, comme nous l'expliquerons dans la suite de l'article.
Dans les coulisses des points de contrôle Hyper-V
Alors, que se passe-t-il exactement quand vous cliquez sur l'option Checkpoint (Point de contrôle) d'une VM dans le Gestionnaire Hyper-V ?
Tout d'abord, Hyper-V crée un disque de différenciation avec l'extension de fichier .AVHD. L'emplacement de ce fichier dépend du chemin configuré pour les points de contrôle.
Au départ, le fichier est relativement petit (32 Mo dans mon test), mais en arrière-plan, le fichier .VHD initial de la VM est suspendu.
Sur Hyper-V
Une copie du fichier de configuration, qui porte l'extension .XML, est effectuée pour couvrir les modifications matérielles apportées à la VM elle-même. L'état actuel de la mémoire est enregistré dans un autre fichier, sous l'extension .BIN, ce qui permet de restaurer le point de contrôle exactement comme il était.
Le quatrième fichier, avec une extension .VSV, est utilisé pour l'état d'enregistrement des périphériques associés à la VM.
Aucune incidence n'est constatée sur la VM disponible et en cours d'exécution (sauf une diminution des performances), mais l'hôte Hyper-V commence à jongler entre les fichiers .VHD et .AVHD pour les lectures et écritures.
Quand une demande de lecture parvient à la VM, celle-ci commence par vérifier si le disque de différenciation contient un enregistrement des données correspondantes. Dans le cas contraire, l'hôte lit ensuite les données dans le fichier .VHD d'origine.
En cas de demande d'écriture, la modification est effectuée dans le fichier .AVHD. L'exemple suivant est très rudimentaire (en réalité, il s'agirait de millions de 1 et de 0 !), mais représentatif des opérations effectuées sur les données de la VM :
0001110001 - VHD d'origine
_____0____ - Point de contrôle AVHD 1
A chaque modification des données, le fichier .AVHD conserve uniquement un enregistrement de cette modification. Lorsque les points de contrôle Hyper-V se multiplient, les choses peuvent se compliquer :
0001110001 - VHD d'origine
_____0____ - Point de contrôle AVHD 1
_____11___ - Point de contrôle AVHD 2
_1____0___ - Point de contrôle AVHD 3
Chaque point de contrôle donne lieu à un fichier .AVHD séparé, qui suit les modifications depuis sa création jusqu'à la suppression de l'instantané ou à la création d'un autre instantané.
Dans l'exemple ci-dessus, lorsque le point de contrôle 2 est créé, le point de contrôle 1 passe en lecture seule. A la création du point de contrôle 3, le 2 passe en lecture seule et le 1 reste en lecture seule, tout comme le VHD d'origine.
Comme vous pouvez le constater, l'utilisation du disque peut rapidement s'emballer avec l'augmentation du nombre de points de contrôle, ce qui n'est pas sans conséquence sur les performances. Bien qu'il n'y ait guère eu de modifications depuis le jeu de données d'origine, il faut déjà 50 % d'espace supplémentaire pour assurer le suivi des trois points de contrôle.
Les systèmes d'exploitation Windows Server exécutent de nombreuses tâches en arrière-plan ; toutes ces petites opérations d'écriture et ces modifications s'accumulent plus vite qu'on ne le croit.
Il est également intéressant de noter qu'un seul fichier de point de contrôle ne peut pas excéder la taille du VHD d'origine :
0001110001 - VHD d'origine
1110001110 - Point de contrôle AVHD 1
Dans cet exemple, tous les bits de données ont changé. Il est donc impossible d'utiliser davantage d'espace disque, à moins de créer un autre instantané. C'est là l'un des principaux risques des points de contrôle Hyper-V. Si vous venez à manquer d'espace disque, toutes les VM passeront à l'état « Critical – Paused » (Critique - En pause), ce qui évidemment est très mauvais lors d'une exécution en production. En effet, du point de vue de l'utilisateur, une VM en pause n'est pas plus utile que si elle était arrêtée, et l'exécution des VM dans cet état ne peut pas reprendre tant que l'espace disque reste insuffisant.
La quantité d'espace disque à allouer aux instantanés est difficile à évaluer, mais les bonnes pratiques imposent de les placer sur un disque autre que celui qui consigne le fichier VHD de la VM. Dans un scénario où un instantané utilise tout l'espace disponible, les autres VM ne sont pas affectées car elles disposent encore de beaucoup d'espace, à moins, bien sûr, que toutes vos VM aient des instantanés actifs sur le même disque.
Il est facile de vérifier si des points de contrôle sont actifs sur chaque hôte Hyper-V à l'aide de la commande PowerShell suivante :
Get-VM | Get-VMSnapshot
Cette commande répertorie tous les points de contrôle, ce qui vous permet d'accéder facilement aux VM pour lesquelles vous souhaitez les supprimer.
Limiter et supprimer les points de contrôle
Si vous considérez que les points de contrôle comportent trop de risques, ou si vous souhaitez les limiter à certaines VM, vous pouvez les associer à un chemin qui n'existe pas. Veillez dans ce cas à interdire l'accès du personnel au paramètre afin d'éviter sa modification.
Ouvrez le Gestionnaire Hyper-V, mettez en évidence la VM dont vous souhaitez supprimer un point de contrôle, puis cliquez avec le bouton droit sur ce point de contrôle dans la fenêtre « Checkpoint » (Point de contrôle). Dans le menu contextuel, utilisez l'option « Delete Snapshot » (Supprimer la capture instantanée).
Cette opération annule les modifications apportées au fichier VHD d'origine et, par conséquent, supprime tous les autres fichiers créés en même temps que le point de contrôle. Notez que si vous utilisez toujours Windows Server 2008, le processus d'annulation n'est appliqué qu'après l'arrêt de la VM. Dans Windows Server 2012, en revanche, il est exécuté en direct.