Salut à tous,
Je me suis mis à bash il y a pas très longtemps après l'avoir découvert sur libre-octet et ce weeke end j’ai bricolé un petit script pour faire mes sauvegardes automatiquement sur un disque externe. L’idée c’est de ne plus avoir à y penser et de pouvoir dormir tranquille en cas de pépin. C’est encore simple mais j’ai essayé de faire les choses proprement, je vérifie que le disque est bien monté, je log un peu ce qu’il se passe, et j’utilise rsync pour garder les permissions et tout ça. Voilà ce que ca donne :
#!/bin/bash
# Répertoires source et destination
SRC="/home/user/Documents"
DEST="/mnt/backup/Documents"
# Fichier de log
LOG="/var/log/backup.log"
DATE=$(date +"%Y-%m-%d %H:%M:%S")
# Vérification que le disque est monté
if mountpoint -q /mnt/backup; then
echo "[$DATE] Début du backup" >> "$LOG"
rsync -av --delete "$SRC" "$DEST" >> "$LOG" 2>&1
if [ $? -eq 0 ]; then
echo "[$DATE] Backup terminé avec succès" >> "$LOG"
else
echo "[$DATE] Erreur pendant le backup" >> "$LOG"
fi
else
echo "[$DATE] Disque de backup non monté" >> "$LOG"
fi
Ca tourne bien en cron, j’ai mis ca tous les deux jours pour l’instant. Je suis sur que c’est perfectible donc si vous avez des remarques, conseils ou mauvaises pratiques à corriger, je suis curieux de vous écouter.
Merci
# Mes remarques
Posté par Benoît Sibaud (site web personnel) . Évalué à 10 (+7/-0).
#!/usr/bin/env bash
en shebangset -eu -o pipefail
au début pour s'éviter des problèmes plus tardprintf
àecho
dès que les variables arrivent-a
je mettrais--archive
par exemple). Les versions courtes c'est sympa quand on les écrit, mais moins quand on les lit (genrecurl -sSLf
).[^] # Re: Mes remarques
Posté par MicP . Évalué à 4 (+3/-0). Dernière modification le 22 juillet 2025 à 16:09.
Bonjour
Il faudrait aussi actualiser la valeur de la variable DATE après la fin de la sauvegarde, sinon, la date de tous les messages envoyés dans backup.log sera toujours la même : celle du lancement du script.
[^] # Re: Mes remarques
Posté par MicP . Évalué à 2 (+1/-0). Dernière modification le 23 juillet 2025 à 23:44.
J'ajoute qu'en faisant la redirection des flux dans les toutes premières lignes de ton script :
…tous les messages d'erreurs et les sorties standard des lignes de commande qui suivent dans le script seront envoyées dans le fichier
/var/log/backup.log
sans avoir besoin de le spécifier.[^] # Re: Mes remarques
Posté par MicP . Évalué à 1 (+0/-0).
[^] # Re: Mes remarques
Posté par gUI (Mastodon) . Évalué à 3 (+0/-0).
if mountpoint -q /mnt/backup; then
un peu curieux, j'aurais plutôt vérifié que SRC et DEST existent.En théorie, la théorie et la pratique c'est pareil. En pratique c'est pas vrai.
[^] # Re: Mes remarques
Posté par lolop (site web personnel) . Évalué à 2 (+0/-0).
Au contraire, vérifier que la destination est bien un point de montage assure qu'on ne va pas faire la sauvegarde au mauvais endroit.
Votez les 30 juin et 7 juillet, en connaissance de cause. http://www.pointal.net/VotesDeputesRN
[^] # Re: Mes remarques
Posté par gUI (Mastodon) . Évalué à 3 (+0/-0).
Certes, mais avoue que ce serait vraiment pas de bol d'avoir
/mnt/backup/Documents
existant sur le rootfs.En théorie, la théorie et la pratique c'est pareil. En pratique c'est pas vrai.
# Date ISO miam
Posté par Nanawel (site web personnel, Mastodon) . Évalué à 5 (+4/-0).
Une syntaxe courte et efficace que j'applique dès que je peux sur
date
:Ce qui signifie "format ISO-8601 avec une précision à la seconde".
En bonus : pas d'espaces, donc plus pratique.
# backup ?
Posté par mahikeulbody . Évalué à 5 (+3/-0).
Même si chacun est libre d'avoir la définition qu'il veut de ce qu'est un backup, force est de reconnaître que
rsync -av --delete
ne correspond pas vraiment à la définition la plus courante.
[^] # Re: backup ?
Posté par Voltairine . Évalué à 3 (+1/-0).
Cela dépend surtout du reste du script. On peut parfaitement faire une sauvegarde incrémentale avec rsync (un nouveau dossier horodaté a à chaque fois et des liens en dur).
[^] # Re: backup ?
Posté par mahikeulbody . Évalué à 6 (+4/-0). Dernière modification le 22 juillet 2025 à 19:33.
Tout à fait, voir par exemple Timeshift., un excellent outil de backup basé sur rsync.
Mais ma remarque était par rapport au script "de backup" présenté, qui plus est avec l'option --delete qui est la marque d'une synchronisation, pas d'un backup (au sens habituel du terme).
[^] # Re: backup ?
Posté par gUI (Mastodon) . Évalué à 6 (+4/-1).
Copier des hardlink n'est en rien un backup : l'info n'est présente qu'une fois. C'est pas du chipotage au niveau de terme, c'est vraiment que tu n'as pas fait de sauvegarde en faisant ça.
De la même manière que l'option
--delete
fait que tes sauvegardes précédentes pouvant éventuellement être effacées… bin c'est plus des sauvegardes.En théorie, la théorie et la pratique c'est pareil. En pratique c'est pas vrai.
[^] # Re: backup ?
Posté par mahikeulbody . Évalué à 6 (+4/-0).
Il ne s'agit pas de copier des hardlinks mais de créer des hardlinks de fichiers déjà sauvegardés existants et non modifiés. Regarde comment marche Timeshift. C'est une vraie sauvegarde (avec en plus une belle UX pour explorer le passé).
Ce type de sauvegarde est cependant moins bien (en tous cas pour moi) que les borg, restic et autre, parce que la maille est au niveau fichier et non bloc (la déduplication est donc moins efficace), si on renomme un fichier ça va le dupliquer dans la sauvegarde suivante, si on déplace un fichier, idem.
[^] # Re: backup ?
Posté par gUI (Mastodon) . Évalué à 4 (+2/-1).
Oui je connais très bien j'en ai fait tourner un pendant des années chez moi.
Je voulais dire que avoir 10 hardlink sur un fichier n'en fait pas 10 copies.
En théorie, la théorie et la pratique c'est pareil. En pratique c'est pas vrai.
[^] # Re: backup ?
Posté par Voltairine . Évalué à 2 (+0/-0).
Tu n'a pas compris ma piste d'amélioration du script du demandeur. :D
Lire dans
man rsync
la description de l'option--link-dest
Envoyer un commentaire
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.