J'aimerais mettre en miroir un répertoire de sauvegarde utilisé par rsnapshot vers un second emplacement pour plus de sécurité. L'idéal serait d'utiliser rsync avec ssh. Quels arguments dois-je fournir à rsync pour préserver les hardlinks (créés par rsnapshot) et les symlinks, pour supprimer des fichiers, pour copier récursivement, pour supprimer des fichiers dans la cible, etc ? Les fichiers sont tous sur des systèmes de fichiers ext3. De plus, que puis-je faire pour éviter que si la source est corrompue, les défauts soient rsyncisés vers le miroir ?
Réponses
Trop de publicités?Je pense que les options permettant de faire ce que vous voulez sont largement documentées dans le document rsync
page de manuel. En particulier, la page de manuel -H
option ( --hard-links
) permet la détection des liens durs, et --delete
fera en sorte que rsync supprime sur la destination des éléments qui n'existent pas sur la source. Donc peut-être quelque chose comme :
rsync -aH --delete /path/to/src/ /path/to/destination
De plus, que puis-je faire pour éviter que si la source est corrompue, les défauts soient rsyncisés sur le miroir ?
C'est une question délicate. Comment détecter la corruption ? Je pense que la seule vraie solution est d'échelonner la sauvegarde de votre sauvegarde (c'est-à-dire d'effectuer vos sauvegardes réelles sur votre destination principale, puis de les rsynciser sur votre destination secondaire immédiatement avant votre prochaine sauvegarde). De cette façon, si vous détectez un problème, vous avez jusqu'à la prochaine sauvegarde pour rétablir la situation.
Une autre solution consisterait à avoir rsnapshot
vers plusieurs destinations, de sorte que vous générez des sauvegardes à partir de votre source d'origine à deux endroits distincts. Ainsi, si l'un d'eux est endommagé, le second ne devrait pas être affecté.
Pour éviter la copie de données corrompues, vous pouvez conserver une sauvegarde hebdomadaire et espérer que vous remarquerez la corruption à la source avant de perdre toutes vos sauvegardes. Le meilleur moyen est d'utiliser -c et de comparer les sommes de contrôle de la source et de la destination pour déterminer si le fichier doit être copié ou non. Le seul inconvénient est qu'il doit lire l'intégralité du fichier, ce qui ralentit le processus de sauvegarde.
#!/bin/sh
# Create a Backup of Today
# Definitions
sevendaysago=$(date --date='6 days ago' +%Y-%m-%d-%A)
# Delete backups from 7 days ago
rm -rf /storage/backups/$sevendaysago
mkdir -p /storage/backups/`date +\%Y-\%m-\%d`-`date +\%A`/$host/$username
rsync -aHvz /storage/`date --date=yesterday +\%Y-\%m-\%d`-`date --date=yesterday +\%A`/$host/$user/ /storage/`date +\%Y-\%m-\%d`-`date +\%A`/$host/$user/
rsync -acHvz -e ssh --delete --exclude='logs' tim@tim.tim.net:/home/tim/ /storage/`date +\%Y-\%m-\%d`-`date +\%A`/$host/$user/