Restic backup

De Wiki doc

Révision datée du 10 janvier 2019 à 19:32 par Ycharbi (discussion | contributions) (Page créée avec « Category:sauvegardes_et_archivage Restic est une application de sauvegarde semblable à Borg backup se basant sur les principes de Git. Les sauvegardes se pr... »)
(diff) ← Version précédente | Voir la version actuelle (diff) | Version suivante → (diff)


Restic est une application de sauvegarde semblable à Borg backup se basant sur les principes de Git. Les sauvegardes se présentes donc sous forme de dépôt haché au lieu d'un dépôt de fichier avec un index de rangement. Avec ce principe, les fichiers ne sont pas récupérables directement via le système de fichiers. Il faut donc obligatoirement passer par Restic pour naviguer dans les sauvegardes. Passer cette contraintes, ce mode de fonctionnement apporte des atouts non négligeable puisque l'outil permet la dé-duplication à la source, la compression et le chiffrement des données. La gestion des versions est quand à elle totalement automatisé, ce qui est un plus non négligeable afin de ne pas avoir à gérer des scripts de roulement fastidieux.

Elle a également l'avantage d'être développée en Go. Elle n'a donc aucune dépendance (le plus de ouf).

Installation

Restic est présent dans les dépôts Debian. Je l'utilise avec Stretch.

apt install restic fuse

Note: le paquet fuse est facultatif et permet de monter lé dépôt de sauvegarde afin de naviguer dedans en mode fichiers (utile pour récupérer des données en particulier).

Utilisation

Avoir de l'aide

La meilleure documentation de l'outil reste celle fournie avec l'argument --help. Il est utilisable en complément de chaque paramètre afin d'apprendre le fonctionnement de Restic (il n'y a pas de page de man fournie avec le paquet).

Usage:

restic --help
restic <commande> --help

Initialisation d'un dépôt de sauvegarde

restic init -r /srv/test/

Note: le répertoire "test" sera automatiquement créé.

INFORMATION

Restic chiffre obligatoirement le dépôt en AES 256 bits. Un mot de passe est donc demandé à la création de celui-ci. Ne le perdez pas car sinon les données sont irrécupérables.

Par la suite, il est possible de mettre le mot de passe dans un fichier ou une variable d'environnement afin de ne pas avoir à le taper à chaque commande:

  • Via un fichier (mdp=test pour l'exemple): echo "test" > /root/mdp.txt; restic <commande> -r /srv/test/ -p /root/mdp.txt
  • Via la variable RESTIC_PASSWORD: RESTIC_PASSWORD=test restic <commande> -r /srv/test/

Je précise également que la compression et le chiffrement sont effectués coté client, aucune donnée ne circule en clair sur le réseau et il n'y a pas besoin d'avoir une machine de guerre en guise de serveur de sauvegarde comme avec ZFS.

Changement du mot de passe

restic key passwd -r /srv/test/

Sauvegarde

Les sauvegardes se font sous forme d'instantanés (snapshot). Le fait de refaire une deuxième sauvegarde ne transférera que la différence avec les sauvegardes précédentes et ceux, même si un fichier a été copier plusieurs fois entre temps. Restic analyse chaque fichiers et dé-duplique les données à envoyer avant le transfert ce qui représente un gain de ressource réseau et disque considérable et évite de trop se prendre la tête lors de l'usage massif de mount --bind (l'outil se démerde).

ASTUCE

Le dépôt Restic étant lui même un dossier, il peut être sauvegarder ou déplacé via un bête copier/collé ou via Rsync sur un autre support.

Sauvegarde simple

restic backup /etc -r /srv/test/

Sauvegarde avec exclusion de répertoire

Il est possible d'indiqué plusieurs répertoires à exclure via le paramètre -e.

L'exclusion des répertoires suit la même logique que pour Rsync. Les répertoires exclus sont relatifs au répertoire de sauvegarde. C'est à dire que si je sauvegarde /etc et que je souhaite exclure "/etc/default/", je dois préciser "default" relativement à "/etc" de sorte à avoir "default/" ou "/default/". Restic fait un espèce de chroot sur le dossier à sauvegarder si vous préférez (et ce comportement est similaire dans tout les outils de sauvegarde qu'il m'ait été donné de voir).

restic backup /etc -e default -e apt -r /srv/test/

De la même manière, il est possible d'utiliser un fichier contenant la liste des données à exclure de la sauvegarde avec le paramètre --exclude-file=.

restic backup /etc --exclude-file=/srv/excludes-restic.txt -r /srv/test/

Il ne doit y avoir qu'une seule donnée à exclure par ligne comme ceci:

root/.cache/
/var/lib/lxc/lxc-*/rootfs/proc/
/var/lib/lxc/lxc-*/rootfs/sys/
/var/lib/lxc/lxc-*/rootfs/dev/
/var/lib/lxc/lxc-*/rootfs/tmp/
/var/lib/lxc/lxc-aptmirror/rootfs/var/www/apt-mirror/mirror/
/var/lib/lxc/lxc-aptmirror/rootfs/var/spool/apt-mirror/skel/
/var/lib/lxc/lxc-web/rootfs/var/www/ressources/Logiciels/
/var/lib/lxc/lxc-web/rootfs/var/www/ressources/Partage/
/var/lib/lxc/lxc-web/rootfs/var/www/ressources/Films/

ATTENTION

Le répertoire ~/.cache/ ne doit pas être inclus dans la sauvegarde car il est massivement utilisé par Restic au moment de cette même sauvegarde. Vous aurez compris que ça peut vite foutre la merde si vous sauvegardez un répertoire qui stock les informations de cette même sauvegarde en temps réelle (une espèce de merde auto récursive en somme).

Sauvegarde avec inclusion de répertoire

Au même titre que l'exclusion, l'inclusion peut se faire en spécifiant les répertoires à sauvegarder en les séparant par des espaces ou via un fichier avec le paramètre --files-from=. Il est bien sûr possible de combiner le tout à l'exclusion.

restic backup --files-from=/srv/includes-restic.txt --exclude-file=/srv/excludes-restic.txt -r /srv/test/

Note: le fichier d'inclusion suit la même logique que le fichier d'exclusion à ceci près que les chemins doivent être absolus à la racine du système en cours d'exécution.

/root
/home
/etc
/var/log
/var/lib/lxc
/var/lib/qemu
/srv
/boot

Lister les instantanés

restic snapshots -r /srv/test/

Cette commande indique le hache de chaque instantané. Cette donnée sera utilise pour interagir avec eux.

Restauration

Restauration via le hache

restic restore d46c88f0 -r /srv/test/ --target /tmp/test/

Restauration via un montage

restic mount /mnt -r /srv/test/

Note: Ceci nécessite fuse.

Supprimer un instantané

restic forget 17eb8d3d -r /srv/test/

Il est possible d'organiser un roulement des sauvegarde en oubliant le Nème dernier instantané:

restic forget --keep-last 2 -r /srv/test/

Note: Avec ceci, Restic ne garde que les 2 derniers instantané.

Il est également possible de faire un roulement bien plus complexe:

restic forget --keep-daily 7 --keep-weekly 5 --keep-monthly 12 --keep-yearly 1 -r /srv/test/

Dans ce cas, Restic va garder les 7 derniers jours de la semaine en cours et ne va garder que le dernier jour en passant à la semaine suivante (au bout de 8 jours, nous n'auront donc que 2 sauvegardes: la semaine dernière et le premier jour de la nouvelle semaine, qui peut aller jusqu'à 7 - donc 8 sauvegardes au bout de 14 jours). Ensuite nous ne gardons que que les 5 dernières semaines, nous ne pouvons donc avoir au maximum que les 7 derniers jours et les 5 dernières semaines (qui sont elles-même une sauvegarde du dernier jour de chacune de ces 5 semaines passée). Idem pour les 12 derniers mois. Le tout sur un ans, ce qui doit correspondre à 2 ans - 1 sauvegarde.

Je précise que ce que je dit est le fruit de ma compréhension du bousin vu que je n'utilise pas l'outil depuis très longtemps. On verras bien si la pratique valide la théorie...

Source