Outils pour utilisateurs

Outils du site


logiciels:borg

BorgBackup


BorgBackup ( fork d'attic ) permet de créer des sauvegardes de fichiers avec des options intéressantes :

  • Sauvegarde compressée donc gain de place
  • Chiffrement des sauvegardes AES-256 par passe-phrase ou clé
  • Possibilité d'utiliser ssh
  • Possibilité de monter la sauvegarde réalisée comme un simple système de fichiers

init

Première étape créer et initialiser les dossiers de sauvegarde :

$ mkdir /media/BACKUP/borg/{home,doc-cyrille,doc-caroline,photos,videos}
$ borg init --encryption=none /media/BACKUP/borg/home
$ borg init --encryption=none /media/BACKUP/borg/doc-cyrille
$ borg init --encryption=none /media/BACKUP/borg/doc-caroline
$ borg init --encryption=none /media/BACKUP/borg/photos
$ borg init --encryption=none /media/BACKUP/borg/videos
$ borg init --encryption=none /media/BACKUP/borg/etc

create

Création des sauvegardes des différents répertoires :

$ borg create -C zlib,6 --exclude-caches /media/BACKUP/borg/home::{now:%Y-%m-%d} /home/cyrille
$ borg create -C zlib,6 /media/BACKUP/borg/doc-cyrille::{now:%Y-%m-%d} /media/DONNEES/Cyrille
$ borg create -C zlib,6 /media/BACKUP/borg/doc-caroline::{now:%Y-%m-%d} /media/DONNEES/Caroline
$ borg create -C none /media/BACKUP/borg/photos::{now:%Y-%m-%d} /media/DONNEES/Photos
$ borg create -C none /media/BACKUP/borg/videos::{now:%Y-%m-%d} /media/DONNEES/Videos
$ borg create -C none /media/BACKUP/borg/etc::{now:%Y-%m-%d} /etc

–exclude-caches permet d'exclure les répertoires contenant le fichier CACHEDIR.TAG. On trouve ce fichier dans ~/.cache/borg, je le copie dans les répertoires que je veux exclure, soit :~/.cache, ~/.thumbnails, ~/.config/chromium, ~/.config/chromium-back-ovfs, ~/.config/chromium-backup, ~/.mozilla et ~/.tor-browser-fr.

Si on veut plusieurs archives par jour : {now:%Y-%m-%d–%H:%M:%S}

check

$ borg check -v /media/BACKUP/borg/home

Vérifie la consistance des sauvegardes.

info

$ borg info /media/BACKUP/borg/home::2016-04-04

Retourne

Name: 2016-04-04
Fingerprint: fd77ee355331e42f1324a60a990dda3a6d772539c378c27f47522ad3038b36f1
Hostname: cyrarch
Username: cyrille
Time (start): Mon, 2016-04-04 11:14:00
Time (end):   Mon, 2016-04-04 11:16:23
Command line: /usr/bin/borg create -C zlib,6 /media/BACKUP/borg/home::{now:%Y-%m-%d} /home/cyrille
Number of files: 24011

                       Original size      Compressed size    Deduplicated size
This archive:                2.69 GB              1.46 GB              1.38 GB
All archives:                2.69 GB              1.46 GB              1.38 GB

                       Unique chunks         Total chunks
Chunk index:                   21919                24628

list

$ borg list /media/BACKUP/borg/home

Retourne :

2016-04-04                           Mon, 2016-04-04 11:14:00

mount

Borg utilise un système de fichier, c'est super pratique.
Créer un point de montage, par exemple, sur /mnt/temp-home :

# mkdir /mnt/temp-home
# chown -R cyrille:users /mnt/temp-home

Plus qu'a monté l'archive dans le répertoire :

$ borg mount /media/BACKUP/borg/home::2016-04-04 /mnt/temp-home

On peut maintenant récupérer seulement les fichiers qui nous intéressent. :-P
Après avoir récupérer les fichiers voulus, démontage et suppression du point de montage :

$ fusermount -u /mnt/temp-home
$ rm -rf /mnt/temp-home

Scripts

Création et suppression des sauvegardes

Dans les scripts suivants, j'utilise notify-send qui permet d'afficher à l'écran des notifications, il nécessite certaines variables d'environnement.
Pour Debian/Ubuntu/Mint il faudra adapter ! cf libnotify
Si le script est lancé depuis root, il faudra adapter ! Voir cette page

On crée un répertoire pour les log :

# mkdir /var/log/borg
# chown -R cyrille:users /var/log/borg

Un script pour créer et supprimer les sauvegardes placé dans /opt/Scripts/borg.sh :

borg.sh
#!/bin/bash
# Backup home, données cyrille/caroline, photos et vidéos
 
# on export cette variable pour pouvoir supprimer une sauvegarde
export BORG_UNKNOWN_UNENCRYPTED_REPO_ACCESS_IS_OK=yes
 
# Pour pouvoir afficher une notification système il faut exporter cette variable
# pour un script lancé depuis une crontab
export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus
 
# Fichier de log
LOG=/var/log/borg/borg.log
 
# on affiche une notification pendant 15 minutes pour annoncer le début de la sauvegarde
notify-send --expire-time=900000 --icon=dialog-warning "BORG, NE PAS COUPER LE PC" "sauvegarde des données dans 30 secondes"
sleep 30
 
echo "###################################################" >> "$LOG"
 
sourcefolder='/home/cyrille'
REPOSITORY='/media/BACKUP/borg/home'
 
echo "-------------" >> "$LOG"
echo "*** Backup home du $(date -R) ***" >> "$LOG"
borg create -v $REPOSITORY::{now:%Y-%m-%d} $sourcefolder &>> "$LOG"
# ne conserver que les sauvegardes des 7 derniers jours, des 4 dernières semaines et des 3 derniers mois
echo "-------------" >> "$LOG"
echo " Rotation sauvegarde " >> "$LOG"
borg prune -v $REPOSITORY --keep-daily=7 --keep-weekly=4 --keep-monthly=3  &>> "$LOG"
sleep 2
 
sourcefolder="/media/DONNEES/Cyrille"
REPOSITORY='/media/BACKUP/borg/doc-cyrille'
 
echo "-------------" >> "$LOG"
echo "*** Backup données cyrille du $(date -R) ***" >> "$LOG"
borg create -v -C zlib,6 $REPOSITORY::{now:%Y-%m-%d} $sourcefolder &>> "$LOG"
# ne conserver que les sauvegardes des 7 derniers jours, des 4 dernières semaines, des 6 derniers mois et de l'année dernière
echo "-------------" >> "$LOG"
echo " * Rotation sauvegarde *" >> "$LOG"
borg prune -v $REPOSITORY --keep-daily=7 --keep-weekly=4 --keep-monthly=6 --keep-yearly=1 &>> "$LOG"
sleep 2
 
sourcefolder='/media/DONNEES/Caroline'
REPOSITORY='/media/BACKUP/borg/doc-caroline'
 
echo "-------------" >> "$LOG"
echo "*** Backup données Caroline du $(date -R) ***" >> "$LOG"
borg create -v -C zlib,6 $REPOSITORY::{now:%Y-%m-%d} $sourcefolder &>> "$LOG"
# ne conserver que les sauvegardes des 7 derniers jours, des 4 dernières semaines, des 6 derniers mois et de l'année dernière
echo "-------------" >> "$LOG"
echo " Rotation sauvegarde " >> "$LOG"
borg prune -v $REPOSITORY --keep-daily=7 --keep-weekly=4 --keep-monthly=6 --keep-yearly=1 &>> "$LOG"
sleep 2
 
sourcefolder='/media/DONNEES/Photos'
REPOSITORY='/media/BACKUP/borg/photos'
 
echo "-------------" >> "$LOG"
echo "*** Backup photos du $(date -R) ***" >> "$LOG"
borg create -v $REPOSITORY::{now:%Y-%m-%d} $sourcefolder &>> "$LOG"
# ne conserver que les sauvegardes des 7 derniers jours, des 4 dernières semaines, des 6 derniers mois et de l'année dernière
echo "-------------" >> "$LOG"
echo " Rotation sauvegarde " >> "$LOG"
borg prune -v $REPOSITORY --keep-daily=7 --keep-weekly=4 --keep-monthly=6 --keep-yearly=1 &>> "$LOG"
sleep 2
 
sourcefolder='/media/DONNEES/Videos'
REPOSITORY='/media/BACKUP/borg/videos'
 
echo "-------------" >> "$LOG"
echo "*** Backup vidéos du $(date -R) ***" >> "$LOG"
borg create -v $REPOSITORY::{now:%Y-%m-%d} $sourcefolder &>> "$LOG"
# ne conserver que les sauvegardes des 7 derniers jours, des 4 dernières semaines et des 6 derniers mois et de l'année dernière
echo "-------------" >> "$LOG"
echo " Rotation sauvegarde " >> "$LOG"
borg prune -v $REPOSITORY --keep-daily=7 --keep-weekly=4 --keep-monthly=6 --keep-yearly=1 &>> "$LOG"
echo "-------------" >> "$LOG"
 
# on affiche une notification pendant 5 minutes pour annoncer la fin de la sauvegarde
notify-send --expire-time=300000 --icon=dialog-information "BORG" "sauvegarde terminée"
 
exit 0

Vérification des sauvegardes

Le script de vérification dans /opt/Scripts/borg-check.sh :

borg-check.sh
#!/bin/bash
# Borg check 
 
CHKLOG=/var/log/borg/check.log
export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus
 
notify-send --expire-time=300000 --icon=dialog-information "BORG, ne pas couper le PC" "Vérification sauvegarde dans 30 secondes"
sleep 30
 
sourcefolder='/home/cyrille'
REPOSITORY='/media/BACKUP/borg/home'
 
echo " *** Vérification de la sauvegarde home ***" > "$CHKLOG"
borg check -v $REPOSITORY &>> "$CHKLOG"
 
sourcefolder="/media/DONNEES/Cyrille"
REPOSITORY='/media/BACKUP/borg/doc-cyrille'
 
echo " * Vérification de la sauvegarde doc cyrille *" >> "$CHKLOG"
borg check -v $REPOSITORY &>> "$CHKLOG"
 
sourcefolder='/media/DONNEES/Caroline'
REPOSITORY='/media/BACKUP/borg/doc-caroline'
 
echo " * Vérification de la sauvegarde doc caroline *" >> "$CHKLOG"
borg check -v $REPOSITORY &>> "$CHKLOG"
 
sourcefolder='/media/DONNEES/Photos'
REPOSITORY='/media/BACKUP/borg/photos'
 
echo " * Vérification de la sauvegarde photos *" >> "$CHKLOG"
borg check -v $REPOSITORY &>> "$CHKLOG"
 
sourcefolder='/media/DONNEES/Videos'
REPOSITORY='/media/BACKUP/borg/videos'
 
echo " * Vérification de la sauvegarde vidéos *" >> "$CHKLOG"
borg check -v $REPOSITORY &>> "$CHKLOG"
 
# on envoie une notification des éventuelles erreurs 
notify-send --expire-time=900000 --icon=dialog-warning "BORG" "`cat /var/log/borg/check.log | grep -i 'vérif\|error'`"
 
# pour envoyer un mail, il faut avoir configuré un MTA
grep -i 'error\|Vérif' /var/log/borg/check.log | mail -s "borg check" adresse_mail
 
exit 0

Lancement du script backup tous les jours à 10H00 et du script check tous les lundi à 11H00 par une tâche cron avec crontab -e et on colle :

00 10 * * * bash /opt/Scripts/borg.sh
00 11 * * 1 bash /opt/Scripts/borg-check.sh

Les éventuelles erreurs sont injectées dans /var/log/borg/borg.log.
Ne pas oublier de les rendre exécutables par :

$ chmod +x /opt/Scripts/borg.sh /opt/Srcipts/borg-check.sh

Un timer pour sauvegarder /etc

Création du service :

# vim /etc/systemd/system/borg-etc.service

Et on colle :



Erreur lock.exclusive

Suite à une coupure de courant en pleine création de sauvegarde, je ne pouvais plus accéder à un répertoire de sauvegarde. J'aboutissais toujours sur cette réponse :

Erreur : Failed to create/acquire the lock /media/BACKUP/borg/home/lock.exclusive (timeout)

Pour débloquer cette situation, j'ai du utiliser un break-lock :

borg break-lock /media/BACKUP/borg/home

On peut ensuite faire un check et éventuellement réparer.

Source

logiciels/borg.txt · Dernière modification: 2018/10/25 18:19 (modification externe)