Borgbackup_PC1_home+media
Chirpy post 2026-10-20-Borgbackup_PC1_home+media.md publié le 20 octobre 2026 à 09h45mn
Borgbackup
BorgBackup (abrégé : Borg) est un programme de sauvegarde par déduplication. En option, il prend en charge la compression et le chiffrement authentifié. L’objectif principal de Borg est de fournir un moyen efficace et sûr de sauvegarder des données.
Prérequis: Application BorgBackup installée et fonctionnel en local
Sauvegardes
Fichier environnement ntfy $HOME/.config/ntfy.env (mode utilisateur)
1
2
3
4
5
6
7
# Environnement ntfy
echo "NTFY_URL="https://ntfy.rnmkcy.eu/yan_infos"
NTFY_TOKEN="tk_xxxxxxxxxxxxxxxxxxxxxxx"
NTFY_EMAIL="ntfy@cinay.eu"" | tee -a $HOME/.config/ntfy.env
# Protection
chown $USER:$USER $HOME/.config/ntfy.env
chmod 600 $HOME/.config/ntfy.env
Modifier la valeur NTFY_TOKEN...
Initialiser les dépôts borg local et distant
Initialisation dépôt local /home/yann/FreeUSB2To/sauvegardes/borgbackup/pc1
1
2
3
4
export BORG_PASSPHRASE="`cat /home/yann/.borg/pc1.passphrase`"
export BORG_RSH='ssh -i /home/yann/.borg/pc1.borgssh'
BORG_REPOSITORY='/home/yann/FreeUSB2To/sauvegardes/borgbackup/pc1'
borg init --encryption=repokey-blake2 $BORG_REPOSITORY
Storage Box bx11-yann-02: Initialisation dépôt distant ssh://u694796@u694796.your-storagebox.de:23/./pc1
1
2
3
4
export BORG_PASSPHRASE="`cat /home/yann/.borg/pc1.passphrase`"
export BORG_RSH='ssh -i /home/yann/.borg/bx11-yann-02.borgssh'
BORG_REPOSITORY='ssh://u694796@u694796.your-storagebox.de:23/./pc1'
borg init --encryption=repokey-blake2 $BORG_REPOSITORY
Passer la sauvegarde dans une fonction appelée une fois par cible, avec un fichier d’état par cible. Si le distant échoue (réseau, Storage Box), le prochain lancement du timer ne refera que le distant, sans relancer le local.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
#!/bin/bash
# Environnement ntfy
. "$HOME/.config/ntfy.env"
today="$(date +%F)" # Europe/Paris
notify() { # $1 = titre, $2 = message, $3 = priorité (défaut low)
curl -s \
-H "X-Email: $NTFY_EMAIL" \
-H "Title: $1" \
-H "Authorization: Bearer $NTFY_TOKEN" \
-H "prio:${3:-low}" \
-d "$2" \
"$NTFY_URL" > /dev/null
}
# backup_target <nom> <dépôt> <clé ssh> <fichier passphrase>
backup_target() {
local name="$1" repo="$2" key="$3" passfile="$4"
local state_file="$HOME/.pc1_last_run_${name}"
local t rc d duree
if [[ "$(cat "$state_file" 2>/dev/null)" == "$today" ]]; then
echo "[$name] sauvegarde déjà réalisée"
notify "ℹ️ BorgBackup PC1 $name déjà réalisée ce jour" "PC1 $0"
return 0
fi
echo "[$name] départ sauvegarde borg"
t=$(date +%s)
export BORG_PASSPHRASE="$(cat "$passfile")"
export BORG_RSH="ssh -i $key"
borg create -v --progress --stats \
--exclude-from /home/yann/.borg/pc1.exclusions \
"${repo}::$(date +%Y-%m-%d-%Hh%M)" /home/yann/
rc=$?
# rc 0 = ok, 1 = warning (fichier modifié pendant la lecture...), >=2 = erreur
if (( rc >= 2 )); then
notify "❌ BorgBackup PC1 $name : ÉCHEC (rc=$rc)" "PC1 $0
Dépôt $repo" high
return "$rc"
fi
borg prune -v --list --stats --keep-daily=7 --keep-weekly=4 --keep-monthly=6 "$repo" || rc=$?
borg compact "$repo" || rc=$?
(( rc >= 2 )) && { notify "❌ BorgBackup PC1 $name : échec prune/compact" "PC1 $0" high; return "$rc"; }
d=$(( $(date +%s) - t ))
duree="$((d / 3600))h$(((d % 3600) / 60))m$((d % 60))s"
echo "$today" > "$state_file"
echo "[$name] FIN sauvegarde borg"
notify "🔄 BorgBackup PC1 $name /home/yann/ en $duree" "PC1 $0
✔️ Fin Borgbackup /home/yann/ --> dépôt $repo"
return 0
}
# --- Local ---
backup_target local \
"/home/yann/FreeUSB2To/sauvegardes/borgbackup/pc1" \
"/home/yann/.borg/pc1.borgssh" \
"/home/yann/.borg/pc1.passphrase"
rc_local=$?
# --- Distant (Storage Box) ---
backup_target distant \
"ssh://u694796@u694796.your-storagebox.de:23/./pc1" \
"/home/yann/.borg/bx11-yann-02.borgssh" \
"/home/yann/.borg/pc1.passphrase"
rc_distant=$?
# Code de sortie : le service systemd passe en échec si l'une des deux a échoué
exit $(( rc_local > rc_distant ? rc_local : rc_distant ))
Quelques points à noter :
- Une cible qui échoue n’empêche pas l’autre. Le local tourne même si le distant est injoignable, et inversement.
- Le flag du jour n’est écrit qu’en cas de succès, par cible. Avec
Persistent=truedans le timer, ou un second déclenchement dans la journée, seule la cible manquante est retentée. - Le code retour 1 de borg est un simple avertissement et ne bloque pas le flag. Seuls les codes ≥ 2 sont traités comme des échecs.
- Si les deux dépôts ont des passphrases différentes, le 4ᵉ argument gère déjà le cas. Si c’est la même, vous pouvez la réutiliser comme ci-dessus.
- Le distant dépend du réseau. Dans le service utilisateur, ajoutez
After=network-online.targetetWants=network-online.target. Sinon, un lancement juste après le démarrage fera échouer le distant. - Si la Storage Box utilise Borg 1.x par défaut, il peut falloir ajouter
--remote-path=borg-1.2, selon votre version locale.
Pour exécuter une tâche une fois par jour, en suivant l’horloge (même si la machine a été arrêtée / redémarrée)
Le fichier service ~/.config/systemd/user/borg_pc1_media.service
1
2
3
4
5
6
[Unit]
Description=Sauvegarde jour
[Service]
Type=oneshot
ExecStart=/bin/bash /home/yann/.local/bin/borg_pc1_media.sh
Le fichier “timer” ~/.config/systemd/user/borg_pc1_media.timer
1
2
3
4
5
6
7
8
9
10
11
12
[Unit]
Description=Exécution quotidienne sauvegarde
[Timer]
OnCalendar=daily
Persistent=true
# optionnel : éviter un démarrage pile à la seconde exacte
RandomizedDelaySec=5m
[Install]
WantedBy=timers.target
OnCalendar=daily: déclenche selon le calendrier (une exécution par jour).Persistent=true: si le système était arrêté au moment du déclenchement, systemd rattrape au prochain démarrage (exécute pour les échéances manquées).
Activation et lancement
1
2
systemctl --user daemon-reload
systemctl --user enable borg_pc1_media.timer --now
Les logs : journalctl --user -u savyann.service
Liste des timers :
1
systemctl --user list-timers --all
1
2
NEXT LEFT LAST PASSED UNIT ACTIVATES
Tue 2026-08-04 00:00:05 CEST 13h Mon 2026-08-03 06:02:03 CEST - borg_pc1_media.timer borg_pc1_media.service