BorgBackup ou la sauvegarde facile
- 5 minutes de lecture
Jusqu’à très récemment, je ne me préoccupais pas de la pertinence de mes
sauvegardes de fichiers personnels réalisées naïvement avec un script rsync
.
C’est honteux dans nos métiers, mais l’adage du cordonnier s’est vérifié avec
moi lors de l’exécution d’un vulgaire find $NOVAR/ -delete
durant des tests.
Après cet épisode et l’amertume d’avoir perdu quelques travaux, ou la surprise de découvrir les ravages de leur disparition plusieurs semaines après ma fatale erreur, je me suis tourné vers l’outil incontournable dont tous mes collègues me parlaient : BorgBackup
Des atouts séduisants
Cela fait à présent deux années que je travaille au quotidien sur Linux pour mon activité professionnelle. Étant responsable de mon matériel et des données que je manipule, il n’existe pas de politique particulière pour les sauvegardes régulières ni le stockage de celles-ci.
Mon précédent script était passablement trivial, à savoir :
- Sauvegarder une copie unique des documents courants ;
- Sauvegarder une liste des fichiers de configuration, appelés dotfiles ;
- Exclure les projets contenant un répertoire
.git
; - Exclure les fichiers de plus de 200 Mo.
Le tout sur une clé USB de 8 Go, chiffrée avec le système LUKS pour se prévenir de la perte ou du vol dans un espace public dudit support.
Borg (son petit nom), permet de répondre correctement à l’ensemble de ces points, et le fait à merveille. En bénéficiant de la déduplication et de la compression, j’ai pu conserver ma clé USB et m’engager dans la rédaction d’un nouveau script plus complet.
Exclusion de fichiers et de répertoires
Certains fichiers ou répertoires cachés vivent leur vie sur nos postes, et un fichier d’exclusion peut être transmis à Borg pour ne pas les inclure dans la routine de sauvegarde. Le mien est relativement léger pour le moment, et pourrait s’enrichir avec l’expérience.
# ~/.config/borg/exclude.list
/home/**/.git
/home/**/.vagrant
/home/*/.local
/home/*/.cache
/home/*/.mozilla
/home/*/.thunderbird
/home/*/.config/chromium
/home/*/.config/discord
/home/*/.npm
/home/*/.cpan
Déduplication et rétention d’une semaine
Le gain remarquable entre mon script et la nouvelle solution que m’offre Borg réside dans son algorithme de déduplication, où la version d’un fichier n’est stockée qu’une seule fois jusqu’à une éventuelle modification, permettant de ne conserver qu’une copie de mes documents sur une bien plus longue période avec un coût de stockage ridiculement faible.
À chaque exécution, je demande le rapport de sauvegarde avec l’option --stats
dont voici un exemplaire sur l’exécution de ce matin.
------------------------------------------------------------------------------
Archive name: florent-2021-08-24T08:42:05
Archive fingerprint: be38707dd52f5a86f8e75fe3ad4997aae58b3016366a988b7cb37ce3b
Time (start): Tue, 2021-08-24 08:42:06
Time (end): Tue, 2021-08-24 08:42:06
Duration: 0.96 seconds
Number of files: 3720
Utilization of max. archive size: 0%
------------------------------------------------------------------------------
Original size Compressed size Deduplicated size
This archive: 2.11 GB 1.78 GB 480.51 kB
All archives: 12.63 GB 10.67 GB 1.75 GB
Unique chunks Total chunks
Chunk index: 3974 25888
------------------------------------------------------------------------------
Pour une semaine de rétention, l’espace total consommé sur le montage USB n’excède pas (encore) les 1,75 Go alors que les images décompressées pèsent au total 12,63 Go que ne parvennait pas à stocker mon ancien script sur plusieurs jours.
Au passage, la durée d’exécution est significativement réduite chaque jour grâce à ce mécanisme, qui ne sélectionne que les nouveautés d’une exécution à l’autre.
Un montage virtuel pour naviguer dans le temps
L’outil propose deux options pour la restauration :
extract
pour restaurer le contenu d’une archive dans le répertoire courant (doc) ;mount
pour visualiser les fichiers ou dossiers à restaurer, voire les déplacer manuellement dans le répertoire cible avec un outil graphique (doc).
Cette seconde proposition est particulièrement utile pour naviguer d’une archive à une autre, à la recherche d’un fichier perdu dans le temps. Le montage s’effectue à l’aide du système de fichiers FUSE qui ne nécessite aucun droit administrateur.
Pour être utilisé à partir de Borg, le paquet python-llfuse
sera requis selon
votre distribution.
Planification avec systemctl
Ce fut une découverte lors de mes lectures émerveillées de la documentation
et des ressources de la communauté française d’Archlinux. N’étant pas
particulièrement fan de cron
pour un usage personnel, j’ai suivi à la lettre
la configuration d’un service utilisateur et du timer associé pour garantir le
lancement de la sauvegarde chaque jour, 30 minutes après le démarrage de mon
système.
# .config/systemd/user/borg.service
[Unit]
Description=Borg backup
[Service]
Type=oneshot
ExecStart=%h/.bin/borg-create.sh
# .config/systemd/user/borg.timer
[Unit]
Description=Daily Borg backup
Documentation=man:borg
[Timer]
OnBootSec=30min
OnUnitActiveSec=1d
[Install]
WantedBy=timers.target
Une fois le service activé, je n’ai qu’à attendre chaque matin la notification
de fin de sauvegarde pour consulter les rapports avec la commande journalctl
.
journalctl --user -xeu borg.service
août 24 08:42:02 florent systemd[877]: Starting Borg backup...
août 24 08:42:27 florent systemd[877]: Finished Borg backup.
août 24 08:42:27 florent systemd[877]: borg.service: Consumed 1.535s CPU time.
Conclusion
De trop nombreux utilisateurs (Windows notamment) comptent sur leur miraculeuse corbeille, jusqu’à ce qu’une véritable suppression ne survienne ou qu’un disque défaillant fasse des siennes. Pour s’assurer qu’une donnée ne disparaisse pas définitivement, la sauvegarde doit être correctement mise en place, idéalement sur plusieurs périodes et sur plusieurs supports.
Le conseil vaut aussi bien pour les bases de données que pour les fichiers personnels : une sauvegarde n’est fiable que si la restauration de son contenu est possible. Une corruption de l’archive, une erreur dans l’exécution du script ou une mise à jour majeure de l’outil de sauvegarde sont autant de situations qui peuvent rendre vos sauvegardes irrécupérables.
Prenez soin de vos sauvegardes.