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

Principes, 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, la compression, dont on peut choisir l'intensité, pouvant encore accentuer 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
Note : La version borg 1.1.0-1 du 14/10/17 étant buggée, rester pour l'instant à la version 1.0.11

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...


Création des programmes

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

  • Créer un fichier ~/EXCLUSIONS : une ligne par dossier ou fichier
/home/user/ARCHIVES
/home/user/BACKUP
/home/user/Downloads
/home/user/VirtualBox*
/home/user/.cache/*
/home/user/.thumbnails
/home/user/.thunderbird
...
Note : "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/

  • Créer un Script ,

par exemple un 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 home et données "user"

echo -e ""
echo -e "     \e[55;15;5;12m***** sauvegarde du home 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 $REPOSITORY::user_{now:%Y-%m-%d} --exclude-from /home/user/EXCLUSIONS $sourcefolder 

# ne conserver que les sauvegardes des 4 dernières semaines et des 2 derniers mois

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


sleep 2

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

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 /path/to/BorgData.sh

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=/home/user/.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


Voir aussi