Aller au contenu

Présentation de BorgBackup, l'un des meilleurs outils de sauvegarde disponibles sous Linux - FLOZz'Blog


Messages recommandés

Posté(e)

durée de lecture : 17 min

spacer.png

Ça fait longtemps que je voulais vous parler de BorgBackup, un outil de sauvegarde que j'utilise aussi bien personnellement que professionnellement depuis quelques années maintenant. Bien que disposant de nombreuses fonctionnalités, BorgBackup reste plutôt simple à utiliser, et il bénéficie de plus d'une importante communauté et d'une excellente documentation.

Voici quelques-unes des fonctionnalités et particularités qui m'ont fait basculer sur cet outil.

Premièrement, une gestion efficace du stockage qui permet à la sauvegarde d'occuper un espace réduit. Pour cela BorgBackup déduplique les données en découpant chaque fichier en blocs (appelés chunks), ce qui lui permet de n'écrire que des données uniques dans son stockage. Un gros fichier qui change un peu entre chaque sauvegarde ne sera donc pas intégralement recopié dans le dépôt, seules les parties qui changent le seront.

Cette déduplication est extrêmement efficace, à tel point que l'un de mes stockages contenant des releases de jeux vidéos, donc beaucoup de données redondantes, passe de 2 To à une sauvegarde de seulement 217 Go. Bon ok il s'agit d'un cas assez extrême, mais le gain de place est appréciable ! 😁

À noter également que Borg peut compresser les chunks via différents algorithmes tels que LZ4 (par défaut), zlib, LZMA et zstd. Ce dernier me semble d'ailleurs assez intéressant en termes de ratio temps de calcul / efficacité.

Deuxième point important pour moi : la rapidité des sauvegardes. BorgBackup effectue des sauvegardes incrémentales ; seuls les morceaux de fichiers qui ont changé depuis la précédente sauvegarde sont envoyés dans le dépôt.

Troisièmement, la sécurité. BorgBackup peut chiffrer les sauvegardes, ce qui permet d'éviter que les données ne se retrouvent dans la nature si un jour le disque ou le serveur les stockant était perdu ou infiltré.

Quatrièmement, la possibilité de pouvoir faire aussi bien des sauvegardes sur du stockage « local » (dossier, disque dur externe, partages de fichier SMB, NFS, SSHFS ou autre monté localement) que sur un serveur distant via SSH.

Et pour finir, la simplicité. BorgBackup est facile à utiliser, et il est facile de parcourir les sauvegardes. Ces dernières peuvent en effet être montées comme n'importe quel système de fichier sous Linux (fusermount), ce qui permet de les parcourir avec les outils habituels (terminal, navigateur de fichier,...).

Convaincus ? Alors c'est parti ! 😉

Dans ce premier article, je vais essentiellement vous parler des concepts de base de Borg, et vous expliquer comment faire (et manipuler) une sauvegarde sur un disque local. Je vous parlerais de la sauvegarde à distance via SSH dans un prochain article.

Avant de commencer, on va faire un rapide point de vocabulaire.

Les sauvegardes de BorgBackup s'effectuent dans un dépôt (repo en anglais). Il s'agit tout simplement d'un dossier contenant les données sauvegardées ainsi qu'un ensemble de métadonnées associées.

Voici par exemple ce que contient un dépôt fraichement créé :

+-- 📂️ my-borg-repo/
    +-- 📂️ data/
    +-- 📄️ config
    +-- 📄️ hints.1
    +-- 📄️ index.1
    +-- 📄️ integrity.1
    +-- 📄️ nonce
    +-- 📄️ README

Les sauvegardes effectuées dans un dépôt sont appelées des archives. Une nouvelle archive est donc créée à chaque fois que vous lancez une sauvegarde avec Borg. On conserve généralement plusieurs archives dans un dépôt afin de pouvoir « remonter dans le temps » ; pour retrouver un fichier dans l'état dans lequel il était à une date donnée.

Voici par exemple une partie des archives présentes dans le dépôt contenant la sauvegarde de mon PC portable au moment où j'écris ces lignes :

mylaptop-6c0b6779     Sat, 2022-07-02 10:39:42 [...]
mylaptop-8aa6b519     Fri, 2022-07-29 12:01:03 [...]
mylaptop-dd5ae326     Mon, 2022-08-22 12:00:18 [...]
mylaptop-959e7858     Fri, 2022-09-30 12:00:58 [...]
mylaptop-733bdb15     Mon, 2022-10-31 12:00:48 [...]
mylaptop-d117d0ce     Wed, 2022-11-30 12:00:09 [...]
mylaptop-bb080950     Sat, 2022-12-31 15:38:52 [...]
[...]
mylaptop-6f364ce8     Thu, 2023-07-13 12:00:30 [...]
mylaptop-74dd5447     Mon, 2023-07-17 12:00:14 [...]
mylaptop-f6987d11     Tue, 2023-07-18 12:00:59 [...]
mylaptop-421f0704     Wed, 2023-07-19 12:00:39 [...]

Chacune des archives ci-dessus contient une copie des données de mon dossier home/ dans l'état dans lequel elles se trouvaient à la date de la sauvegarde. Comme vous pouvez le constater, je peux remonter jusqu'à un an dans le passé, ce qui me laisse largement le temps de récupérer un fichier supprimé par erreur. 😁

L'installation de BorgBackup est assez simple car il est disponible dans les dépôts de la plupart des distributions Linux. Il est également disponible dans les ports de plusieurs systèmes BSD, y compris pour macOS via Homebrew, et comme il s'agit d'un logiciel en Python, il peut également être installé avec pip.

Pour l'installer sous Debian / Ubuntu, le plus simple est de passer par apt :

sudo apt install borgbackup

Pour les autres distributions, les autres OS et les méthodes d'installation plus « exotiques » je vous laisse consulter la documentation d'installation officielle.

Avant de pouvoir sauvegarder des données, il nous faut commencer par créer un dépôt pour les accueillir. Disons que je souhaite sauvegarder mes données sur un disque dur externe monté dans le dossier "/media/fabien/backup-hdd/". La commande pour créer le dépôt sur ce disque sera :

borg init --encryption=repokey /media/fabien/backup-hdd/my-borg-repo

L'option --encryption indique la méthode de chiffrement que l'on souhaite utiliser. Voici quelques-unes des valeurs possibles pour cette option :

  • repokey, la méthode utilisée dans la commande ci-dessus, indique que Borg doit générer une clef de chiffrement qui sera stockée dans le dépôt. Cette clef de chiffrement sera elle-même chiffrée à l'aide d'un mot de passe qui vous sera demandé par la suite. Ce mot de passe sera nécessaire pour effectuer des opérations sur le dépôt (sauvegarde, listing, accès aux données,...).
  • keyfile, pareil que pour repokey, sauf que la clef sera stockée sur votre machine au lieu d'être stockée dans le dépôt. Si vous choisissez cette méthode, il faudra bien penser à sauvegarder la clef dans un endroit sûr, car si vous la perdez, vous ne pourrez plus déchiffrer vos données !
  • none, aucun chiffrement. Les données seront stockées en clair dans le dépôt.

Si, comme moi, vous avez choisi la méthode de chiffrement repokey, Borg va vous demander d'entrer un mot de passe. Choisissez en un fort et dont vous vous souviendrez. Si vous perdez ce mot de passe vous ne serez plus en mesure d'accéder à vos sauvegardes !

Enter new passphrase:
Enter same passphrase again:
Do you want your passphrase to be displayed for verification? [yN]: n
[...]

Votre dépôt est maintenant créé et devrait ressembler à ça, comme vu tout à l'heure :

+-- 📂️ my-borg-repo/
    +-- 📂️ data/
    +-- 📄️ config
    +-- 📄️ hints.1
    +-- 📄️ index.1
    +-- 📄️ integrity.1
    +-- 📄️ nonce
    +-- 📄️ README

Maintenant que l'on a créé le dépôt, nous allons pouvoir créer notre première archive. Imaginons pour l'exemple que je souhaite sauvegarder mes images et ma musique. La commande pour effectuer cette sauvegarde sera la suivante :

borg create                                                         \
    --list                                                          \
    /media/fabien/backup-hdd/my-borg-repo::'image-et-musique-{now}' \
    /home/fabien/Images/                                            \
    /home/fabien/Musique/

Note

Note : Ici j'ai découpé la commande en plusieurs lignes pour en faciliter la lecture, mais vous pouvez l'écrire sur une seule ligne en supprimant les "\" qui échappent les fins de ligne.

Si le dépôt est chiffré, Borg vous demandera le mot de passe puis procèdera à la sauvegarde. Cette opération peut prendre un certain temps, surtout la première fois puisque toutes les données vont devoir être copiées.

Détaillons un peu la commande ci-dessus.

  • Pour commencer borg create permet de lancer Borg en lui indiquant que l'on souhaite créer une nouvelle archive. On veut sauvegarder des trucs quoi...
  • Ensuite, l'option --list demande à Borg de lister les fichiers qu'il sauvegarde dans la console. Sans cette option il n'écrit rien et on ne sait rien de sa progression.
  • La ligne suivante donne le chemin du dépôt et le nom de l'archive sous la forme "<repo>::<archive_name>". On peut noter la présence de {now} dans le nom de l'archive ; il s'agit d'un placeholder que Borg remplacera automatiquement par la date de création de l'archive. Il en existe quelques autres comme {hostname} qui sera remplacé par le nom de la machine ou {user} pour le nom de l'utilisateur qui effectue la sauvegarde. Je vous invite à lire la documentation de Borg sur les placeholders pour une liste exhaustive.
  • Enfin, les lignes suivantes sont les chemins des dossiers et fichiers à sauvegarder.

Imaginons maintenant que je souhaite sauvegarder mes images, mais sans les fichiers PNG et JPEG (par ce que je fais ce que je veux 😛️). Je peux alors réécrire la commande précédente comme ceci :

borg create                                              \
    --list                                               \
    --exclude='*.png'                                    \
    --exclude='re:\.jpe?g$'                              \
    /media/fabien/backup-hdd/my-borg-repo::'image-{now}' \
    /home/fabien/Images/

Il est possible d'utiliser des patterns dans divers formats, du globing simple (fnmatch) comme je l'ai fait pour les PNGs, aux regexp comme on peut le voir pour l'expression utilisée pour les JPEGs, préfixée de "re:". Pour plus d'informations sur les formats supportés, je vous laisse consulter la documentation de Borg au sujet des patterns.

Je pense qu'on a fait le tour des points importants pour la création d'archives ; je vous laisse lire la documentation officielle si vous souhaitez plus de détails :

Comme je l'ai indiqué plus tôt, l'accès aux données est très simple : on peut monter les sauvegardes comme un système de fichier. Pour cela il nous faut un dossier vide. Généralement le dossier "/mnt" est vide et peut être utilisé, sinon il suffit d'en créer un avec la commande "mkdir" :

mkdir /home/fabien/mes_sauvegardes

Ensuite on peut procéder au montage :

borg mount  /media/fabien/backup-hdd/my-borg-repo  /home/fabien/mes_sauvegardes

On peut à présent se promener dans l'ensemble des archives avec les outils habituels :

$ ls -l /home/fabien/mes_sauvegardes
drwxr-xr-x 1 fabien fabien 0 juil. 27 13:36 image-et-musique-2023-07-27T13:36:41
drwxr-xr-x 1 fabien fabien 0 août   3 13:52 image-et-musique-2023-08-03T13:52:16
drwxr-xr-x 1 fabien fabien 0 août   3 13:52 image-et-musique-2023-08-03T13:52:28
drwxr-xr-x 1 fabien fabien 0 août   3 13:52 image-et-musique-2023-08-03T13:52:47
drwxr-xr-x 1 fabien fabien 0 août   3 13:55 image-et-musique-2023-08-03T13:55:23
drwxr-xr-x 1 fabien fabien 0 août   3 13:56 image-et-musique-2023-08-03T13:56:34

Ici on a monté l'ensemble du dépôt mais il est également possible de n'accéder qu'à une seule archive si on le souhaite, il faudra alors préciser laquelle :

borg mount                                                                       \
    /media/fabien/backup-hdd/my-borg-repo::image-et-musique-2023-07-27T13:36:41  \
    /home/fabien/mes_sauvegardes

Cette fois-ci on retrouve uniquement les fichiers de l'archive visée dans point de montage :

$ ls -l /home/fabien/mes_sauvegardes
drwxr-xr-x 1 fabien fabien 0 août  28 13:09 home

Une fois que l'on a terminé de farfouiller dans les archives, on peut démonter le système de fichier à l'aide de la commande suivante :

borg umount /home/fabien/mes_sauvegardes

... Et éventuellement supprimer le dossier vide si on en avait créé un 😉️ :

rmdir /home/fabien/mes_sauvegardes

Note

NOTE : Sur les gros dépôts, l'accès aux archives peut prendre un peu de temps. Lorsque vous allez faire le premier accès aux dossiers montés, le terminal peut freezer quelques dizaines de secondes, mais une fois ce ralentissement initial passé, la suite de la navigation sera fluide.

Pour restaurer une archive, il y a deux possibilités.

La première est de monter l'archive à restaurer comme on l'a vu dans la section précédente, et d'utiliser les outils classiques pour copier les fichiers (commande cp, rsync, ou même votre navigateur de fichier graphique).

La seconde solution est d'utiliser la commande "borg extract".

Si vous souhaitez utiliser cette seconde solution, je tiens à attirer votre attention sur le fait que l'extraction se fait dans le dossier courant ; il faudra donc se placer au bon endroit pour restaurer les fichiers.

Si je souhaite restaurer les images et les musiques que j'avais sauvegardées plus tôt, il faudra donc que je m'y prenne de la façon suivante :

# On va à la racine du disque car la sauvegarde contient le chemin des
# fichiers depuis la racine
cd /
# Puis on lance la restauration de l'archive désirée
borg extract  \
    --list    \
    /media/fabien/backup-hdd/my-borg-repo::image-et-musique-2023-07-27T13:36:41

Si le dépôt est chiffré, Borg nous demandera bien sûr le mot de passe, puis il procédera à l'extraction des fichiers. Ici encore, l'option --list permet de suivre la progression.

Il est également possible de demander à Borg de n'extraire que certains fichiers en particulier ou d'en ignorer d'autres. Je vous laisse consulter la documentation de Borg pour en savoir plus :

Après un certain temps d'utilisation, le dépôt peut contenir pas mal d'archives qui ne nous sont plus forcément utiles, il est alors temps de faire un peu de ménage.

« Élaguer » le dépôt

Supprimer manuellement chaque archive en trop ne serait vraiment pas pratique, c'est pourquoi Borg fournit une commande pour « élaguer » le dépôt de manière plus intelligente. Voici un exemple de son utilisation :

borg prune                        \
    --list                        \
    --prefix 'image-et-musique-'  \
    --keep-daily '7'              \
    --keep-weekly '4'             \
    --keep-monthly '12'

Détaillons un peu les paramètres de la commande ci-dessus :

  • borg prune demande à Borg de faire le ménage dans les archives,
  • --list permet de lister les actions effectuées afin de suivre la progression,
  • --prefix permet d'indiquer qu'il ne faut traiter que les archives dont le nom commence par le préfixe indiqué (il est possible d'utiliser ici des placeholder comme {hostname} ou {user} par exemple),
  • enfin, les trois paramètres suivants indiquent que l'on souhaite conserver 1 archive par jour pendant 7 jours, puis 1 par semaine pendant 4 semaines, puis 1 par mois pendant 12 mois. Concrètement, cela signifie que si l'on avait effectué une sauvegarde chaque jour de l'année 2023 et que l'on exécutait la commande ci-dessus le 31 décembre 2023, seules les archives suivantes seraient conservées :
Calendrier des sauvegardes (note : la sauvegarde mensuelle de décembre 2022 n'a pas été représentée ici mais serait également conservée)

Calendrier des sauvegardes (note : la sauvegarde mensuelle de décembre 2022 n'a pas été représentée ici mais serait également conservée)

La commande borg prune prend pas mal d'autres arguments, pour conserver des archives annuelles, horaires, et même chaque minute ! Pour en savoir plus je vous mets le lien vers la documentation officielle :

Libérer l'espace de stockage

Lorsque l'on utilise les commandes borg delete et borg prune, Borg supprime les références aux archives demandées, mais il ne supprime pas les chunks qui ne sont plus utiles ; l'espace disque occupé par le dépôt ne diminue donc pas.

On peut facilement s'en rendre compte en comparant l'espace disque occupé avant et après une commande borg delete :

$ du -sh /media/fabien/backup-hdd/my-borg-repo
6,3G        /media/fabien/backup-hdd/my-borg-repo
$ borg delete /media/fabien/backup-hdd/my-borg-repo::image-et-musique-2023-07-27T13:36:41
Enter passphrase for key /media/fabien/backup-hdd/my-borg-repo:
$ du -sh /media/fabien/backup-hdd/my-borg-repo
6,3G        /media/fabien/backup-hdd/my-borg-repo

Comme vous pouvez le constater, le dépôt ne change pas de taille.

Pour libérer effectivement l'espace disque, il faudra faire appel à la commande borg compact :

borg compact --progress /media/fabien/backup-hdd/my-borg-repo

Borg ne demandera pas de mot de passe pour cette commande car il n'a pas besoin de déchiffrer les données pour éliminer les chunks qui ne sont plus utilisés.

Si on regarde à nouveau l'espace disque occupé par le dépôt, on s'aperçoit que cette fois-ci, il a bien diminué :

$ du -sh /media/fabien/backup-hdd/my-borg-repo
5,6G        /media/fabien/backup-hdd/my-borg-repo

Il n'y a pas grand-chose de plus à dire sur cette commande, je vous mets toutefois le lien vers la documentation pour référence :

Que ce soit intentionnellement ou à cause d'une coupure de courant ou d'une perte de connexion réseau, c'est une question importante que je me suis très vite posée. Il ne serait en effet pas acceptable que le dépôt puisse être corrompu en cas d'interruption.

La première chose à savoir c'est que lors d'une sauvegarde, Borg n'écrit que de nouveaux chunks dans le dépôt, il ne modifie pas ceux existants. Il y a donc peu de chance qu'il arrive à corrompre lui-même ses données.

Le seul cas de dépôt corrompu auquel j'ai été confronté était dû à un disque défectueux et à l'utilisation d'un système de fichier qui n'a pas été en mesure de réparer les dégâts. C'est pourquoi il convient de disposer de plusieurs sauvegardes, stockées sur différents supports, si possible fiables (par exemple un RAID avec un système de fichiers capable de se réparer tout seul, comme Btrfs ou ZFS dans certaines configurations). Pour la petite histoire, la corruption n'était pas énorme et Borg a été capable de réparer les dégâts (avec la commande borg check --repair).

Bref, ce qu'il faut retenir c'est qu'il y a vraiment très peu de chance que Borg puisse causer la corruption d'un dépôts, et c'est tant mieux.

Il y a par contre quelques points importants à savoir sur les interruptions de sauvegarde.

Checkpoints

Le premier c'est que Borg écrit des checkpoints à intervalle régulier (par défaut toutes les 30 minutes) ainsi que lors de l'interruption volontaire d'une sauvegarde (par exemple si vous tapez Ctrl+C dans la console).

Il est possible d'afficher les checkpoints en ajoutant le paramètre --consider-checkpoints à la commande borg list :

borg list --consider-checkpoints /media/fabien/backup-hdd/my-borg-repo

Ce qui va nous donner un résultat similaire à celui-ci:

[...]
image-et-musique-2023-08-03T13:56:34 Thu, 2023-08-03 13:56:36 [2b110ac4f8c38e79d3e3f58f3a1f3433f6ba26a4d445c9f3f10afb571c74dab1]
image-et-musique-2023-09-13T13:09:21 Wed, 2023-09-13 13:09:24 [76458cd366d9fa60703fe1ceae64e4380ee4949eb4c6bf8e50961ce7bf124df0]
image-et-musique-2023-09-13T13:10:05.checkpoint Wed, 2023-09-13 13:10:07 [5c0c61a49875b188920bbae20d8656935cc5f06bf1e638ce69fe6a31edb66e54]

On peut voir ici que le nom de la dernière archive se termine par .checkpoint. Il s'agit d'une archive partielle (elle ne contient pas toutes les données que l'on souhaitait y sauvegarder), et il est préférable de ne pas y toucher sauf si on est vraiment désespérés (si l'on ne dispose vraiment d'aucune archive complète ou que l'on cherche à restaurer un fichier récent qui ne se trouve dans aucune autre archive).

La prochaine fois que vous relancerez une sauvegarde à l'aide de la commande borg create, celui-ci ne touchera pas aux checkpoints et recommencera une nouvelle archive depuis zéro. Vous vous interrogez surement sur l'intérêt de ces checkpoints s'il ne faut pas y toucher et si on reprend tout depuis le début à chaque fois... À quoi ça peut bien servir ?

Eh bien la réponse vient du système de sauvegarde différentielle et de la déduplication des données. Borg va recommencer sa sauvegarde depuis zéro, MAIS comme une partie des données auront déjà été écrites dans le dépôt, elles n'auront pas besoin d'être compressées / chiffrées / transférées à nouveau ; la sauvegarde sera donc beaucoup plus rapide.

À noter que les checkpoints seront automatiquement supprimés par le prochain borg prune que vous lancerez, sauf s'il s'agit de l'archive la plus récente du dépôt. Ainsi, pour éliminer les archives en .checkpoint, le mieux et de relancer une sauvegarde complète avec borg create, puis de lancer un petit borg prune pour supprimer les archives (et les checkpoints) inutiles, et on peut éventuellement terminer par un borg compact pour libérer l'espace disque.

Lock

Le second point important à savoir lorsqu'une sauvegarde est brutalement interrompue, c'est que le dépôt peut se retrouver verrouillé. Borg place en effet un petit verrou lorsqu'il travaille sur un dépôt afin d'éviter les accès concurrents.

Si vous vous retrouvez dans cette situation, commencez par vérifier qu'aucun processus n'est en train d'accéder au dépôt (une autre machine qui serait en train d'effectuer une sauvegarde dans un dépôt commun par exemple), et si vous êtes certains que personne n'est en train de travailler sur le dépôt, déverrouillez-le à l'aide de la commande suivante :

borg break-lock /media/fabien/backup-hdd/my-borg-repo

Vous aurez alors à nouveau pleinement accès à vos sauvegardes.

J'utilise Borg depuis un bout de temps maintenant et je n'ai jamais rencontré de problème insoluble et je n'ai jamais eu à douter de sa fiabilité. Je continuerai donc à l'utiliser partout où je le peux pour gérer mes sauvegardes.

Si le sujet vous intéresse, je vous invite à lire la FAQ de Borg qui est très intéressante et répond à pas mal de questions que l'on peut se poser :

Cet article est à présent terminé et je vous donne rendez-vous d'ici deux semaines environ pour un second article sur Borg, dans lequel on s'intéressera à la sauvegarde sur un serveur distant via SSH et à l'automatisation des sauvegardes.

Bonne journée ! 😁

Afficher l’article complet

  • Ldfa a modifié le titre en Présentation de BorgBackup, l'un des meilleurs outils de sauvegarde disponibles sous Linux - FLOZz'Blog

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer.