Sauvegarde des données avec BORG

De ArchwikiFR


Sauvegarde de ses données personnelles

Cet ajout au Wiki fait suite à la parution de :

et

En complément des solutions de Synchroniser vos ordinateurs on pourra donc utiliser l'excellent BORG, qui n'est (encore) que mentionné dans le WIKI

Principe : archivage par dé-duplication

  • Plutôt qu'accumuler les fichiers comme dans l'archivage classique par TAR, la dé-duplication vérifie par hashage l'identité des fichiers, quels que soient leurs noms, pour ne les copier qu'une fois.
  • Elle occupe ainsi, même sans compression, une place minimale pour des sauvegardes incréméntales répétées. L'option de compression, dont on peut choisir l'intensité, accentuera ce gain d'espace .
  • Enfin ces archives peuvent se "monter" très simplement dans le système de fichiers pour étude et récupération sélectives.

Installation

Le paquet borg étant dans les dépôts Community il suffit de:

# pacman -S borg

Utilisation

Le site du projet propose un Guide de démarrage

D'abord bien sûr, créer et définir un emplacement pour les sauvegardes,

  • soit local : une partition dédiée, un disque externe,
  • soit distant : SSHFS, NFS, Samba…, l'utilisation de SSH est particulièrement recommandée et documentée

Il est important, pour des données sensibles, de créer plusieurs sauvegardes sur des supports différents, règle du 3 - 2 -1

Puis se reporter à la documentation, le man, les exemples des sites en liens ci-dessus

  • commandes essentielles :
borg init, puis : borg create, borg list, borg check, borg mount, etc...
Depuis la version 1.1 la commande 'borg  init' doit comporter la mention du mode de cryptage, cf.: Borg-Wiki
   ~ une sécurité par simple mot de passe sera initiée par :
$ borg init -e=repokey /path/to/repo (ou --encryption=repokey...)

Création des programmes

Exemples pour les données personnelles d'un utilisateur <user> :

  • Créer un fichier ~/.borg/exclusions : une ligne par dossier ou fichier
/home/user/ARCHIVES
/home/user/BACKUP
/home/user/Downloads
/home/user/VirtualBox*
/home/user/.thumbnails
/home/user/.thunderbird
...
Note : 1. "Due to whitespace removal paths with whitespace at the beginning or end can only be excluded using regular expressions"

donc, utiliser dans un fichier d'exclusion /home/user/Playon* et non /home/user/'PlayOnLinux's\ virtual\ drives/

Note : 2. Depuis la version 1.1.0-1 bien respecter l'ordre des options suivant : borg create [Options/Flags] ARCHIVE [PATH [PATH [...]]]
donc : options d'exclusions avant [SOURCE [DESTINATION [...]]]
Note : 3. Alléger la liste d'exclusions avec l'option: --exclude-caches , pour les répertoires contenant le fichier CACHEDIR.TAG (http://www.brynosaurus.com/cachedir/spec.html)

Usage : ] [--exclude-from EXCLUDEFILE] [--exclude-caches] [--exclude-if-present FILENAME

  • Créer un Script ,

par exemple un .local/bin/BorgData.sh, version très simplifiée de celui donné ici, la partition de BKP étant montée dans le fstab sur le dossier personnel "BACKUP ":

#!/bin/bash
## Backup quotidien du home de "user"

echo -e ""
echo -e "     \e[55;15;5;12m***** sauvegarde des données de "user" *****\e[0m"
echo -e ""

# on exporte cette variable pour pouvoir supprimer une sauvegarde
export BORG_UNKNOWN_UNENCRYPTED_REPO_ACCESS_IS_OK=yes

## on peut - ou non - selon les exigences de sécurité
## renseigner ici la passphrase pour qu'elle ne soit 
## pas demandée de façon interactive par le programme
## en ce cas faire un chmod 700 sur ce script pour vous réserver l'accès
## export BORG_PASSPHRASE='ma_phrase_secrète'

sourcefolder='/home/user'
REPOSITORY='/home/user/BACKUP/user_bkp'

borg create -v --stats --compression zlib,6 --exclude-from /home/user/EXCLUSIONS --exclude-caches $REPOSITORY::user_{now:%Y-%m-%d} $sourcefolder 

# ne conserver que les sauvegardes des : 7 derniers jours, 1/sem pour les 4 dernières semaines et 1/mois pour les 3 derniers mois

echo -e ""
echo -e "     \e[55;15;5;12m***** Rotation sauvegarde *****\e[0m"
borg prune -v $REPOSITORY --keep-daily=7 --keep-weekly=4 --keep-monthly=2  


sleep 2

echo -e ""
echo -e "     \e[55;15;5;12m***** sauvegarde terminée *****\e[0m"
echo -e ""


## Si on a créé la variable BORG_PASSPHRASE - Ne pas oublier de la supprimer 
## pour éviter qu'elle apparaisse avec la simple commande 'env' ... : décommentez
# unset BORG_PASSPHRASE

exit 0
  • Créer un programme, pour des données personnelles on peut le placer dans ~/.local/bin/ (remplacer terminal par la console de votre choix)
$ vim ~/.local/bin/bkp_mon_user
#!/bin/bash   
terminal -e  /path/to/BorgData.sh

on n'oublie pas:

$ chmod u+x ~/.local/bin/bkp_mon_user

Automatisation

Automatisation

Nous utilisons la configuration par défaut de cron, qui s'arrange pour que les scripts placés dans /etc/cron.daily soient exécutés quotidiennement.
Puisque les sauvegardes sont poussées, l'automatisation est à configurer sur le client uniquement.
Jusqu'ici, Borg nous demandait la phrase de passe à chaque opération. À des fins d'automatisation, il nous faut désormais la stocker dans un fichier :

root@babasse # mkdir /root/.borg
root@babasse # cat > /root/.borg/passphrase
monmotdepasse
([Ctrl]+[D] pour valider)

…et la protéger des autres utilisateurs de la machine :
root@babasse # chmod 700 /root/.borg/passphrase
Pour éviter la contrainte du renseignement de la passphrase en terminal à chaque commande Borg, on peut exporter la variable d'environnement/BORG ainsi :
export BORG_PASSPHRASE='exemple : complicated & long' comme expliqué ici 
Pour une meilleure sécurité, plutôt inclure cet export dans un script que de façon permanente dans le .bashrc/.zshrc même protégé par un "chmod 700"

* Pour  pouvoir afficher une notification système ajouter cette ligne au Script : 
export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus


  • Créer le répertoire ~/.config/systemd/user/
  • Créer le service : ~/.config/systemd/user/bkp_mon_user.service
# [Unit]
Description=Sauvegarde des donnees de user

[Service]
Type=oneshot
ExecStart=~/.local/bin/bkp_mon_user

  • Créer le Timer : ~/.config/systemd/user/bkp_mon_user.timer
[Unit]
Description=Sauvegarde des donnees de jpf quotidienne
Documentation=man:borg  

[Timer]
OnBootSec=15min
OnUnitActiveSec=1d

[Install]
WantedBy=timers.target


  • Activer :
$ systemctl --user enable bkp_mon_user.timer
  • En cas de modification :
$ systemctl --user daemon-reload
  • Contrôle :
$ systemctl --user status bkp_mon_user.timer
$ journalctl -r --user-unit bkp_mon_user.service
$ du -sh /path/to/user_bkp

Restauration des données

  • On commence par lister les archives disponibles :
$ borg list /path/to/repo/DIR
  • la récupération de données personnelles se fera très simplement par montage d'une archive antérieure sur un répertoire créé ou existant, par la commande :
$ borg mount /path/to/repo/DIR/::nom_date /mnt/point
  • une fois la récupération terminée le démontage se fera par :
$ fusermount -u ~/mnt/point
  • pour une restauration du système à un état archivé, la commande est extract
Note : 1. Attention, commande en développement . Actuellement il y création de doublons dans la base de données de pacman en raison de l'absence - pour l'instant, voir ce post - d'une option --delete dans la commande borg extract. Cette option de rsync évite cette duplication, voir Sauvegarde système complète avec rsync, ceci fait recommander une restauration en 2 temps, voir ci-dessous
Note : 2. extract écrit toujours dans le répertoire courant

on se placera donc :

- soit, recommandé : dans un répertoire extérieur pour ensuite déplacer les seuls fichiers souhaités, ou tout le système, en deux temps avec la commande rsync -a --delete

- soit, directement dans le répertoire de destination mais en ôtant ensuite manuellement ou par un script, les doublons.

Pour une restauration complète à la date de la veille par exemple :

# cd / ou cd /path/to/mount_point/
# borg extract $(echo /path/to/repo/DIR/::nom_`date -d yesterday +%F`)


Voir aussi