Skip to content
VDS · Sauvegardes et disque

Sauvegardes avec rsync

Comment configurer la copie de fichiers vers un autre serveur via SSH, créer un historique de versions à l'aide de liens physiques, et éviter de trop supprimer avec la dangereuse option --delete.

Mis à jour le 23 août 2026

rsync est la méthode la plus simple et fonctionnelle pour faire des copies : il est disponible partout, ne transfère que les parties modifiées des fichiers et fonctionne via SSH. Pour de petits volumes de données, cela suffit.

Commande de base

rsync -avz --delete \
  -e "ssh -i /root/.ssh/backup_key -p 22" \
  /var/www/ backup@backup.example.com:/srv/backup/vds/www/

Détail des options :

  • -a — préserve les permissions, les propriétaires, les dates et les liens ;
  • -v — affiche le déroulement ;
  • -z — compresse pendant le transfert (utile jusqu'à 500 Mbps s'il y a beaucoup de données) ;
  • --delete — supprime chez le destinataire ce qui n'existe plus à la source.

Une barre oblique finale dans le chemin source signifie « le contenu du répertoire » ; sans elle, c'est le répertoire lui-même qui est copié. /var/www/ et /var/www donnent des résultats différents et, combinés à --delete, cette différence efface ce qu'il ne faut pas. Lancez toujours d'abord avec --dry-run.

rsync -avzn --delete /var/www/ backup@backup.example.com:/srv/backup/vds/www/

L'option -n correspond au dry run.

Clé d'accès sans mot de passe

La copie planifiée exige une connexion sans saisie de mot de passe :

ssh-keygen -t ed25519 -f /root/.ssh/backup_key -N ""
ssh-copy-id -i /root/.ssh/backup_key.pub backup@backup.example.com

Chez le destinataire, limitez cette clé à une seule commande : ainsi, une clé volée ne donnera pas accès à un shell. Dans le fichier ~/.ssh/authorized_keys du destinataire :

command="rrsync -wo /srv/backup",restrict ssh-ed25519 AAAA... backup

Historique des versions avec liens physiques

rsync seul ne conserve que l'état actuel : si vous avez supprimé un fichier hier et que vous le remarquez aujourd'hui, il n'y a nulle part où le restaurer. --link-dest vous donne un historique : les fichiers inchangés ne sont pas recopiés mais liés, si bien que trente copies n'occupent guère plus qu'une seule.

#!/bin/bash
set -euo pipefail
DEST=/srv/backup/vds
TODAY=$(date +%F)
rsync -a --delete \
  --link-dest="$DEST/latest" \
  /var/www/ "$DEST/$TODAY/"
ln -sfn "$DEST/$TODAY" "$DEST/latest"
find "$DEST" -maxdepth 1 -type d -mtime +30 -name "20*" -exec rm -rf {} +

Exécutez le script selon une planification la nuit, et toujours avec journalisation.

Exclusions

rsync -avz --exclude-from=/root/backup-exclude.txt / backup@host:/srv/backup/vds/root/
/proc/
/sys/
/dev/
/run/
/tmp/
/var/lib/docker/
/var/cache/
*.log

Copier toute la racine est rarement nécessaire : il est plus utile de constituer une liste précise à partir de l'article ce qu'il faut sauvegarder exactement.

Quand rsync n'est pas adapté

  • Si vous avez besoin de chiffrement du stockage et de déduplication, utilisez Restic.
  • Si les données changent en permanence et que l'intégrité compte, faites d'abord un dump de la base de données, puis rsync du fichier obtenu.
  • Le destinataire est un stockage tiers auquel vous ne faites pas confiance : rsync écrit les fichiers tels quels, sans chiffrement côté client.

Erreurs courantes

  • --delete avec un mauvais chemin source. Un répertoire source vide efface le destinataire. Le dry run est obligatoire.
  • Une copie sur le même disque. Ce n'est pas une sauvegarde, c'est une seconde cible pour la même panne. Voir les copies hors site.
  • La compression de données déjà compressées. -z ne fait que ralentir les archives et les images.
  • L'exécution nocturne sature le disque. Le plafond de débit d'écriture dépend du tier : voir la vitesse du disque. --bwlimit=20000 et une exécution aux heures creuses aident.
  • Personne ne vérifie le résultat. Journalisez le code de retour et surveillez-le : rsync ... || echo "backup failed" | mail -s alert you@example.com.