Table des matières
< retour à la page de l'administration technique
Archive de la page “admin:services:backup” au 23/08/2019 pour garder trace des anciens paramétrages de backup.
Actuellement (2018-04-29) il n'y a pas de backups à federez car la solution legacy (obnam) n'a pas été tenue à jour (*) et la solution future (borg) jamais vraiment déployée.
(* donc en gros on sait pas ce qui est sauvegardé et si ça correspond à ce qui doit l'être, de plus, visiblement, quand les backups échouent, il peut se passer plusieurs semaines de multiples email quotidiens sans que personne ne s'en occupe)
En attendant y'en a marre des mails d’échec d'obnam que tout le monde semble ignorer, donc les crons de backups sont désactivés.
N'hésitez pas à reprendre le flambeau, avant la prochaine catastrophe espérons-le…
Concept de sauvegarde
Backupninja sert pour les sauvegardes automatisées locales (/var/backups
) :
- des informations systèmes utiles (dpkg-selections, fstab, lvm…)
- des dumps des bases de données MySQL
Obnam sert à effectuer la sauvegarde proprement dite vers les serveurs de destination. Il gère l'aspect snapshot et déduplication des données.
Actuellement (2017-06-24) les backups d'obnam de dodecagon vers quigon sont désactivés !
Actuellement, Borg est en cours de déploiement pour remplacer Obnam.
BorgBackup (ou Borg) sert à effectuer la sauvegarde proprement dite vers les serveurs de destination. Il gère un historique des versions des sauvegardes ainsi que la déduplication et la compression des données.
Opérations courantes
La doc concernant la mise en place initiale se situe plus bas.
Faire une sauvegarde
Exemple depuis hexagon vers quigon :
obnam --config /etc/obnam/to_quigon.profile backup
Enlever un lock récalcitrant
Par exemple, un lock de la part d'hexagon vers kdell:
obnam --config /etc/obnam/to_kdell.profile force-lock
force-lock removes a lock file for a client in the repository. You should only force a lock if you are sure no-one is accessing that client's data in the repository. A dangling lock might happen, for example, if obnam loses its network connection to the backup repository.
Mettre à jour la liste des chemins à sauvegarder
Voir la sous-section Contenu des fichiers de config.
Pensez bien à mettre à jour le contenu des fichiers de config sur le wiki également !
Voir les générations (versions)
Exemple depuis hexagon avec l'archive située sur quigon :
obnam --config /etc/obnam/to_quigon.profile generations
Restaurer des données
Si dessous quelques exemples testés.
Voir aussi la doc officielle : http://code.liw.fi/obnam/manual/obnam-manual.en.html#restoring-from-backups
Restauration depuis le serveur originel
Ce cas se présente lorsque le serveur originel est toujours “ok” mais qu'on veut restaurer des données perdues/modifiées par inadvertance/…
Restauration via montage FUSE
Exemple depuis hexagon avec l'archive située sur quigon :
Création d'un dossier pour le point de montage
mkdir /path/to/restore-fuse-mountpoint
montage de l'archive en tant que système de fichier FUSE
obnam --config /etc/obnam/to_quigon.profile mount --to /path/to/restore-fuse-mountpoint
Montre les générations accessibles pour la restauration
ls -la /path/to/restore-fuse-mountpoint
Restauration du fichier /etc/postfix/main.cf depuis la dernière génération
cp /path/to/restore-fuse-mountpoint/latest/etc/postfix/main.cf /tmp/main.cf.restored
Démonter le système de fichier FUSE
fusermount -u /path/to/restore-fuse-mountpoint
Restauration depuis une machine tierce
Dans le cas où l'on veut restaurer sur une machine X (pas précédemment inclue dans le système des sauvegardes) les données d'une machine A à partir de la sauvegarde effectuée sur la machine B ou C.
- Il faut installer
obnam
sur la machine X (merci Captain Obvious !) - Il faut au préalable ajouter la clef publique SSH du compte qui sert à effectuer la restauration dans le
~obnam/.ssh/autorized_keys
sur la machine B (sinon obnam ne pourra pas se connecter en SFTP au repository). - Il suffit ensuite d'utiliser obnam depuis la machine X en précisant
- l'option
--repository=sftp://obnam@machineB.example.org/~/obnam-repository-machineA
pour aller chercher les données sur la machine B - l'option
--client-name=machineA
pour restaurer les données de la machine A - l'option
--no-default-configs
pour faire fi de toute éventuelle configuration d'obnam déjà présente sur la machine X
Exemple testé ci-dessous : restauration sur gluon (serveur perso de Zertrin) de données de kdell à partir de la sauvegarde située sur hexagon.
Avec FUSE
- Ajout de la clef SSH de
zertrin@gluon
dans~obnam/.ssh/authorized_keys
sur hexagon : exercice laissé au lecteur - Lister les générations disponibles (et en même temps vérifier que la connexion fonctionne) :
obnam --no-default-configs --repository=sftp://obnam@hexagon.federez.net/~/obnam-repository-machineA --client-name=kdell generations
- Préparer un point de montage pour le système de fichier FUSE :
mkdir /path/to/obnam_restore_kdell
- Monter la sauvegarde via obnam avec FUSE :
obnam --no-default-configs --repository=sftp://obnam@hexagon.federez.net/~/obnam-repository-machineA --client-name=kdell mount --to /path/to/obnam_restore_kdell
- Vérifier qu'on a bien toutes les générations de dispo dans
/path/to/obnam_restore_kdell
:
ls -la /path/to/obnam_restore_kdell
- Voir le contenu de la génération 42 :
ls -la /path/to/obnam_restore_kdell/42
- Voir le contenu de la dernière génération (
latest
) :
ls -laH /path/to/obnam_restore_kdell/latest
- Restaurer le fichier
/etc/postfix/main.cf
(par exemple) de la génération 42 :
cp /path/to/obnam_restore_kdell/42/etc/postfix/main.cf /path/to/destination/main.cf.restored
- Démonter la sauvegarde :
fusermount -u /path/to/obnam_restore_kdell
Installation initiale de backupninja
Backupninja sert à créer des backups des informations système ainsi que de la base de donnée MySQL automatiquement.
Pour info, les backups créés par backupninja sont stockés dans /var/backups
. Ce dossier est inclus dans la sauvegarde d'obnam ce qui permet d'externaliser les backups effectués par backupninja.
apt-get install hwinfo debconf-utils backupninja
Désactiver l'envoi de mails en cas de succès : dans /etc/backupninja.conf
mettre/changer reportsuccess = no
.
Activer les backups des infos systèmes ( mettre lvm = no
pour les systèmes sans LVM comme quigon)
Ajouter le fichier /etc/backup.d/10.sys
Activer les backups pour la base de donnée MySQL ( uniquement sur hexagon)
Ajouter le fichier /etc/backup.d/20.mysql
Tester avec
sudo backupninja -t -n
Mise en place initiale de BorgBackup (ou Borg)
Prérequis
- Serveur de départ :
borg
- Serveur d'arrivée : accessible en SSH. Un utilisateur dédié
borg
et son home accessible en SSH par l'utilisateur qui exécute borg sur le serveur de départ (typiquementroot
) devra être créé (cf. ci-dessous)
Exemple avec dodecagon, mais la procédure est la même pour chaque serveur.
Installation de Borg
Borg n'est disponible que via les backports pour jessie, on s'assurera donc que la ligne suivante est présente dans /etc/apt/source.list
:
deb http://http.debian.net/debian jessie-backports main
Ensuite, on l'installe avec :
apt update apt install -t jessie-backports borgbackup
Configuration de borg
Initialisation du répertoire /etc/borg-wrapper
:
dodecagon ~ # mkdir /etc/borg-wrapper dodecagon ~ # touch /etc/borg-wrapper/common.conf dodecagon ~ # touch /etc/borg-wrapper/{kdell.conf,quigon.conf}
Les deux fichiers doivent être des fichiers bash valides.
- Le premier fichier (
/etc/borg-wrapper/common.conf
) contiennent la configuration liée au serveur source qui envoie ses données. On y trouve notamment la liste des chemins à inclure et ceux à exclure. - Les autres fichiers (
/etc/borg-wrapper/{kdell.conf,quigon.conf}
) servent juste à indiquer le dépôt de sauvegarde sur les deux autres serveurs.
Préparatifs sur un serveur de destination
Opérations effectuées en root
. Vous pouvez aussi le faire avec sudo
(pas sudo -E
) si vous préférez.
Exemple ici avec kdell comme serveur de destination, à répéter pour chaque serveur de destination en adaptant les noms de serveurs.
Ajout de l'utilisateur borg
:
Pour kdell on place le $HOME de borg dans /backup/borg
pour profiter de la partition dédiée aux backups.
kdell ~ # adduser --system --group --disabled-password --shell /bin/sh --home /backup/borg borg
On prépare le fichier .ssh/authorized_keys
pour permettre la connexion par clef publique depuis les autres serveurs.
kdell ~ # cd ~borg kdell ~borg # sudo -u borg mkdir .ssh kdell ~borg # sudo -u borg touch .ssh/authorized_keys kdell ~borg # chmod 600 .ssh/authorized_keys kdell ~borg # vim .ssh/authorized_keys # ajouter les clefs publiques de root@hexagon et root@kdell
On teste si la connexion sans mot de passe fonctionne depuis le serveur de départ (ici exemple avec dodecagon) et on en profite pour créer le dossier pour la sauvegarde (si pas déjà fait).
ssh borg@kdell.federez.net mkdir dodecagon
Il faut ensuite créer le dépôt :
. /etc/borg-wrapper/common.conf . /etc/borg-wrapper/kdell.conf borg init --debug --encryption=none "${REMOTE}"
Mise en place initiale d'obnam
Prérequis
- Serveur de départ :
obnam
- Serveur d'arrivée : accessible en SFTP. Un utilisateur dédié
obnam
et son home accessible en SFTP par l'utilisateur qui exécute obnam sur le serveur de départ (typiquementroot
) devra être créé (cf. ci-dessous)
Exemple avec hexagon, mais la procédure est la même pour chaque serveur.
Installation d'obnam
Utilisation des dépôts jessie-backports pour avoir une version assez récente. Dans /etc/apt/source.list
ajouter (si nécessaire) :
deb http://http.debian.net/debian jessie-backports main
Puis apt-get update
et avec l'aide d' aptitude
par exemple choisir la version d'obnam provenant des backports.
Préparatifs sur un serveur de destination
Opérations effectuées en root
. Vous pouvez aussi le faire avec sudo
si vous préférez.
Exemple ici avec quigon comme serveur de destination, à répéter pour chaque serveur de destination en adaptant les noms de serveurs.
Ajout de l'utilisateur obnam
:
Pour dodecagon on place le $HOME d'obnam dans /data/obnam
pour profiter de la partition dédiée à obnam
dodecagon ~ # adduser --system --group --disabled-password --shell /usr/lib/sftp-server --home /data/obnam obnam
Pour hexagon on place le $HOME d'obnam dans /home/obnam
pour profiter de la grosse partition où se trouve /home
hexagon ~ # adduser --system --group --disabled-password --shell /usr/lib/sftp-server --home /home/obnam obnam
Pour kdell on place le $HOME d'obnam dans /backup/obnam
pour profiter de la partition dédiée aux backups
kdell~ # adduser --system --group --disabled-password --shell /usr/lib/sftp-server --home /backup/obnam obnam
Pour quigon on place le $HOME d'obnam dans /data/obnam
pour profiter de la grosse partition où se trouve /data
quigon ~ # adduser --system --group --disabled-password --shell /usr/lib/sftp-server --home /data/obnam obnam
On prépare le fichier .ssh/authorized_keys
pour permettre la connexion par clef publique depuis les autres serveurs.
quigon ~ # cd ~obnam quigon ~obnam # sudo -u obnam mkdir .ssh quigon ~obnam # sudo -u obnam touch .ssh/authorized_keys quigon ~obnam # chmod 600 .ssh/authorized_keys quigon ~obnam # vim .ssh/authorized_keys # ajouter les clefs publiques de root@hexagon et root@kdell
On teste si la connexion sans mot de passe fonctionne depuis le serveur de départ (ici exemple avec hexagon) et on en profite pour créer le repository pour la sauvegarde (si pas déjà fait).
hexagon ~ # sftp obnam@quigon.federez.net sftp> mkdir obnam-repository-hexagon sftp> ^D
Configuration d'obnam
Initialisation du répertoire /etc/obnam
:
hexagon ~ # mkdir /etc/obnam && cd /etc/obnam hexagon obnam # touch obnam_hexagon.conf hexagon obnam # touch to_kdell.profile hexagon obnam # touch to_quigon.profile
Contenu des fichiers de config
- Le premier fichier (
obnam_<servername>.conf
) correspond à la conf spécifique au serveur qui crée et envoie ses sauvegardes. On y trouve notamment la liste des chemins à inclure et ceux à exclure. - Les deux fichiers suivants (
to_<servername>.profile
) servent juste à pointer vers le dépôt de sauvegarde sur les deux autres serveurs.
Attention pour les options root
et exclude
: le dernier élément ne doit pas se terminer avec une virgule !
config pour hexagon (2016-05-01 15:40)
Test première sauvegarde
Exemple depuis hexagon vers quigon:
obnam --config /etc/obnam/to_quigon.profile backup
Purger les vieilles générations selon une politique donnée
L'option keep = 20h,30d,52w,10y
dans le fichier de config correspond à la politique suivante :
- garder les 20 dernières générations horaires (comme le script est lancé toutes les 4 heures, ca fait garder les générations horaires pour un peu plus de 3 jours (20*4 = 80 heures))
- garder les 30 dernières générations journalières
- garder les 52 dernières générations hebdomadaires
- garder les 10 dernières générations annuelles
En appelant la commande suivante une fois par jour, les générations qui sont superflues sont supprimées de l'archive.
Exemple depuis hexagon avec l'archive située sur quigon :
obnam --config /etc/obnam/to_quigon.profile forget
Mise en place des cron pour obnam
Les crons se trouvent dans /etc/cron.d/obnam-backup
et /etc/cron.d/obnam-forget
Les /etc/cron.d/obnam-backup sur les 3 serveurs
Les /etc/cron.d/obnam-forget sur les 3 serveurs
. . . 0 . . . 55 5 . + . . | . . | . 50 | 10 H <- K <- Q . | + ^ . | . | backup | +-----+ . | . H -> K -> Q +---------+ | | . ^ + toutes les 4h | 45 +----------------------------------+ 15 +----+ | forget | de 3h à 23h | . | . | +---------+ | . | . | seulement à 0h25 | . | . | | | | +----> 40 | 20 | . | . | H -> K -> Q . | . | ^ + . + . | H <- K <- Q | backup | +------------------> 35 25 <-----------+ + ^ +---------+ . . . 30 . . . +-+ | forget | toutes les 4h ^ | +---------+ de 1h à 21h +---------------------------+ seulement à 2h30
Duplicity
Le système de sauvegarde utilisant duplicity
avec le wrapper duplicity-backup.sh
a été migré vers une nouvelle solution utilisant obnam
. (Zertrin 2016-02-14 23:15)
Page concernant les backups avec duplicity est archivée ici : admin:services:backup-duplicity