Procédure modifiée sauvegarde Borg Latitude e6230
BorgBackup e6230
Borg est installé
Prérequis
Portable nomade Dell Latitude e6230 , l’accès tailscale peut être défaillant, tous les paramètres nécessaires à la sauvegarde borg sont copiés localement
- Avec réseau privé:
/sharenfs/pc1/.borg/ - Sans accès réseau privé:
$HOME/.config/borg/ - Fichier environnement ntfy (notifications):
$HOME/.config/ntfy
1
2
3
4
5
6
# Création dossier borg si inexistant
mkdir -p $HOME/.config/borg/
# Création dossier environnement ntfy
mkdir -p $HOME/.config/ntfy
# si accès réseau privé, copier le fichier ntfy.env
cp /sharenfs/scripts/env/ntfy.env $HOME/.config/ntfy/
Création dépôt borg e6230
1 - Créer un jeu de clés SSH pour l’authentification borg
1
2
3
ssh-keygen -t ed25519 -f $HOME/.config/borg/e6230.borgssh
# droits
chmod 600 $HOME/.config/borg/e6230.borgssh
2 - Ajouter clé publique ~/.config/borg/e6230.borgssh.pub au fichier authorized_keys de la boîte de stockage (Modifier authorized_keys boîte stockage)
1
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPRMn64QrFlSum9zz9iEnopRzicCJhDYvDYrgde6/lem yano@e6230
Poste linux PC1
1
2
3
4
5
6
# sur un poste autorisé, on récupère fichier des clés autorisées de la box --> u326239_authorized_keys
echo -e "get .ssh/authorized_keys u326239_authorized_keys" | sftp -P 23 -i ~/.ssh/bx11-yann-ed25519 u326239@u326239.your-storagebox.de
# ajout clé publique
echo 'ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPRMn64QrFlSum9zz9iEnopRzicCJhDYvDYrgde6/lem yano@e6230' >> u326239_authorized_keys
# renvoyer le fichier des clés autorisées vers la box
echo -e "put u326239_authorized_keys .ssh/authorized_keys" | sftp -P 23 -i ~/.ssh/bx11-yann-ed25519 u326239@u326239.your-storagebox.de
3 - Tester la connexion ssh à la boite de stockage
DELL Latitude e6230
1
sftp -P 23 -i ~/.config/borg/e6230.borgssh u326239@u326239.your-storagebox.de # Si ok , prompt sftp puis quit
Créer les fichiers passphrase, exclusions et repository
~/.config/borg/e6230.passphrase contient la passphrase qui déverrouile la sauvegarde borg e6230
Les exclusions ~/.config/borg/e6230.exclusions
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
proc/
sys/
dev/
srv/
mnt/
cdrom/
tmp/
run/
var/tmp/
var/run/
var/cache/
lost+found/
home/yano/.cache/
home/yano/.keepassx/
home/yano/Téléchargements/
home/yano/Musique/
home/yano/Vidéos/
home/yano/media/
home/yano/scripts/
sharenfs/
Le dépôts ~/.config/borg/e6230.repository
1
ssh://u326239@u326239.your-storagebox.de:23/./backup/borg/e6230
Si réseau privé (tailscale), sauvegarder les 4 fichiers (e6230.borgssh, e6230.exclusions, e6230.passphrase et e6230.repository)
1
cp $HOME/.config/borg/e6230.* /sharenfs/pc1/.borg/
4 - Initialisation dépôt distant
1
2
3
4
export BORG_PASSPHRASE="$(cat $HOME/.config/borg/e6230.passphrase)"
export BORG_RSH="ssh -i $HOME/.config/borg/e6230.borgssh"
export BORG_REPOSITORY="$(cat $HOME/.config/borg/e6230.repository)"
borg init --encryption=repokey $BORG_REPOSITORY
Le résultat de la commande
1
2
3
4
5
6
7
8
9
10
11
12
IMPORTANT: you will need both KEY AND PASSPHRASE to access this repo!
Key storage location depends on the mode:
- repokey modes: key is stored in the repository directory.
- keyfile modes: key is stored in the home directory of this user.
For any mode, you should:
1. Export the borg key and store the result at a safe place:
borg key export REPOSITORY encrypted-key-backup
borg key export --paper REPOSITORY encrypted-key-backup.txt
borg key export --qr/ REPOSITORY encrypted-key-backup/
2. Write down the borg key passphrase and store it at safe place.
Une seule sauvegarde par jour
Le plus robuste n’est pas le timer seul mais le duo timer + tampon dans le script :
Le fichier timer /etc/systemd/system/borgbackup-e6230.timer
1
2
3
4
5
6
7
8
9
10
11
12
# /etc/systemd/system/borgbackup-e6230.timer
[Unit]
Description=Backup Borg quotidien (une fois max)
[Timer]
# l'heure exacte importe peu, voir Persistent
Persistent=true
OnCalendar=*-*-* 12:00:00
RandomizedDelaySec=30min
[Install]
WantedBy=timers.target
Persistent=true: si le portable est OFF à midi, le backup part au prochain boot — rattrapage automatique, pas besoin deOnBootSec.- Le garde-fou anti-doublon dans le script (c’est lui qui garantit « une seule par jour », quel que soit le nombre de redémarrages ou de lancements manuels) :
1
2
3
4
5
6
7
8
9
STAMP="/var/tmp/borg-last-backup"
TODAY=$(date +%F)
if [ -f "$STAMP" ] && [ "$(cat "$STAMP")" = "$TODAY" ]; then
echo "Backup déjà fait aujourd'hui ($TODAY)."
exit 0
fi
# ... si succès :
date +%F > "$STAMP"
Attention : écrivez le stamp seulement si le backup réussit, sinon un échec réseau bloque toute la journée.
Le fichier service /etc/systemd/system/borgbackup-e6230.service
1
2
3
4
5
6
7
8
9
10
11
# /etc/systemd/system/borg-backup.service
[Unit]
Description=Backup Borg quotidien vers repo distant
# AUCUNE dépendance réseau : le script gère lui-même l'attente
[Service]
Type=oneshot
ExecStart=/usr/local/bin/borg-backup.sh
Restart=on-failure
RestartSec=10min
TimeoutStartSec=4h
Le script de sauvegarde /usr/local/bin/borgbackup-e6230.sh
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
#!/bin/sh
# Ce script est copié localemnt
# $HOME/.config/borg/borgbackup-e6230.sh
STAMP="/var/tmp/borg-last-backup"
TODAY=$(date +%F)
if [ -f "$STAMP" ] && [ "$(cat "$STAMP")" = "$TODAY" ]; then
echo "Backup déjà fait aujourd'hui ($TODAY)."
exit 0
fi
#. "/sharenfs/scripts/env/ntfy.env"
. "$HOME/.config/ntfy/ntfy.env"
t=$(date +%s)
export BORG_PASSPHRASE="$(cat $HOME/.config/borg/e6230.passphrase)"
export BORG_RSH='ssh -i $HOME/.config/borg/e6230.borgssh'
BACKUP_DATE="$(date +%Y-%m-%d-%Hh%M)"
BORG_REPOSITORY="$(cat $HOME/.config/borg/e6230.repository)"
BORG_EXCLUSION="$HOME/.config/borg/e6230.exclusions"
BORG_PATH="/"
INFO="Portable DELL Latitude e6230"
CMD_CREATE="borg create -v --progress --stats --exclude-from $BORG_EXCLUSION \"${BORG_REPOSITORY}::${BACKUP_DATE}\" $BORG_PATH"
borg create -v --progress --stats --exclude-from $BORG_EXCLUSION "${BORG_REPOSITORY}::${BACKUP_DATE}" $BORG_PATH
rc_create=$?
CMD_PRUNE="borg prune -v --stats --keep-daily=7 --keep-weekly=1 --keep-monthly=1 \"${BORG_REPOSITORY}\""
borg prune -v --stats --keep-daily=7 --keep-weekly=1 --keep-monthly=1 "$BORG_REPOSITORY"
rc_prune=$?
d=$(( $(date +%s) - t ))
DUREE=$(( d / 3600 ))h$(( (d % 3600) / 60 ))m$(( d % 60 ))s
s_create="❌"
[ $rc_create -eq 0 ] && s_create="✔️"
s_prune="❌"
[ $rc_prune -eq 0 ] && s_prune="✔️"
if [[ $s_create == "✔️" && $s_prune == "✔️" ]]; then
date +%F > "$STAMP"
fi
msg_title="💻 $INFO : Borgbackup en $DUREE"
{
echo
echo "${s_create} ${CMD_CREATE}"
echo
echo "${s_prune} ${CMD_PRUNE}"
} | curl -sS -X POST \
-H "X-Email: $NTFY_EMAIL" \
-H "Title: $msg_title" \
-H "Authorization: Bearer $NTFY_TOKEN" \
-H "prio:low" \
-H "Content-Type: text/plain; charset=utf-8" \
--data-binary @- \
"$NTFY_URL"
Le rendre exécutable
1
sudo chmod +x /usr/local/bin/borgbackup-e6230.sh
Activation
1
2
sudo systemctl daemon-reload
sudo systemctl enable borgbackup-e6230.timer --now
Un dernier détail : si vous voulez voir le statut d’un coup d’œil dans le tableau de bord de KDE, les commandes clés sont systemctl status borg-backup.service et journalctl -u borg-backup.service -f pendant un lancement manuel — pratique pour valider le comportement réseau lors des premiers essais.
👆 Déclenchement manuel
1
sudo systemctl start borgbackup-e6230.service
Le même garde-fou s’applique : le lancement manuel est possible à tout moment, mais refusé (instantanément, proprement) si le backup du jour est déjà fait. Si vous voulez forcer un second backup le même jour :
1
2
sudo systemctl start borgbackup-e6230.service --force-... # non, plus simplement :
sudo /usr/local/bin/borg-backup.sh --force
Ajoutez une option --force au script qui ignore le stamp.
📶 Évaluation de la qualité de connexion
C’est faisable avec des tests simples et rapides (~15-20 s au total), dans l’ordre du moins coûteux au plus coûteux :
1. Latence + perte de paquets (le test décisif, quasi gratuit) :
1
2
3
4
5
6
7
8
HOST="monrepo.example.com"
# 10 pings : on veut 0% de perte et une latence raisonnable
RESULT=$(ping -c 10 -i 0.3 -W 2 "$HOST" 2>/dev/null)
LOSS=$(echo "$RESULT" | awk -F',' '/packet loss/ {gsub(/[ %]/,"",$3); print $100*0+$3}' | tail -1)
AVG=$(echo "$RESULT" | awk -F'/' '/rtt min/ {print int($5)}')
[ "$LOSS" -lt 5 ] && [ "${AVG:-999}" -lt 200 ] || { echo "Qualité insuffisante (perte=$LOSS%, latence=${AVG}ms)"; exit 0; }
À calibrer selon votre tolérance : perte < 5 %, latence < 200 ms (en Wi-Fi instable ou 4G chargée, ces seuils grillent rapidement).
2. Débit effectif vers le repo (test léger, optionnel) : mesurez le temps d’un petit transfert SSH plutôt qu’un gros speedtest :
1
2
3
START=$(date +%s%N)
dd if=/dev/zero bs=1M count=2 2>/dev/null | ssh "$HOST" 'cat > /dev/null'
ELAPSED=$(( ($(date +%s%N) - START) / 1000000 ))
Si 2 Mo mettent plus de ~10 s (< ~200 Ko/s d’upload), le backup d’aujourd’hui risque de traîner ou de mourir en route → on peut différer.
3. Le critère ultime, gratuit : le comportement de Borg lui-même. Avant l’archive complète, Borg fait une phase de verrouillage + borg info sur le repo (~2 s). Si cette phase échoue ou dépasse un timeout (timeout 30 ssh ...), on annule. C’est le test le plus fidèle car il teste exactement le chemin réseau utilisé.