Outils pour utilisateurs

Outils du site


borgbackup

BorgBackup

BorgBackup est un logiciel de sauvegarde. Cette page est un mémo rapide des principales commandes.

Avantages de Borg:

  • C'est un simple exécutable avec peu de dépendances
  • Syntaxe simple
  • Sauvegardes incrémentales (il historise les anciennes versions des fichiers)
  • Sauvegardes différentielles (il ne sauvegarde que les parties modifiées des fichiers)
  • Compression (lz4 extrêmement rapide par défaut, mais peu aussi faire gzip, zstd et lzma)
  • Dé-duplication (les fichiers (ou portions de fichiers) identiques ne seront pas sauvegardés en double)
  • Chiffrement (optionnel)
  • Vérification d'intégrité des indexes et des données (peut détecter la corruption de données (bitrot))
  • Sauvegardes vers un répertoire local ou ssh.
  • Possibilité de fonctionner en mode "append-only"
  • Les backups peuvent être interrompus et repris sans crainte pour leur intégrité.
  • Les backups sont accessibles en FUSE (sous forme de simples répertoires)
L'un des avantages majeurs de Borg est son gain phénoménal de place grâce à la déduplication et la compression.
Les instructions ci-dessous concernent les versions 1.x de Borg. À partir de Borg 2.0, les commandes pourront être légèrement différentes. Borg 2 n'est pas encore recommandé, car par encore stable.

Vocabulaire

  • repo : Un "repo" borg est un répertoire dans lequel borg va stocker ses sauvegardes.
  • archive : Correspond à une sauvegarde. Un repo borg contient une ou plusieures "archives".
  • Une sauvegarde précise est identifiée en mentionnant le repo, deux fois deux points, puis l'archive: repo::archive

Installation

Borg est présent dans la plupart des dépôts des distributions. Sous Debian/Ubuntu/LinuxMint:

sudo apt install borgbackup

Mais Borg étant un simple exécutable sans dépendances lourdes, vous pouvez aussi télécharger juste l'exécutable (voir cette page) et l'installer à la main.

Exemple pour un Linux 64 bits:

sudo curl -L https://github.com/borgbackup/borg/releases/latest/download/borg-linux64 -o /usr/local/bin/borg
sudo chmod 755 /usr/local/bin/borg

Utilisation

  • En supposant que vous voulez faire vos sauvegardes dans le répertoire /repo
  • Initialiser le repo Borg (À faire une seule fois: C'est ce qui va "préparer" le répertoire qui va recevoir les backups):
    borg init --encryption=repokey-blake2 /repo
    • Par défaut, c'est chiffré avec mot de passe. Pour faire sans chiffrement, faire:
      borg init --encryption=none /repo
    • Les "repos" peuvent être locaux ou distants.
    • ⚠️ Attention à bien lire l'avertissement dans les notes en bas de cette page si vous utilisez du chiffrement sans l'option repokey.
  • Faire un backup:
    borg create /repo::{now} /source
    • Cela va faire une sauvegarde du répertoire /source dans le repos borg /repo avec comme nom la date/heure du moment.
    • Pour afficher plus d'informations, ajouter -v --progress
    • Vous pouvez bien sûr inclure plusieurs répertoires sources dans le backup: borg create /repo::{now} /source1 /source2 /source3
    • Exclusions:
      • Avec --exclude. Vous pouvez lister les dossiers ou fichiers à exclure. Exemple: --exclude={'dossierA/','dossierB/dossierB2/','dossierC/','*.vdi'}
      • Avec --exclude-caches : Borg ignorera alors tout répertoire (et ses sous-répertoires) s'il contient un fichier nommé CACHEDIR.TAG et contenant exactement le texte Signature: 8a477f597d28d172789f06886806bc55. Très pratique: Copiez ce fichier dans tout répertoire que vous voulez exclure du backup sans avoir à toucher à votre script de backup.
    • {now} permet d'horodater automatiquement les backups, mais vous pouvez remplacer par le texte de votre choix (sans les accolades).
      • Une bonne idée est de pré-fixer votre backup par le nom de la machine ( nommachine-{now} ), ce qui permet par la suite de purger sélectivement les backups ( avec --prefix ).
        • Note : Dans les futures versions, la command --prefix sera remplacée par --glob-archives. Exemple: Au lieu d'écrire --prefix=nestor il faudra écrire --glob-archives='nestor*'
    • Algo de compression par défaut: lz4 (le plus rapide). Si vous cherchez la compression maximale ajoutez --compression lzma ou intermédiaire: --compression zlib. Mais je vous recommande --compression zstd : Il est presque aussi rapide que lz4 et il compresse mieux que zlib.
Astuce 1: Ajoutez --list --filter=AM pour voir les fichiers que borg considère comme potentiellement ajoutés(A)/modifiés(M). Ce sont concrètement les fichiers dont borg va aller lire le contenu pour voir s'il faut l'ajouter au backup.
Astuce 2: Si vous êtes en train de sauvegarder des fichiers issus d'un point de montage temporaire (support externe, serveur distant) il peut être intéressant d'ajouter l'option --files-cache=ctime,size. Par défaut borg utilise ctime,size,inode mais dans le cas d'un point de montage temporaire les inodes peuvent ne pas être constants, ce qui oblige borg à aller relire le contenu des fichiers pour rien.
  • Lister les backups:
    borg list /repo
  • Vérifier l'intégrité des backups:
    borg check -v --progress /repo
  • Accéder aux backups:
    mkdir archive
    borg mount /repo archive
    • Chaque backup est alors accessible comme un sous-répertoire dans le répertoire archive:
      • Note: Si vous avez beaucoup de fichiers, quand vous allez entrer dans le sous-répertoire d'un backup précis, le premier ls risque de prendre plusieurs minutes. C'est tout à fait normal. Ne soyez pas surpris.
      • Du mal à accéder aux fichiers du backup à cause des droits sur les fichiers/répertoires dans le backup ? Dans la commande de montage ajoutez l'option -o ignore_permissions.
    • Puis démonter par:
      borg umount archive
    • Vous pouvez également utiliser la commande extract pour extraire certains fichiers des archives.
  • Purger les anciens backups:
    • Exemple: On va garder 1 backup par jour sur les 7 derniers jours, et 1 backup par semaine sur les 4 dernières semaines et 1 backup par mois sur les 6 derniers mois.
      borg prune -v --list --stats --keep-daily=7 --keep-weekly=4 --keep-monthly=6 /repo
    • Vous pouvez également ne garder que les X derniers backups. Exemple --keep-last=5
    • Si vous avez préfixé vos archives, vous pouvez purger sélectivement avec --prefix=nommachine
    • Vous pouvez supprimer un backup précis. Par exemple:
      borg delete /repo::2017-12-11T12:25:38
    • Vous avez bien entendu bien d'autres options de purge.
  • Libérer de l'espace : Il faut savoir que depuis la version 1.2.0 un delete ou un prune ne libère pas systématiquement de l'espace disque. De temps en temps (pas à chaque backup), forcez borg à compacter les segments. Cela permet de libérer de la place sur disque:
    borg compact --progress --cleanup-commits /repo
    • L'option --cleanup-commits permet de supprimer les petits fichiers de 17 octets laissé par les anciennes version de Borg (<1.2.0). Cette option n'a besoin d'être utilisée qu'une seule fois pour "nettoyer" le repo.

Notes

  • Bien entendu, le premier backup sera long (il va compresser tous les fichiers). Les backups suivants seront beaucoup plus rapides.
  • La compression par défaut est lz4 qui est extrêmement rapide (capable de compresser 500 Mo/seconde sur un processeur moyen), mais je vous recommande chaudement la compression zstd, plus efficace sans trop consommer de CPU. Ajoutez l'option --compression zstd,7. La compression lzma est plus forte, mais elle ralentira votre sauvegarde.
  • Un backup précis est nommée par repo::archive.
    • Exemple: /repo::2017-12-11T12:25:38 désigne l'archive 2017-12-11T12:25:38 dans le repo /repo.
  • Borg est bon quand il est lancé directement sur la machine qui contient les données à sauvegarder:
    • Borg est bon dans les cas suivants:
      • backup fichiers locaux ⇒ repo local
      • backup fichiers locaux ⇒ repo distant
    • Borg est moins bon pour:
      • backup fichiers distant ⇒ repo local.
      • Dans ce cas, vous devrez utiliser sshfs (ou autre) pour aller chercher les fichiers, et les performances seront nettement moins bonnes. (Ou alors vous faites préalablement un rsync (rapide) vers un répetoire local, puis un borg local vers local pour historiser les modifications).
      • Si vous allez chercher des fichiers distants par sshfs, je vous recommande d'utiliser l'option --files-cache=ctime,size (ou --ignore-inode sur Borg<1.1) car les inodes d'un montage sshfs ne sont pas constants, et vous risquez de re-sauvegarder des fichiers qui n'ont pas été modifiés. (Vous ne perdrez pas de place car borg détectera qu'il a déjà les données, mais il perdra du temps à relire le contenu des fichiers.)
  • La compatibilité ascendante est assurée par l'auteur (Les nouvelles version de Borg savent manipuler les repos créés avec d'anciennes versions).
ATTENTION : Quand vous créez un repo chiffré, les clés de chiffrement peuvent être soit dans le repo (si vous avez choisi l'option repokey) soit dans ~/.config/borg/security. Si vous êtes dans le second cas, pensez à bien sauvegarder ce répertoire ailleurs, car perdre les clés contenues dans ce répertoire équivaut à perdre votre repo.
  • Borg stock des données dans le répertoire de l'utilisateur qui lance le backup :
    • ~/.cache/borg/ contient le cache des repos que vous avez utilisés (cache de la liste des fichiers et cache des segments de données). Ce répertoire peut-être effacé sans perte de données, car borg sait le reconstruire. Cependant, cela aura des conséquences lors de votre prochain backup :
      • Le cache de segments sera reconstruit en lisant le repo. C'est relativement rapide si le repo est local mais peut être plus long si le repo est distant.
      • Le cache de fichiers vidé va obliger Borg à re-lire l'intégralité du contenu des fichiers à sauvegarder, ce qui va rallonger la durée du backup.
      • Dans un cas comme dans l'autre, il n'y a aucun risque de perte de données. Juste une perte de temps au backup suivant le temps de reconstruire ce cache.
    • ~/.config/borg/ contient la configuration de Borg, ainsi que des informations sur les derniers repos manipulés par Borg. Il inclue également les clés de chiffrement pour les repo chiffrés sans l'option repokey.

Stats

Quand vous avez fini un backup (avec --stats), vous aurez un rapport sur votre sauvegarde:

------------------------------------------------------------------------------
                       Original size      Compressed size    Deduplicated size
This archive:                4.51 GB              2.77 GB              1.06 MB
All archives:               13.53 GB              8.32 GB              1.87 GB

                       Unique chunks         Total chunks
Chunk index:                   70292               567669
------------------------------------------------------------------------------
  • This archive correspond à la sauvegarde que vous venez de faire.
    • Original size : Taille totale des fichiers dans ce backup.
    • Compressed size : Taille de ces fichiers une fois compressés.
    • Deduplicated size : Comme certains de ces fichiers étaient déjà présents à l'identique dans des sauvegardes antérieures, ils n'ont pas été re-sauvegardés. La taille affichée ici correspond à la quantité de données réellement nouvelles qui ont été ajoutées au repo borg (ici: 1,06 Mo).
  • All archives : correspond à la taille totale de données stockées dans les différents backups contenus dans ce repo.
    • Deduplicated size : C'est la taille totale de votre repo borg, après compression et déduplication (repérage des fichiers identiques entre sauvegardes).

Propriétés des logiciels de sauvegarde

Les logiciels de backup peuvent posséder plusieurs de ces 4 propriétés: compression, incrémental, différentiel et dédupliqué.

  • Compression: La compression permet de réduire l'espace nécessaire au stockage de la sauvegarde d'un fichier, comme on le ferait avec une archive zip.
    • Exemple de logiciel: tar/gzip, zip…
  • Incrémental: Le logiciel conserve les anciennes versions des fichiers.
    • Vous pouvez récupérer un fichier tel qu'il était il y a une semaine, ou récupérer un fichier que vous avez effacé depuis plusieurs backups.
    • Exemple de logiciel: rsnapshot, BackInTime, TimeShift
  • Différentiel : Le logiciel de backup ne va sauvegarder que les parties modifiées des fichiers.
    • Imaginez: Vous faites fonctionner une machine virtuelle qui fait 10 Go:
      • Si votre logiciel de backup n'est pas différentiel, il verra que le fichier de 10 Go a été modifié, et il va le sauvegarder en entier à nouveau.
      • Si votre logiciel de backup est différentiel, il ne va sauvegarder que la partie modifiée du fichier. Le gain de place est énorme.
    • Exemple de logiciel: rdiff-backup, duplicity
  • Dé-dupliqué: Le logiciel de backup va repérer les données identiques dans des fichiers différents.
    • Imaginez: Vous déplacez un répertoire contenant beaucoup de fichiers, ou vous renommez des fichiers volumineux.
      • Si votre logiciel de backup ne fait pas de dé-duplication, il considérera que ce sont de nouveaux fichiers et ira tous les sauvegarder à nouveau. Votre sauvegarde va enfler.
      • Si votre logiciel de backup fait de la dé-duplication, il verra que le contenu des fichiers est identique à des fichiers déjà sauvegardés, et ne les sauvegardera pas à nouveau (énorme gain de temps et de place).
    • Exemple de logiciel: BorgBackup, bup, duplicati

Si j'aime autant BorgBackup, c'est qu'il possède justement ces 4 propriétés. En particulier, la dé-duplication vous permet de déplacer vos fichiers ou renommer les répertoires sans risquer de faire enfler inutilement les sauvegardes. Dans le cas de sauvegardes multi-utilisateurs ou multi-machines, le gain est encore plus important.

Borg sous Windows ?
Ce n'est malheureusement pas possible à l'heure actuelle. L'auteur travaille plus ou moins sur une version Windows qui pourrait éventuellement être distribuée officiellement, mais ce n'est pas simple (la manière dont Windows gère les fichiers est très différentes de Linux). En attendant, il est peut-être possible d'utiliser Borg via WSL (à tester).

Liens

borgbackup.txt · Dernière modification: 2022/09/25 08:20 de sebsauvage