Sauvegarder, migrer ou restaurer une machine virtuelle

Proxmox dispose de plusieurs mécanismes de sauvegarde de l’état d’une machine virtuelle :

  • Des backups, qui contiennent l’ensemble des disques d’une machine virtuelle, et peuvent être externalisés.
  • Des snapshots, qui stockent les différences sur les disques depuis le snapshot, et permettent de revenir à l’état du snapshot. Ils ne peuvent pas être externalisés.

Pour chaque machine virtuelle nouvellement créée, il est souhaitable d’activer les fonctionnalités de backup.

Dans l’interface web Proxmox, à partir du menu Datacenter, on clique sur l’onglet Backup. Si aucun backup n’est défini, on l’ajoute, sinon, on modifie l’existant. Un exemple de configuration est celui-ci :

L’important est que :

  • Le stockage choisi tape sur le disque dur. Normalement, il existe a été créé à l’installation, s’appelle save et est monté sur /SAVE sur l’hôte.
  • L’email soit envoyé en cas d’échec à picasoft@assos.utc.fr. Pour que cela fonctionne, il faut avoir configuré Postfix localement pour utiliser le serveur de mail de Picasoft.
  • Le mode de compression ZSTD s’il est disponible, ou GZIP, plus lent.
  • Le mode soit Snapshot, qui permet de ne pas avoir d’interruption de service sur les machines virtuelles, au prix d’un faible risque d'inconsistence.

Attention:

Avec Proxmox 6, un nouveau format de compression est introduit : ZSTD. Il compresse aussi bien que GZip en général, et beaucoup plus rapidement. C’est celui qu’on privilégiera.

Il est préférable qu’il soit fait dans la nuit, et les jours de la semaine sont à sélectionner suivant les besoins de sauvegarde.

Note:

Sur les machines Alice et Bob, Picasoft utilise un système pour échanger les backups mutuels, pour s’assurer d’avoir une sauvegarde des machines virtuelles d’une machine en cas de panne grave. Il est aussi envisageable d’externaliser les backups, une fois chiffrés. Ce système est documenté ici, et n’est pas indispensable pour que les backups Proxmox fonctionnent (mais souhaitable tout de même) : https://gitlab.utc.fr/picasoft/projets/tx/rotation-vm

Depuis Proxmox 6, il est possible de déclencher manuellement un backup programmé, par exemple avant une grosse mise à jour, avec le bouton Run Now :

Pour sauvegarder les machines virtuelles, Proxmox intègre un système de snapshot. Il est en mesure de sauvegarder le système de fichier complet de la machine virtuelle et de le restaurer en cas de besoin. Dans le cas ou une personne n’est pas sure de ce qu’elle va faire sur une machine, il est possible de prendre un snapshot de celle-ci et de faire un rollback pour revenir à la situation initiale.

Un snapshot est beaucoup plus léger et rapide qu’un backup, puisqu’il ne sauvegarde que les modifications sur la VM, et non ses disques complets. Il est donc à privilégier avant toute opération dangereuse (mise à jour majeure du système d’exploitation, etc).

Pour prendre un snapshot, il faut se rendre sur le menu de la VM, puis sur l’onglet Snapshot, et cliquer sur Add Snapshot. Il est préférable d’inclure la RAM. Par exemple, pour prendre un snapshot sur pica02 avant une mise à jour majeure, on pourra faire :

La restauration d’une machine s’effectue en cliquant sur une machine virtuelle dans l’interface web.

Pour un backup, on se rend ensuite dans l’onglet Backup, et pour un snapshot sur l’onglet Snapshot. On a alors une liste des backups ou snapshots sur la machine. Lorsque l’on clique sur celui-ci, on a alors la possibilité de restaurer l’état de la machine virtuelle.

Important:

Cette opération est irréversible ! On peut néanmoins prendre une snapshot avant de restaurer un backup, si on a vraiment un doute, mais c’est peut-être un peu tordu…

Par exemple, pour restaurer un backup sur pica02, on choisira le backup puis on cliquera sur Restore :

Note:

Il est tout à fait possible de transférer le backup sur un autre hyperviseur et de le restaurer : il faudra simplement veiller à modifier la configuration réseau et à choisir le stockage adéquat pour les disques virtuels.

Pour des raisons diverses, on peut vouloir examiner et récupérer certains fichiers d’un backup.

On restaure le backup sur une machine avec un ID qui n’existe pas ; une nouvelle machine sera créée mais on ne la démarre pas. Souvent, le but est de récupérer certains fichiers ; or la nouvelle VM n’est probablement pas connectée à Internet.

On va simplement trouver le disque virtuel où se trouvent les fichiers qui nous intéressent. On suppose qu’il s’agit de disk.qcow2 et que /mount_point existe.

Note:

Usuellement, les image disque des machines virtuelles se trouvent dans /var/lib/<storage>/images/<VM_ID>.

Ensuite, on monte le disque virtuel avec la commande suivante :

snippet.bash
$ guestmount -a disk.qcow2 -i --ro /mount_point

Attention:

Si guestmount n’est pas trouvé, on installera libguestfs-tools.

On pourra utiliser ce script pour extraire les fichiers du backup dans un dossier : https://github.com/jancc/vma-extractor/blob/master/vma.py

Attention:

Le dossier extrait peut être très lourd : vérifier l’espace disque disponible. Aussi, dans la mesure où Proxmox ne fournit pas d’outil générique pour réaliser cette opération, ce script est réalisé par un tiers. Il peut cesser de fonctionner à un moment ou un autre.

Si il n’est pas possible d’effacer le snapshot depuis l’interface web, il est possible de passer directement par la ligne de commande. Pour cela, il faut se connecter l’hôte concerné, puis lancer la commande suivante :

qm delsnapshot <id_VM> <nom_snapshot>

Si vous avez un message d’erreur du type VM is locked (snapshot), vous pouvez débloquer la VM avec:

qm unlock <id_VM>

Attention à bien vérifier qu’elle n’est pas bloquée pour une raison légitime (par exemple, les backups quotidiens de 3h du mat, qui peuvent durer jusqu’à 8h du mat).

Si vous avez encore des erreurs, comme par exemple:

root@bob:~# qm delsnapshot 102 Test_SATA
VM 102 qmp command 'blockdev-snapshot-delete-internal-sync' failed - Snapshot with id 'null' and name 'Test_SATA' does not exist on device 'drive-scsi1'

alors il est possible que le snapshot soit présent seulement dans le fichier de config de la VM (ici, /etc/pve/qemu-server/102.conf). Dans ce cas, il suffit d’effacer l'entrée

  • technique/infrastructure/backup.txt
  • de qduchemi