Outils pour utilisateurs

Outils du site


borgbackup

borgbackup "borg"

Borg est un utilitaire de sauvegarde, dont le principal avantage est la déduplication.

En bref, On crée un repository (un fichier/dossier linux), dans lequel on peut créer des archives qui contiennent les dossiers et fichiers que l'on souhaite sauvegarder. Les données sont stockées sous forme de blocs, et on ne trouve pas dans tout le repository 2 blocs identiques, les données sont dédupliquées (1 bloc peut servir à plusieurs fichiers).

Parmi les fonctions sympa, on va retrouver une vérification d'intégrité, la possibilité de prune les archives (c'est à dire de n'en garder qu'un certain nombre, comme la stratégie de stockage grand pere, pere, fils), et la sauvegarde à distance sur une autre machine.

Gérer un repo borg

Création/initialisation d'un repo

ça commence par la création du repository :

borg init --encryption=repokey /path/to/repo

NOTES :

  • Un repository nécessite une méthode de chiffrement, l'argument –encryption est indispensable. Cela peut être un mdp repokey, un fichier de chiffrement keyfile, ou rien none
  • L'option –append-only permet les prunes et delete, mais pas le compact (les données ne sont pas donc pas supprimées)

Pour plus de facilité, notamment dans un script automatisé, on peut définir des variables d'environnement pour définir l'accès au repository :

BORG_REPO=/path/to/repo/
BORG_PASSPHRASE='aAbBcCdDeE1234'  # avec ou sans ' '

Créer une archive

Maintenant que le repository existe, on peut ajouter des données dedans. Lors d'un ajout, toutes les données sont contenues dans une archive, il est commun de donner la date dans le nom

borg create /path/to/repo::Monday ~/src ~/Documents
# ici l'archive s'appelle Monday

Note : si le repo n'est pas initialisé, on aura une erreur. Pratique si on a un mount qui peut ne pas marcher : aucun risque de mettre des données n'importe où

Consulter le repo / une archive

2 outils existent : info et list

## --- info ---
# sur un repo : donne la taille du repo (dedupliquée = sur le disque, originelle si extrait)
borg info /path/to/repo/
 
# sur une archive : donne la taille de l'archive et du repo (dedupliquée = sur le disque, originelle si extrait)
borg info /path/to/repo::archive-name
 
 
## --- list ---
# sur un repo : donne la liste des archives qui compose le repo, avec la date de création des archives
borg list /path/to/repo/
 
# sur une archive : donne la liste des fichiers et dossiers contenus dans l'archive
borg list /path/to/repo::archive-name

Note: le path des fichiers et dossier est conservé, hein ;)

Extraire des données

# extraire les données d'une archiveavec des chemins relatifs au dossier actuel 
cd /current/folder/
borg extract /path/to/repo::archive-name
 
# extraire seulement quelques fichiers
# ?

Supprimer une archive

## --- delete ---
# Supprimer l'archive, mais ne libère pas l'espace disque
borg delete /path/to/repo::archive-name
 
 
## --- compact ---
# recupérer de l'espace disque en compactant les segments de fichiers (notamment des archives supprimées)
borg compact /path/to/repo

Note : on peut aussi prune le repo, pour une suppression automatique d'archives selon des critères définis #stratégieDeSauvegarde

## --- prune ---
borg prune --glob-archives 'pattern-*' --keep-daily 7 --keep-weekly 4 --keep-monthly 3 /path/to/repo/
# --glob-archives : permet de restreindre la purge aux archives qui match le pattern

Exemple de script automatisé

L'idée est d'automatiser le processus de backup, par exemple avec un script déclenché par un crontab

### backup_auto.sh
 
#!/bin/sh
# Ce script a pour vocation la sauvegarde d'un dossier en particulier dans un dossier SMB mount.
# Le préfix "auto" sera mis en place, et ces backups seront concernés par les prunes / purges
 
# Variable d'environnement pour accéder au repo
export BORG_REPO=/path/to/repo/
export BORG_PASSPHRASE=aAbBcCdDeE1234
 
# nom de la sauvegarde : manual + date du jour
NAME="auto_$(date +%Y-%m-%d%.H-%M)"
 
# Create the backup
echo "starting backup"
borg create --list --stats --progress ::$NAME /folder/to/backup/*
backup_exit=$?
echo "borg exit = $backup_exit"
 
# prune 
echo "Pruning repository"
borg prune --list --glob-archives "auto_*" --show-rc --keep-daily 7 --keep-weekly 3 --keep-monthly 2
# --show-rc : afficher le code de retour en dernier dans les logs
# --glob-archives n'appliquer prune qu'aux archives qui match le pattern
prune_exit=$?
 
# compacting repository
echo "compacting repository"
borg compact
compact_exit=$?
 
# use highest exit code as global exit code
global_exit=$(( backup_exit > prune_exit ? backup_exit : prune_exit ))
global_exit=$(( compact_exit > global_exit ? compact_exit : global_exit ))
echo "global exit = ${global_exit}"
 
exit ${global_exit}

Il conviendrait de récupérer les info (echo) et les mettre dans un système de log, et de faire du reporting. Pour une prochaine fois !

borgbackup.txt · Dernière modification : de luc