Sauvegardes de machines virtuelles
Les machines virtuelles offrent des possibilités inédites de sauvegardes. Il est d'une part possible de les sauvegarder au niveau du système de fichier, comme un vrai serveur (cela permet de conserver un historique fichier par fichier), mais il est aussi possible de les sauvegarder au niveau des périphériques blocs. Cette technique permet une restauration complète, et très rapide. Nous appellerons ce type de sauvegarde une sauvegarde de “bas niveau”. Vous trouverez les instructions pour la mise en place d'une sauvegarde bas niveau avec BackupPC (une sauvegarde au niveau FS se fait comme pour une machine physique, et n'est donc pas abordée ici)
Dans cet exemple, nous utiliserons BackupPC pour la sauvegarde (mais il est possible de le faire avec d'autres outils)
Il n'y a rien à configurer au niveau de la machine virtuelle pour une sauvegarde bas niveau, tout se passe sur la machine hôte.
Mise en place du script de pre-backup
Le script virt-backup est maintenant inclus dans le paquet virt-stack, disponible sur notre dépôt de rpms. Sinon, vous pouvez récupérer la dernière version sur notre dépôt git.
Il est recommandé (mais pas obligatoire) de monter un système de fichier indépendant dans le répertoire de sauvegarde (/var/lib/libvirt/backup). Ce système de fichier doit être le plus rapide possible (RAID0, RAID10).
Vérifier le fonctionnement du script
Vérifier en local que le script fonctionne, en sauvegardant une machine virtuelle
virt-backup --vm=machine_virtuelle --debug
Pour nettoyer les fichiers générés:
virt-backup --cleanup --vm=machine_virtuelle --debug
Pour obtenir une liste d'options disponibles:
virt-backup
Configurer la sauvegarde
Le serveur de sauvegarde doit pouvoir accéder au répertoire de sauvegarde (tar+ssh est recommandé). L'utilisateur local sur le machine hôte doit avoir les droits d'exécuter le script virt-backup en tant que root:
Cmnd_Alias BACKUPPC /usr/bin/virt-backup, /usr/bin/rsync [...] backup ALL=(root) NOPASSWD: BACKUPPC
Ensuite, il faut configurer un nouvel hôte à sauvegarder dans BackupPC (peu importe le nom), puis modifier la configuration comme suit (dans cet exemple, la VM que l'on sauvegarde se nomme smetest)
$Conf{BackupFilesOnly} = {}; $Conf{ClientNameAlias} = 'localhost'; $Conf{DumpPostUserCmd} = '/usr/bin/sudo /usr/bin/virt-backup --cleanup --vm smetest'; $Conf{DumpPreUserCmd} = '/usr/bin/sudo /usr/bin/virt-backup --keep-lock --compress=pbzip2 --vm smetest --state'; $Conf{EMailNotifyMinDays} = '1.5'; $Conf{EMailNotifyOldBackupDays} = '2'; $Conf{FullKeepCnt} = [ '4' ]; $Conf{FullKeepCntMin} = '1'; $Conf{IncrAgeMax} = '7'; $Conf{IncrKeepCnt} = '7'; $Conf{IncrKeepCntMin} = '2'; $Conf{UserCmdCheckStatus} = '1'; $Conf{IncrLevels} = [ '1' ]; $Conf{CompressLevel} = '0'; $Conf{TarClientCmd} = 'env LC_ALL=C /usr/bin/sudo $tarPath -c -v -f - -C $shareName+ --totals'; $Conf{TarClientRestoreCmd} = 'env LC_ALL=C /usr/bin/sudo $tarPath -x -p --numeric-owner --same-owner -v -f - -C $shareName+'; $Conf{TarShareName} = [ '/var/lib/libvirt/backup/smetest/' ]; $Conf{XferMethod} = 'tar'; $Conf{TarIncrArgs} = '--newer=$incrDate $fileList+';