Table of Contents
BORG: Sauvegarde de conteneurs LXC
Table of Contents
Ce tutoriel explique comment créer et sauvegarder des conteneurs LXC à l’aide de Borgbackup.
Contenu des sauvegardes
Afin de pouvoir être exploitée la sauvegarde par BorgBackup doit se conformer à un certain nombres de critères.
Conteneurs LXC
LXC (LinuX Container) est un système permettant d'installer plusieurs distributions et applications séparées les unes des autres (comme des machines virtuelles) mais qui partagent malgré tout le même noyau du système hôte.
Si des conteneurs LXC gérés par le backend btrfs de LXC,sont sur des sous-volumes btrfs situés sous $ROOT, les conteneurs LXC 2.x doivent être arrêtés avant de pouvoir prendre un snapshot avec la commande :
lxc-stop -n $CONTAINER-NAME.
Note: S'assurer qu’ils peuvent être arrêtés en toute sécurité sans perte de données, Laisser vide pour ignorer la sauvegarde du conteneur LXC.
Répertoires en dehors du root btrfs
Sauvegarder les données utilisateur avant les données système, au cas où.
Pour restaurer un système amorçable les sauvegardes utiles ont besoin à la fois de /boot /var et /etc.
Si ces dossiers ne sont pas dans le ROOT il faut également les sauvegarder.
Cela pourrait aussi être un bon idée de sauvegarder le ESP UEFI
Bases de données
Les bases de données dans ne seront pas cohérentes à moins de les poser ou d'en prendre un instantané d'une manière ou d'une autre
Les manifest
Le manifest est la racine de la hiérarchie d'objets. Il référence toutes les archives d'un référentiel, et donc toutes les données qu'il contient. Le manifest est réécrit chaque fois qu'une archive est créée, supprimée ou modifiée. Cela ressemble à ceci:
{ b'version ': 1, b'timestamp ': b'2017-05-05T12: 42: 23.042864', b'item_keys ': [b'acl_access', b'acl_default ', ...], b'config ': {}, b'archives ': { b'2017-05-05-system-backup ': { b'id ': b' <ID d'objet binaire sur 32 octets> ', b'time ': b'2017-05-05T12: 42: 22.942864', }, }, b'tam ': ..., }
S'assurer que les manifestes sont placés sur un sous-volume qui sera sauvegardé.
Pour atténuer des attaques du type “Pre-1.0.9 manifest spoofing vulnerability” (CVE-2016-10099), on peut créer des copies de la sortie de borg-list à chaque invocation de btrfs-borg pour disposer d'une listes des archives suvegardées. Mais cela exposera la sortie de borg-list à tout utilisateur ayant un accès root sur le lecteur où ce fichier est stocké.
Exclusion des répertoires de sauvegarde
Le standard de marquage de répertoire en cache est un moyen simple de marquer les répertoires à exclure des sauvegardes ou de tout autre archivage.
La norme propose que si un fichier particulier nommé CACHEDIR.TAG est présent dans un répertoire, le contenu de ce répertoire et tous ses sous-répertoires ne doivent pas nécessairement être archivés.
Ces fichiers peuvent être créés comme ceci:
touch /home/*/.cache/CACHEDIR.TAG
Pour exclure des répertoires de sauvegarde que contient un fichier nommé CACHEDIR.TAG utiliser l'argument
- -exclude-caches
Mise en oeuvre de la sauvegarde
Création du point de montage pour tout le volume btrfs
borgbackup permet de sauvegarder des sous-volumes nommés. Si on ne posséde pas déjà d'un point de montage pour ces volumes, le créer comme ceci
install -d -m 700 /btrfs-admin
- -d traite tous les arguments comme des noms de répertoire
- -m 700 définit le mode de droits (comme chmod),
Ensuite, pour Ubuntu, ajouter le point de montage dans /etc/fstab:
# Le root / est dans le volume logique lg01 /dev/mapper/vg01-lg01 / btrfs defaults,subvol=@ 0 1 #/dev/mapper/vg01-lg02 /bkup btrfs defaults 0 2 /dev/mapper/vg01-lg03 /data btrfs defaults 0 2 #/dev/mapper/vg01-lg01 /home btrfs defaults,subvol=@home 0 2 /dev/mapper/vg01-lg02 /home btrfs defaults,subvol=@home 0 2 /dev/mapper/vg01-sp01 none swap sw 0 0 # dupliquer cette ligne, puis le point de montage et supprime l'argument subvol /dev/mapper/vg01-lg01 /btrfs-admin btrfs defaults defaults 0 1
Préparer le point stable
Prendre un snapshot des subvolumes BTRFS
S'assurer que tous les subvolumes sont synchronisés.
$ btrfs sub sync $ROOT
Prendre un snapshot des subvolumees
$ btrfs sub snap -r $ROOT/$i $ROOT/$SNAPS/$i
S'assurer que tous les subvolumes sont synchronisés.
$ btrfs sub sync $ROOT/$SNAPS/$i
Prendre un snapshot des conteneurs LXC
Arrêter les conteneurs LXC
$ lxc-stop -n $i
Prendre le snapshot
$ lxc-snapshot -n $i
S'assurer que tous les subvolumes sont synchronisés.
$ btrfs sub sync $LXCDIR
Redémarrer le conteneur LXC
$ lxc-start -n $i
Lancer le backup
$ borg create --list --progress --stats --exclude-caches -C lz4 \ [Nom-de-la-sauvegarde]\.lz4 \ [SUBS] [LXCSNAPS] [OTHERS]
- –list: produit une liste détaillée des éléments (fichiers, répertoires,…)
- –progress: indique la progression de la sauvegarde avec (de gauche à droite) Original, Compressé et Dédupliqué (O, C et D, respectivement), puis le nombre de fichiers (N) traités jusqu'à présent, suivi du chemin actuellement traité.
- –stats: fournit des statistiques sur la quantité de données ajoutée - la taille dédupliquée de «Cette archive» est la plus intéressante car elle représente la croissance de votre référentiel.
- –exclude-caches: exclu les répertoires contenant un fichier CACHEDIR.TAG
- -C lz4: algorithme de compression
- [SNAPS]: déssigne les snapshots btrfs à inclure dans la sauvegarde
- [LXCSNAPS]: désigne les snapshots LXC à inclure dans la sauvegarde
- [OTHERS]: désigne les autres dossiers à inclure dans la sauvegarde
Comparaison des algorithme de compression
- none= sans compression
- lz4= Compression super rapide, faible compression (par défaut)
- zlib= Compression moins rapide mais plus élevée (N = 0..9)
- lzma= Compression plus lente, encore plus élevée (N = 0..9)
- auto,lzma= Compresser uniquement les données compressibles avec lzma (N = 0..9)
Nettoyer les instantanés
$ cd $ROOT/$SNAPS $ btrfs sub delete -c $SUBS $ btrfs sub sync $ROOT