{{indexmenu_n>30}} # 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. ## Activation des backups 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 : {{ :technique:infrastructure:machines_virtuelles:vm_backup.png?800 |}} 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 [[technique:adminsys:tips:mail|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](https://pve.proxmox.com/wiki/Backup_and_Restore). Avec Proxmox 6, un nouveau format de compression est introduit : [ZSTD](https://en.wikipedia.org/wiki/Zstandard). 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. 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 ## Déclencher un backup 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` : {{ :technique:infrastructure:machines_virtuelles:proxmox_backup_now.png |}} ## Déclencher un snapshot 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](https://pve.proxmox.com/wiki/Live_Snapshots) 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 : {{ :technique:infrastructure:machines_virtuelles:vm_snapshot.png?direct |}} ## Restaurer un backup ou une snapshot 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. 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` : {{ :technique:infrastructure:machines_virtuelles:vm_backup_restore.png?direct |}} 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. ## Consulter les fichiers d'un backup Pour des raisons diverses, on peut vouloir examiner et récupérer certains fichiers d'un backup. ### En restaurant sur une nouvelle machine virtuelle 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. Usuellement, les image disque des machines virtuelles se trouvent dans `/var/lib//images/`. Ensuite, on monte le disque virtuel avec la commande suivante : ```bash $ guestmount -a disk.qcow2 -i --ro /mount_point ``` Si `guestmount` n'est pas trouvé, on installera `libguestfs-tools`. ### Avec un script tiers On pourra utiliser ce script pour extraire les fichiers du backup dans un dossier : https://github.com/jancc/vma-extractor/blob/master/vma.py 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. ## Effacer un snapshot qui s'est mal déroulé 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 ``` Si vous avez un message d'erreur du type `VM is locked (snapshot)`, vous pouvez débloquer la VM avec: ``` qm unlock ``` 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](https://forum.proxmox.com/threads/delete-drive-snapshot-failed.20944/)