« Restic backup » : différence entre les versions
(Ajout de la section "Vérifier l'intégrité d'un dépôt" + Ajout de la méthode de sauvegarde SFTP + ajout de variables mot de passe et localisation du dépôt. + Information sur la durée de sauvegarde.) |
m (Correction d'une erreur de coloration syntaxique.) |
||
(Une version intermédiaire par le même utilisateur non affichée) | |||
Ligne 33 : | Ligne 33 : | ||
* Via la variable de spécification du fichier: <source lang="bash" inline>RESTIC_PASSWORD_FILE=/root/mdp.txt</source> | * Via la variable de spécification du fichier: <source lang="bash" inline>RESTIC_PASSWORD_FILE=/root/mdp.txt</source> | ||
Le dépôt est précisé par le paramètre <source lang= | Le dépôt est précisé par le paramètre <source lang="bash" inline>-r</source> ou la variable <source lang="bash" inline>RESTIC_REPOSITORY</source>. | ||
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. | 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. | ||
Ligne 98 : | Ligne 98 : | ||
===Restauration via le hache=== | ===Restauration via le hache=== | ||
restic restore d46c88f0 -r /srv/test/ --target /tmp/test/ | restic restore d46c88f0 -r /srv/test/ --target /tmp/test/ | ||
Il est possible de restreindre la restauration à un répertoire en particulier: | |||
restic restore d46c88f0 -r /srv/test/ --target /var/lib/ --include lxc/lxc-mediawiki | |||
===Restauration via un montage=== | ===Restauration via un montage=== | ||
Ligne 103 : | Ligne 106 : | ||
''Note: Ceci nécessite <source lang="bash" inline>fuse</source>.'' | ''Note: Ceci nécessite <source lang="bash" inline>fuse</source>.'' | ||
{{attention|Ne pas trop compter sur la méthode ''fuse'' car elle est vraiment pourrie. Elle passera pour des fichiers uniques de taille raisonnable mais pour restaurer un conteneur [[lxc|LXC]] entier c'est vraiment pas top car la connexion fini par se fermer d'elle même.}} | |||
==Supprimer un instantané== | ==Supprimer un instantané== |
Dernière version du 26 février 2020 à 14:52
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).
INFORMATION
Concernant la durée de sauvegarde, j'avais 1,8 To de données à sauvegarder via NFS sur un réseau local en gigabit. Il a fallut environ 4 jours ! Je ne sais pas vraiment ce que fait l'outil pendant ce temps mais c'est vraiment long (d'autant plus que aucune ressources, quelle soit processeur, réseau ou disque et ceux, sur les deux machines, n'est grandement utilisé). Rassurez-vous, les passes suivantes sont très rapides car l'outil scanne le dépôt à 1,5 Go/s (je ne sais pas comment il atteint de tels débits) et ne transfert que les différences.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/
- Via la variable de spécification du fichier:
RESTIC_PASSWORD_FILE=/root/mdp.txt
Le dépôt est précisé par le paramètre -r
ou la variable RESTIC_REPOSITORY
.
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
Sur un volume local
restic backup /etc -r /srv/test/
Sur un volume SSH
restic backup -r sftp:utilisateur@hôte:/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/
Il est possible de restreindre la restauration à un répertoire en particulier:
restic restore d46c88f0 -r /srv/test/ --target /var/lib/ --include lxc/lxc-mediawiki
Restauration via un montage
restic mount /mnt -r /srv/test/
Note: Ceci nécessite fuse
.
ATTENTION
Ne pas trop compter sur la méthode fuse car elle est vraiment pourrie. Elle passera pour des fichiers uniques de taille raisonnable mais pour restaurer un conteneur LXC entier c'est vraiment pas top car la connexion fini par se fermer d'elle même.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...
Vérifier l'intégrité d'un dépôt
En cas de coupure du lien avec le support de sauvegarde, il se peut que l'index du dépôt distant rencontre un problème. Voici la marche à suivre pour régler ça (sorte de fsck):
Vérifier l'intégrité du dépôt
restic check -r /srv/test/
Réparrer le dépôt
restic rebuild-index -r /srv/test/
ASTUCE
Dans le cas d'une sauvegarde via partage NFS, je recommande l'utilisation des paramètres suivants pour le point de montage:rw,noauto,noexec,nosuid,tcp,hard,intr,timeo=14
. Leur utilité est expliqué ici. Ceci permettra de faire une pause dans la transmission en cas d'injoignabilité du serveur de fichiers et de ne pas tout bousiller avec des pertes de paquets (testé et approuvé).