====== Restauration d'une machine depuis un backup ====== On est ici dans une documentation a l'aveugle d'un truc un peu touchy, donc il est possible que des erreurs subsistent. * La logique de sauvegarde est en mode push. Par réciprocité on va envisager la restauration en mode pull. * Il n'y a pas qu'une manière de faire. On propose depuis n'importe qu'elle machine du cluster : - d'établir la connectivité ssh - de voir comment téléchager les fichiers de la machine - de lister les taches à faire pour restaurer l'archive ===== Connectivité SSH ===== Le pool de backup est sur la [[admin:machines_virtuelles:felicette|VM felicette]], qui est un KVM porté par galanga.april.org. Elle est accessible à l'adresse backup.chapril.org. Vous devez être capable d'exécuter avec succès # ssh -p 2242 -A backup@backup.chapril.org true Si ce n'est pas le cas, vous pouvez suivre la section « Accès SSH » de la page [[admin:procedures:sauvegarder_machines#acces_ssh]], en prenant soin de ne pas vous restreindre à une commande forcée qui risque de vous handicaper. ===== Infos sur le dépôt ===== Pour lister les backups (archives) d'une VM, exécuter depuis cette VM : borgmatic -l Pour avoir la synthèse du dépôt d'archive : borgmatic -i C'est est tout pour le moment. La version Buster de borgmatic est vieille et donc ne prend malheureusement pas bien en charge la restauration. On passe à borg. ===== Télécharger un tarball de la VM ===== En supposant que ''2021-01-02T01:43:34'' soit le nom d'une archive, pour voir les infos d'une archive en particulier : BORG_RSH="ssh -p 2242 -A" borg info backup@backup.chapril.org:/srv/backups/$(hostname --fqdn)::2021-01-02T01:43:34 Pour extraire /etc/issue de l'archive précédente dans le dossier courant, on liste le fichier de façon relative, comme un tar : BORG_RSH="ssh -p 2242 -A" borg extract backup@backup.chapril.org:/srv/backups/$(hostname --fqdn)::2018-09-02 etc/issue Pour extraire l'archive entière dans le dossier courant, il faudrait faire : BORG_RSH="ssh -p 2242 -A" borg extract backup@backup.chapril.org:/srv/backups/$(hostname --fqdn)::2018-09-02 Options utiles de borg extract : --list output verbose list of items (files, dirs, ...) -n, --dry-run do not actually change any files -e PATTERN, --exclude PATTERN exclude paths matching PATTERN # Extract entire archive $ borg extract /path/to/repo::my-files # Extract entire archive and list files while processing $ borg extract -v --list /path/to/repo::my-files # Extract the "src" directory $ borg extract /path/to/repo::my-files home/USERNAME/src # Extract the "src" directory but exclude object files $ borg extract /path/to/repo::my-files home/USERNAME/src --exclude '*.o' ===== Monter le dépôt de la VM ===== Avant de restaurer il est parfois utile d'inspecter en détails une archive ou un dépot entier à l'aide d'un point de montage. On peut le monter localement : BORG_RSH="ssh -p 2242 -A" borg mount backup@backup.chapril.org:/srv/backups/$(hostname --fqdn) /mnt ===== Restauration de l'archive ===== Ajouter un hook dans le paquet ''backup-chapril'' qui dump la sortie de ''lsblk'' serait un plus. Il faut avoir un fs près à recevoir les fichiers. Pour reconstruire le lvm à l'identique, le dossier /etc/lvm/backup/ est probablement utile, le /etc/fstab aussi. Si vous avez un volume vierge sous la patte vous pouvez restaurer la structure LVM à l'aire de vgcfgrestore -f le_fichier_backup VolumeGroupName À défaut de tout autre chose, on peut imaginer cloner la « VM modèle », adapter les tailles de LVM et surtout des LVs, et monter les FS de l'image QCOW via les ''libguestfs-tools'' depuis n'importe quelle hôte. On se met à l'emplacement de la future racine : BORG_RSH="ssh -p 2242 -A" borg extract backup@backup.chapril.org:/srv/backups/$(hostname --fqdn)::2018-09-02 Ensuite il reste à * installer un bootloader * restaurer les dumps engendrés par /etc/borg/scripts/*hooks (restauration SQL et ''dpkg --set-selections'') * vérifier la configuration réseau / bail dhcp, surtout si la mac a changé * penser à tout ce qu'on a oublié Et ça devrait rouler. [[https://admin.april.org/doku.php?id=sysadm:reconstruction_d_une_vm | L'expérience ]] montre que couper le ''cron'' est une bonne pratique. Il ne suffit pas de regarder ''/etc/cron.d'' : la configuration totale de ''cron'' peut être bien plus sioux. ===== Exemple de procédure ===== Ceci est un exemple de procédure appliquée pour faire un test de restauration de la VM //pad// dans le cadre du ticket de test de reprise [[https://agir.april.org/issues/2408|#2408]]. Il est basé sur les éléments ci-dessus mais j'ai utilisé un LiveCD plutôt que de monter les qcow sur l'hôte. - Cloner la VM //modèle// - Sur la VM crée, configurer la même adresse mac que la machine à restaurer. Dans le cas d'un test de restauration, suivre la procédure de création de VM pour faire la config réseau. - Démarrer la VM et mettre à jour - Modifier la configuration de la VM pour qu'elle démarre sur un livecd Debian. Il faut arrêter la VM et pas seulement redémarrer pour que cette modif soit prise en compte - Une fois sur le livecd, installer les outils nécessaires et configurer un serveur SSH : apt update apt install lvm2 openssh-server - Monter la partition root (utiliser pvscan/vgscan pour trouver les path à utiliser) : vgchange -a y mount /dev/modele-vg/root /mnt/ - Récupérer les clés SSH depuis la partition root et démarrer sshd : mkdir /root/.ssh cp /mnt/etc/ssh_authorized_keys/root /root/.ssh/authorized_keys systemctl start sshd - Se connecter en SSH - Générer une clé SSH pour l'accès aux sauvegardes : ssh-keygen -t ed25519 - Sur felicette autoriser cette clé à accéder aux sauvegardes de la VM à restaurer : vi /etc/ssh/authorized_keys/backup - Toujours sur felicette, identifier le backup qui sera utilisé : export BORG_REPO=/srv/backups/.cluster.chapril.org/ borg list - De retour sur le SSH du livecd, tester si la connexion vers le serveur fonctionne bien : ssh -p 2242 backup@backup.chapril.org true - Récupérer le fichier _/etc/fstab_ pour identifier comment le serveur était partitionné. Se poser la question de savoir s'il faut repartionner de façon identique : BORG_RSH="ssh -p 2242 -A" borg extract backup@backup.chapril.org:/srv/backups/.cluster.chapril.org::2021-XX-XXTXX:XX:XX etc/fstab - Procéder au partitionnement et monter les partitions dans en suivant la bonne arborescence, dans /mnt par exemple - Procéder à la récupération des fichiers, il faut se cd dans le dossier puis exécuter la commande, par exemple : BORG_RSH="ssh -p 2242 -A" borg extract backup@backup.chapril.org:/srv/backups/.cluster.chapril.org::2021-XX-XXTXX:XX:XX - S'il sagit d'un test de restauration, s'assurer qu'il ne reste pas de traces de l'ancienne IP dans la configuration. Par exemple dans ''/etc/firehol/firehol.conf'' - Redémarrer la VM sur son disque - S'il y a une base de données, il faudra la restaurer, par exemple pour pad : # Recréer le cluster (fichiers vides à la restauration) : pg_lsclusters pg_dropcluster --stop 11 main pg_createcluster --start 11 main systemctl restart postgresql@11-main.service # Restaurer les fichiers SQL mv /var/backups/pgsql/*.sql.bz2 /usr/lib/postgresql/ su - postgres bzip2 -c -d postgres.sql.bz2 | psql postgres bzip2 -c -d template1.sql.bz2 | psql template1 createdb etherpad createuser etherpad bzip2 -c -d etherpad.sql.bz2 | psql etherpad rm etherpad.sql.bz2 postgres.sql.bz2 template1.sql.bz2 - Pour un test de restauration, il est possible d'utiliser ssh pour faire un tunnel et tester le service. Par exemple pour pad, l'application est alors accessible sur http://127.0.0.1:9001/ : ssh -L 9001:127.0.0.1:9001 root@test-backup.cluster.chapril.org