Borg Backup est un outil puissant pour les sauvegardes, mais il faut éditer quelques scripts pour pouvoir exploiter ses capacités. Pour le script, je me suis inspiré de [1]; et pour l’unité SystemD, je me suis inspiré de [2]
1. Définir l’emplacement des sauvegardes
Dans son répertoire de scripts (par ex. $HOME/bin) créer un fichier backup.env exploitant les variables d’environnement de Borg
#!/bin/sh
export BORG_PASSPHRASE="secret-passphrase-here!"
export BORG_REPO="user@host:path/to/repo"
export BACKUP_TARGETS="/path1/to/backup /path2/to/backup"
Notez que $BORG_PASSPHRASE sert au chiffrement des données sauvegardées. Notez que le dépôt $BORG_REPO doit être initializé avant usage.
Ce script peut servir à utiliser Borg Backup de manière interactive, par exemple:
$ . $HOME/bin/backup.env
$ borg list
Pour lister les sauvegardes existantes sans avoir à reprécisier notre configuration.
1. Initialisation
Avant de commencer les sauvegardes, il faut initialiser le dépot. Créer le dossier $BORG_REPO avec le bon propriétaire et les bons droits (pourquoi pas faire un subvolume btrfs), puis:
$ borg init --encryption none $BORG_REPO
Le dossier $BORG_REPO doit être rempli de quelques fichiers. Le premier backup peut être long, aussi il vaut mieux le faire à la main avec les information au terminal:
$ borg create --progress --stats ::$BACKUP_NAME $BACKUP_TARGETS
3. Définir le script de backup
Dans un deuxième fichier backup.sh on écrit l’action de backup
#!/bin/sh
## Setup script variables.
. /home/user/bin/backup.env
export BACKUP_NAME="daily-{now:%Y-%m-%dT%H:%M:%S}"
# Create backup.
# shellcheck disable=SC2086
borg create --stats ::$BACKUP_NAME $BACKUP_TARGETS
# Remove old ones.
borg prune -v --list --keep-daily=3 --keep-weekly=2
Ainsi, l’exécution de ce fichier fera un backup. On peut vérifier que le script fonctionne en l’exécutant directement.
4. Automatisation
Pour automatiser les sauvegardes avec SystemD, il faut éditer deux fichiers dans $HOME/.config/systemd/user. Le premier nommé backup.service contient
[Unit]
Description=Borg Daily Backup Service
[Service]
Type=simple
ExecStart=/usr/bin/sh %h/bin/backup.sh
Il décrit l’action à faire pour faire le backup;“%h“ représente $HOME. Le second fichier nommé backup.timer décrit quand faire les backups:
[Unit]
Description=Borg Daily Backup Timer
[Timer]
OnCalendar=*-*-* 13:00:00
AccuracySec=1h
Persistent=true
[Install]
WantedBy=timers.target
La directive OnCalendar précise la fréquence des sauvegardes, ici tous les jours à 13h; AccuracySec défini la fenêtre dans laquelle le script peut s’exécuter (entre 13h et 14h); Persistent indique de lancer le script immédiatement si on a raté la dernière fenêtre.
Il faut ensuite recharger les unités
systemctl --user daemon-reload
systemctl --user status backup.{service,timer}
La deuxième ligne permet de vérifier que les unités existent. On peut vérifier que la première unité fonctionne avec systemctl --user start backup.service. Pour terminer, il faut activer le timer:
systemctl --user start backup.timer
systemctl --user enable backup.timer
La deuxième ligne rend le backup persistent entre les logins.