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/wwwdonnent 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
--deleteavec 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.
-zne 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=20000et 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.