Sauvegardes Linux automatisées avec rsync et crontab

Automatiser ses sauvegardes Linux avec rsync et crontab

User avatar placeholder
Écrit par Vincent

22 juin 2026

Une sauvegarde manuelle finit souvent par être oubliée. En combinant rsync et crontab, vous pouvez automatiser la copie de vos fichiers vers un disque externe ou un serveur distant, tout en conservant des journaux exploitables et en empêchant deux exécutions simultanées.

Ce guide met en place une sauvegarde automatique Linux prudente : aucune suppression n’est activée par défaut, chaque première exécution se fait avec --dry-run, le support de destination doit être réellement monté, et une procédure de restauration est testée avant de considérer la sauvegarde comme fiable.

Exemples de chemins : les commandes utilisent l’utilisateur alice, la source /home/alice/Documents/ et le point de montage /mnt/sauvegarde. Remplacez-les par vos chemins absolus.

L’essentiel
Commande clé : rsync -a --dry-run source/ destination/ — toujours simuler avant d’écrire.
Prérequis : rsync et cron installés, un support de destination monté.
Portée : Ubuntu, Debian, Fedora, Arch, openSUSE et Alpine.
Sources : documentation officielle des projets cités, consultée le 20 juillet 2026.

Installer rsync et le service cron selon votre distribution

Installez les paquets et activez le service correspondant à votre distribution. Chaque opération est volontairement séparée afin que le bouton Copier ne mélange jamais plusieurs systèmes.

Ubuntu et Debian

Commande de terminal — actualiser l’index des paquets :

sudo apt update

Commande de terminal — installer rsync et cron :

sudo apt install rsync cron

Commande de terminal — activer et démarrer cron :

sudo systemctl enable --now cron.service

Commande de terminal — vérifier le service :

systemctl status cron.service --no-pager

Fedora

Commande de terminal — installer rsync et cronie :

sudo dnf install rsync cronie

Commande de terminal — activer et démarrer crond :

sudo systemctl enable --now crond.service

Commande de terminal — vérifier le service :

systemctl status crond.service --no-pager

Arch Linux

Commande de terminal — installer rsync et cronie :

sudo pacman -Syu rsync cronie

Commande de terminal — activer et démarrer cronie :

sudo systemctl enable --now cronie.service

Commande de terminal — vérifier le service :

systemctl status cronie.service --no-pager

openSUSE

Commande de terminal — installer rsync et cron :

sudo zypper install rsync cron

Commande de terminal — activer et démarrer cron :

sudo systemctl enable --now cron.service

Commande de terminal — vérifier le service :

systemctl status cron.service --no-pager

Alpine Linux

Les commandes suivantes sont à exécuter avec les droits administrateur. Alpine fournit généralement crond via BusyBox et utilise OpenRC.

Commande de terminal — installer rsync :

apk add rsync util-linux

Commande de terminal — ajouter crond au démarrage :

rc-update add crond default

Commande de terminal — démarrer crond :

rc-service crond start

Commande de terminal — vérifier le service :

rc-service crond status

Comprendre rsync et commencer sans risque

rsync compare la source et la destination, puis transfère uniquement les éléments nécessaires. Le slash final de la source est important : /home/alice/Documents/ copie le contenu du dossier, tandis que l’absence de slash peut créer un niveau Documents supplémentaire.

Prévisualiser obligatoirement la première synchronisation

Commande de terminal — simulation sans aucune modification :

rsync -aHv --dry-run --itemize-changes "/home/alice/Documents/" "/mnt/sauvegarde/Documents/"

Relisez la source, la destination et la liste annoncée. Une fois la simulation correcte, lancez la copie réelle sans option de suppression.

Commande de terminal — première copie réelle :

rsync -aHv "/home/alice/Documents/" "/mnt/sauvegarde/Documents/"
  • -a active le mode archive et préserve notamment dates, droits et liens symboliques ;
  • -H préserve les liens physiques ;
  • -v affiche les opérations ;
  • --itemize-changes détaille les changements pendant la simulation.

Utiliser –delete uniquement pour un miroir assumé

--delete retire de la destination les éléments absents de la source. Cette option n’est pas nécessaire pour une sauvegarde classique et peut propager une suppression accidentelle. Ne l’activez que si vous souhaitez réellement un miroir et disposez déjà d’un historique séparé.

Commande de terminal — simulation obligatoire du miroir :

rsync -aHv --delete --dry-run --itemize-changes "/home/alice/Documents/" "/mnt/sauvegarde/Documents/"

Examinez particulièrement chaque ligne commençant par *deleting. Après cette vérification seulement, vous pouvez exécuter le miroir.

Commande de terminal — miroir réel, à utiliser avec prudence :

rsync -aHv --delete "/home/alice/Documents/" "/mnt/sauvegarde/Documents/"

Exclure proprement les caches et fichiers temporaires

Les antislashs de continuation doivent être placés à la fin de chaque ligne. Le bloc suivant est directement exécutable.

Commande de terminal — simulation avec plusieurs exclusions :

rsync -aHv --dry-run --itemize-changes 
  --exclude='.cache/' 
  --exclude='node_modules/' 
  --exclude='*.tmp' 
  "/home/alice/Documents/" 
  "/mnt/sauvegarde/Documents/"

Utiliser un fichier d’exclusions

Commande de terminal — créer le répertoire de configuration :

install -d -m 700 "/home/alice/.config/rsync"

Commande de terminal — ouvrir le fichier :

nano "/home/alice/.config/rsync/excludes.txt"

Fichier de configuration — contenu de /home/alice/.config/rsync/excludes.txt :

.cache/
.mozilla/cache/
node_modules/
*.tmp
*.log

Commande de terminal — tester le fichier d’exclusions :

rsync -aHv --dry-run --itemize-changes --exclude-from="/home/alice/.config/rsync/excludes.txt" "/home/alice/Documents/" "/mnt/sauvegarde/Documents/"

Commande de terminal — exécuter la copie après validation :

rsync -aHv --exclude-from="/home/alice/.config/rsync/excludes.txt" "/home/alice/Documents/" "/mnt/sauvegarde/Documents/"

Vérifier que le support de sauvegarde est réellement monté

Tester uniquement l’existence de /mnt/sauvegarde ne suffit pas. Si le disque est absent, ce dossier peut exister sur la partition système et recevoir la sauvegarde au mauvais endroit. findmnt doit confirmer que le point exact est monté.

Commande de terminal — afficher le montage exact :

findmnt --mountpoint "/mnt/sauvegarde"

Commande de terminal — contrôle exploitable dans un script :

mountpoint -q "/mnt/sauvegarde" && printf 'Support montén' || printf 'Support absentn' >&2

Exemple de sortie attendue :

TARGET          SOURCE      FSTYPE OPTIONS
/mnt/sauvegarde /dev/sdb1   ext4   rw,relatime

Créer un script Bash robuste avec journal utilisateur et verrou flock

Le script ci-dessous utilise des chemins absolus, écrit dans le dossier personnel, refuse de continuer si la source manque ou si le support n’est pas monté, teste l’écriture sur le disque, journalise les erreurs et bloque les exécutions concurrentes avec flock. Il n’emploie pas --delete.

Préparer les répertoires

Commande de terminal — créer les dossiers privés :

install -d -m 700 "/home/alice/.local/bin" "/home/alice/.local/state/sauvegarde-rsync" "/home/alice/.cache" "/home/alice/.config/rsync"

Commande de terminal — ouvrir le script :

nano "/home/alice/.local/bin/sauvegarde-rsync.sh"

Contenu du script

Fichier de configuration — contenu de /home/alice/.local/bin/sauvegarde-rsync.sh :

#!/usr/bin/env bash
set -Eeuo pipefail
IFS=$'nt'
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

SOURCE="/home/alice/Documents/"
MOUNT_POINT="/mnt/sauvegarde"
DESTINATION="${MOUNT_POINT}/Documents/"
LOG_DIR="/home/alice/.local/state/sauvegarde-rsync"
LOG_FILE="${LOG_DIR}/sauvegarde.log"
LOCK_FILE="/home/alice/.cache/sauvegarde-rsync.lock"
EXCLUDE_FILE="/home/alice/.config/rsync/excludes.txt"

DRY_RUN=false
if [[ "${1:-}" == "--dry-run" ]]; then
  DRY_RUN=true
elif [[ $# -gt 0 ]]; then
  printf 'Usage : %s [--dry-run]n' "$0" >&2
  exit 64
fi

for command_name in rsync findmnt flock; do
  if ! command -v "$command_name" >/dev/null 2>&1; then
    printf 'Commande requise absente : %sn' "$command_name" >&2
    exit 69
  fi
done

mkdir -p "$LOG_DIR" "$(dirname "$LOCK_FILE")"
exec 9>"$LOCK_FILE"

if ! flock -n 9; then
  printf 'Une sauvegarde est déjà en cours.n' >&2
  exit 75
fi

touch "$LOG_FILE"
chmod 600 "$LOG_FILE"
exec >>"$LOG_FILE" 2>&1

timestamp() {
  date --iso-8601=seconds
}

on_error() {
  local status=$?
  printf '[%s] ÉCHEC ligne %s, code %sn' 
    "$(timestamp)" "${BASH_LINENO[0]:-inconnue}" "$status" >&2
  exit "$status"
}
trap on_error ERR

MODE_LABEL=""
if [[ "$DRY_RUN" == true ]]; then
  MODE_LABEL=" (simulation)"
fi

printf 'n[%s] Début de la sauvegarde%sn' 
  "$(timestamp)" "$MODE_LABEL"

if [[ ! -d "$SOURCE" ]]; then
  printf 'Source introuvable : %sn' "$SOURCE" >&2
  exit 66
fi

if ! findmnt -rn -M "$MOUNT_POINT" >/dev/null; then
  printf 'Aucun système de fichiers ne couvre : %sn' "$MOUNT_POINT" >&2
  exit 72
fi

MOUNT_TARGET="$(findmnt -rn -o TARGET -M "$MOUNT_POINT")"
MOUNT_SOURCE="$(findmnt -rn -o SOURCE -M "$MOUNT_POINT")"

if [[ "$MOUNT_TARGET" != "$MOUNT_POINT" ]]; then
  printf 'Le point exact %s n’est pas monté ; montage détecté : %sn' 
    "$MOUNT_POINT" "$MOUNT_TARGET" >&2
  exit 72
fi

if [[ ! -w "$MOUNT_POINT" ]]; then
  printf 'Support non accessible en écriture : %sn' "$MOUNT_POINT" >&2
  exit 73
fi

mkdir -p "$DESTINATION"
WRITE_TEST="${MOUNT_POINT}/.sauvegarde-rsync-test.$$"
: >"$WRITE_TEST"
rm -f -- "$WRITE_TEST"

RSYNC_ARGS=(
  -aH
  --numeric-ids
  --human-readable
  --itemize-changes
)

if [[ -r "$EXCLUDE_FILE" ]]; then
  RSYNC_ARGS+=(--exclude-from="$EXCLUDE_FILE")
fi

if [[ "$DRY_RUN" == true ]]; then
  RSYNC_ARGS+=(--dry-run)
fi

printf '[%s] Support : %s monté sur %sn' 
  "$(timestamp)" "$MOUNT_SOURCE" "$MOUNT_TARGET"

rsync "${RSYNC_ARGS[@]}" "$SOURCE" "$DESTINATION"

printf '[%s] Sauvegarde terminée avec succèsn' "$(timestamp)"

Rendre le script exécutable et imposer le test initial

Le mode 700 réserve la lecture, l’écriture et l’exécution au seul propriétaire ; le détail de cette notation est expliqué dans le mémo sur les permissions avec chmod.

Commande de terminal — protéger et rendre le script exécutable :

chmod 700 "/home/alice/.local/bin/sauvegarde-rsync.sh"

Commande de terminal — première exécution obligatoire en simulation :

/home/alice/.local/bin/sauvegarde-rsync.sh --dry-run

Commande de terminal — lire le journal utilisateur :

tail -n 100 "/home/alice/.local/state/sauvegarde-rsync/sauvegarde.log"

Lorsque le journal confirme la bonne source, le bon support et les fichiers attendus, lancez une première copie réelle.

Commande de terminal — première exécution réelle :

/home/alice/.local/bin/sauvegarde-rsync.sh

Planifier la sauvegarde avec des chemins absolus dans crontab

Cron fournit un environnement minimal. N’utilisez ni ~, ni variables implicites pour le chemin du script. Vérifiez d’abord l’emplacement de crontab ; les exemples suivants utilisent le chemin courant /usr/bin/crontab.

Commande de terminal — vérifier le chemin de crontab :

command -v crontab

Commande de terminal — ouvrir la crontab utilisateur :

/usr/bin/crontab -e

Fichier de configuration — sauvegarde quotidienne à 2 h :

SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
MAILTO=""

0 2 * * * /home/alice/.local/bin/sauvegarde-rsync.sh

Autres fréquences avec chemin absolu

Fichier de configuration — toutes les heures :

0 * * * * /home/alice/.local/bin/sauvegarde-rsync.sh

Fichier de configuration — chaque lundi à 3 h :

0 3 * * 1 /home/alice/.local/bin/sauvegarde-rsync.sh

Fichier de configuration — chaque jour à 8 h et 20 h :

0 8,20 * * * /home/alice/.local/bin/sauvegarde-rsync.sh

Commande de terminal — contrôler la crontab enregistrée :

/usr/bin/crontab -l

Commande de terminal — contrôler le dernier journal après l’heure prévue :

tail -n 100 "/home/alice/.local/state/sauvegarde-rsync/sauvegarde.log"

Sécuriser une sauvegarde rsync automatisée par SSH

Une tâche cron ne peut pas demander un mot de passe. Si le service OpenSSH n’est pas encore en place sur la machine distante, commencez par configurer SSH sur Linux. Ne réutilisez pas votre clé SSH personnelle et ne conseillez pas une clé sans passphrase sans protections compensatoires. Pour un cron non interactif, créez une clé dédiée, un compte distant dédié, limitez la clé à l’adresse IP source et, lorsque rrsync est disponible, enfermez-la dans le seul répertoire de sauvegarde.

Créer une clé dédiée au poste de sauvegarde

Commande de terminal — préparer le dossier SSH :

install -d -m 700 "/home/alice/.ssh"

Commande de terminal — créer la clé dédiée non interactive :

ssh-keygen -t ed25519 -a 100 -N '' -f "/home/alice/.ssh/id_ed25519_rsync" -C "rsync-cron@poste"

Cette clé sans passphrase n’est acceptable que pour cet usage dédié et avec les restrictions serveur ci-dessous. Conservez la clé privée en mode 600.

Commande de terminal — protéger la clé privée :

chmod 600 "/home/alice/.ssh/id_ed25519_rsync"

Vérifier la clé d’hôte avant de l’enregistrer

Commande de terminal — récupérer temporairement la clé d’hôte :

ssh-keyscan -t ed25519 backup.example.net > "/home/alice/.ssh/backup.example.net.hostkey"

Commande de terminal — afficher son empreinte :

ssh-keygen -lf "/home/alice/.ssh/backup.example.net.hostkey"

Comparez cette empreinte avec celle fournie par l’administrateur du serveur via un canal distinct. Ajoutez-la seulement après concordance.

Commande de terminal — enregistrer la clé d’hôte vérifiée :

cat "/home/alice/.ssh/backup.example.net.hostkey" >> "/home/alice/.ssh/known_hosts"

Commande de terminal — protéger known_hosts :

chmod 600 "/home/alice/.ssh/known_hosts"

Restreindre la clé côté serveur

Sur le serveur, créez un compte sauvegarde qui n’a accès en écriture qu’à son répertoire de sauvegarde. Vérifiez ensuite le chemin de rrsync.

Commande de terminal — vérifier rrsync sur le serveur :

command -v rrsync

Fichier de configuration — exemple de ligne dans /home/sauvegarde/.ssh/authorized_keys :

command="/usr/bin/rrsync /srv/sauvegardes/alice",from="203.0.113.10",restrict ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAA... rsync-cron@poste

Remplacez l’adresse IP, le chemin de rrsync et la clé publique. L’option restrict désactive notamment le terminal interactif et les redirections ; la commande forcée limite rsync au répertoire indiqué.

Configurer le client SSH

Fichier de configuration — contenu de /home/alice/.ssh/config :

Host sauvegarde-rsync
    HostName backup.example.net
    User sauvegarde
    IdentityFile /home/alice/.ssh/id_ed25519_rsync
    IdentitiesOnly yes
    BatchMode yes
    StrictHostKeyChecking yes
    UserKnownHostsFile /home/alice/.ssh/known_hosts
    ConnectTimeout 15

Commande de terminal — protéger la configuration :

chmod 600 "/home/alice/.ssh/config"

Commande de terminal — tester rsync à distance sans écrire :

/usr/bin/rsync -aH --dry-run --itemize-changes -e "/usr/bin/ssh -F /home/alice/.ssh/config" "/home/alice/Documents/" "sauvegarde-rsync:/Documents/"

Commande de terminal — lancer la copie distante après validation :

/usr/bin/rsync -aH -e "/usr/bin/ssh -F /home/alice/.ssh/config" "/home/alice/Documents/" "sauvegarde-rsync:/Documents/"

Conserver un historique avec des instantanés sûrs

Un simple dossier daté recopié intégralement gaspille de l’espace, tandis qu’une commande de suppression large avec rm -rf peut devenir catastrophique si une variable est vide ou erronée. La méthode suivante crée un instantané complet à l’aide de liens physiques, le publie seulement après le succès de rsync, puis nettoie uniquement des dossiers dont le nom respecte un format strict. Pour figer un instantané dans une archive datée unique plutôt que dans une arborescence, la commande tar prend le relais.

Cette approche conserve un historique de vos fichiers. Pour le système lui-même — paquets, configuration, noyau — le besoin est différent et appelle un outil dédié : créer des points de restauration système avec Timeshift permet d’annuler une mise à jour ratée sans toucher à vos documents.

Créer un instantané de façon atomique

Commande de terminal — ouvrir le script d’instantané :

nano "/home/alice/.local/bin/sauvegarde-snapshot.sh"

Fichier de configuration — contenu de /home/alice/.local/bin/sauvegarde-snapshot.sh :

#!/usr/bin/env bash
set -Eeuo pipefail
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

SOURCE="/home/alice/Documents/"
MOUNT_POINT="/mnt/sauvegarde"
SNAPSHOT_ROOT="${MOUNT_POINT}/snapshots"
STAMP="$(date '+%Y-%m-%dT%H%M%S')"
FINAL="${SNAPSHOT_ROOT}/${STAMP}"
PARTIAL="${SNAPSHOT_ROOT}/.partial-${STAMP}"
LATEST="${SNAPSHOT_ROOT}/latest"

if [[ "$(findmnt -rn -o TARGET -M "$MOUNT_POINT")" != "$MOUNT_POINT" ]]; then
  printf 'Support non monté sur %sn' "$MOUNT_POINT" >&2
  exit 72
fi

mkdir -p "$SNAPSHOT_ROOT"
mkdir "$PARTIAL"

cleanup_partial() {
  if [[ -d "$PARTIAL" ]]; then
    find "$PARTIAL" -xdev -depth -delete
  fi
}
trap cleanup_partial EXIT INT TERM

RSYNC_ARGS=(-aH --numeric-ids)

if [[ -L "$LATEST" ]]; then
  PREVIOUS="$(readlink -f "$LATEST")"
  case "$PREVIOUS" in
    "$SNAPSHOT_ROOT"/20??-??-??T??????)
      RSYNC_ARGS+=(--link-dest="$PREVIOUS")
      ;;
    *)
      printf 'Lien latest inattendu : %sn' "$PREVIOUS" >&2
      exit 65
      ;;
  esac
fi

rsync "${RSYNC_ARGS[@]}" "$SOURCE" "$PARTIAL/"
mv -- "$PARTIAL" "$FINAL"

ln -sfn "$STAMP" "$LATEST"

trap - EXIT INT TERM
printf 'Instantané créé : %sn' "$FINAL"

Commande de terminal — rendre le script exécutable :

chmod 700 "/home/alice/.local/bin/sauvegarde-snapshot.sh"

Commande de terminal — lancer un instantané :

/home/alice/.local/bin/sauvegarde-snapshot.sh

Prévisualiser puis appliquer une rétention de 30 jours

Ne planifiez jamais le nettoyage avant d’avoir testé une restauration. Commencez par afficher les seuls instantanés candidats.

Commande de terminal — prévisualiser les anciens instantanés :

find "/mnt/sauvegarde/snapshots" -mindepth 1 -maxdepth 1 -xdev -type d -name '20??-??-??T??????' -mtime +30 -print

Après vérification, utilisez un script qui valide chaque chemin et emploie find -delete dans le même système de fichiers, au lieu d’un rm -rf construit à partir d’une variable.

Commande de terminal — ouvrir le script de rétention :

nano "/home/alice/.local/bin/nettoyer-snapshots.sh"

Fichier de configuration — contenu de /home/alice/.local/bin/nettoyer-snapshots.sh :

#!/usr/bin/env bash
set -Eeuo pipefail
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

MOUNT_POINT="/mnt/sauvegarde"
SNAPSHOT_ROOT="${MOUNT_POINT}/snapshots"

if [[ "$(findmnt -rn -o TARGET -M "$MOUNT_POINT")" != "$MOUNT_POINT" ]]; then
  printf 'Support non monté sur %sn' "$MOUNT_POINT" >&2
  exit 72
fi

while IFS= read -r -d '' OLD_SNAPSHOT; do
  case "$OLD_SNAPSHOT" in
    "$SNAPSHOT_ROOT"/20??-??-??T??????)
      printf 'Suppression contrôlée : %sn' "$OLD_SNAPSHOT"
      find "$OLD_SNAPSHOT" -xdev -depth -delete
      ;;
    *)
      printf 'Chemin refusé : %sn' "$OLD_SNAPSHOT" >&2
      exit 65
      ;;
  esac
done < <(
  find "$SNAPSHOT_ROOT" 
    -mindepth 1 
    -maxdepth 1 
    -xdev 
    -type d 
    -name '20??-??-??T??????' 
    -mtime +30 
    -print0
)

Commande de terminal — protéger le script de rétention :

chmod 700 "/home/alice/.local/bin/nettoyer-snapshots.sh"

Commande de terminal — appliquer la rétention après validation :

/home/alice/.local/bin/nettoyer-snapshots.sh

Tester une restauration avant de faire confiance à la sauvegarde

Une sauvegarde n’est validée que lorsqu’une restauration est reproductible. Restaurez d’abord dans un répertoire isolé, jamais directement par-dessus vos fichiers de travail.

Restaurer dans un dossier de test

Commande de terminal — préparer un dossier de test :

install -d -m 700 "/home/alice/restauration-test"

Commande de terminal — vérifier que le dossier est vide :

test -z "$(find "/home/alice/restauration-test" -mindepth 1 -print -quit)" || { printf 'Le dossier de restauration n’est pas vide.n' >&2; exit 1; }

Si ce contrôle échoue, choisissez un nouveau dossier vide au lieu d’effacer automatiquement un chemin existant.

Commande de terminal — simuler la restauration :

rsync -aH --dry-run --itemize-changes "/mnt/sauvegarde/Documents/" "/home/alice/restauration-test/"

Commande de terminal — effectuer la restauration de test :

rsync -aH "/mnt/sauvegarde/Documents/" "/home/alice/restauration-test/"

Commande de terminal — vérifier par sommes de contrôle, sans rien modifier :

rsync -aHnci --delete "/mnt/sauvegarde/Documents/" "/home/alice/restauration-test/"

Ici, --delete est associé à -n : il signale seulement les fichiers supplémentaires dans le dossier de test et n’en supprime aucun. Une sortie vide indique que les deux arborescences correspondent selon ces critères.

Exemple de sortie en cas de différence :

>fcst...... rapport.odt
*deleting   ancien-fichier.tmp

Restaurer un fichier précis

Commencez toujours par une simulation, puis copiez le fichier après avoir vérifié sa destination.

Commande de terminal — simuler la restauration d’un fichier :

rsync -aH --dry-run --itemize-changes "/mnt/sauvegarde/Documents/rapport.odt" "/home/alice/Documents/rapport.odt"

Commande de terminal — restaurer le fichier :

rsync -aH "/mnt/sauvegarde/Documents/rapport.odt" "/home/alice/Documents/rapport.odt"

Restaurer depuis le dernier instantané

Commande de terminal — vérifier la cible du lien latest :

readlink -f "/mnt/sauvegarde/snapshots/latest"

Commande de terminal — simuler la restauration du dernier instantané :

rsync -aH --dry-run --itemize-changes "/mnt/sauvegarde/snapshots/latest/" "/home/alice/restauration-test/"

Commande de terminal — restaurer le dernier instantané :

rsync -aH "/mnt/sauvegarde/snapshots/latest/" "/home/alice/restauration-test/"

Diagnostiquer une tâche cron qui ne se lance pas

Les causes les plus fréquentes sont un service inactif, un chemin non absolu, un script non exécutable, un disque non monté ou un environnement différent du terminal interactif.

Commande de terminal — vérifier les droits du script :

ls -l "/home/alice/.local/bin/sauvegarde-rsync.sh"

Commande de terminal — reproduire un environnement cron minimal :

env -i HOME="/home/alice" PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" /home/alice/.local/bin/sauvegarde-rsync.sh --dry-run

Commande de terminal — rechercher les erreurs dans le journal :

grep -E 'ÉCHEC|introuvable|non monté|absente' "/home/alice/.local/state/sauvegarde-rsync/sauvegarde.log"

Questions fréquentes sur rsync et crontab

rsync écrase-t-il les fichiers existants dans la destination ?
rsync met à jour les fichiers dont le contenu ou les attributs diffèrent selon les options choisies. Sans --delete, les éléments uniquement présents dans la destination restent en place. Avec --delete, ils seraient supprimés ; utilisez donc toujours une simulation préalable et un historique indépendant.

Pourquoi ma tâche crontab ne se déclenche-t-elle pas ?
Vérifiez le service cron propre à votre distribution, les chemins absolus, le droit d’exécution du script, le journal utilisateur et le montage du support. Le test avec env -i permet de reproduire un environnement proche de cron.

Quelle différence entre rsync et cp -r ?
cp -r recopie récursivement sans la logique de synchronisation de rsync. rsync compare la source et la destination, peut afficher précisément les changements et reprend plus efficacement les copies répétées.

Puis-je sauvegarder vers un service cloud ?
rsync travaille avec des chemins locaux ou SSH. Pour des API comme S3, Google Drive ou certains services Nextcloud, utilisez plutôt un outil tel que rclone, avec les mêmes principes : simulation, journal, verrou, contrôle des erreurs et restauration testée.

Conclusion

Vous disposez maintenant d’une sauvegarde Linux automatisée qui refuse un support absent, évite les exécutions concurrentes, conserve un journal dans votre compte et commence systématiquement par une simulation. Les exemples cron utilisent des chemins absolus, l’accès SSH automatisé est dédié et restreint, et la rotation ne repose plus sur une suppression large non contrôlée.

Pour limiter l’impact des synchronisations sur une machine sollicitée, voyez aussi le guide pour optimiser les performances de Linux, notamment la surveillance des disques et de la charge.

Planifiez également un test de restauration régulier. Une tâche cron sans erreur ne prouve que l’exécution du script ; seule une restauration vérifiée prouve que les données sont réellement récupérables.

Dernière vérification des commandes et des procédures : 20 juillet 2026, d’après la documentation officielle des projets et distributions cités.

Vincent

Vincent est le créateur de MémoLinux. Venu de Windows par curiosité, il est resté sur Linux pour sa logique et le plaisir de comprendre ce qui se passe sous le capot. Il documente ici les commandes et les procédures qu’il utilise lui-même, avec leurs sources officielles et leur date de vérification.