Il existe des centaines de méthodes pour faire des backups, plusieurs avec rsync. Rsync étant un outil merveilleux et très puissant, dans ce billet je vais vous expliquer une méthode efficace qui économise l'espace disque.
Pour l'exemple on va prendre pour acquis que la sauvegarde se fait tous les jours, mais ça pourrait aussi bien être toutes les semaines, tous les deux jours, etc... Cette méthode permet donc de garder une sauvegarde des trois derniers jours mais sans utiliser trois fois l'espace.
Quelques avantages de cette méthode:
Tout d'abord voici de quoi aurait l'air le script shell:
#!/bin/sh TARGET=/mnt/sda2/backups SOURCE=/home/ /bin/rm -Rf $TARGET/backup.2 /bin/mv $TARGET/backup.1 $TARGET/backup.2 /bin/mv $TARGET/backup.0 $TARGET/backup.1 /usr/bin/rsync -a --no-o --delete --safe-links --link-dest=$TARGET/backup.1 $SOURCE $TARGET/backup.0/
Explication:
SOURCE est le dossier que vous désirez sauvegarder.
TARGET est la destination des sauvegardes (de préférence un disque dur différent ou, au moins, une partition différente).
Dans le dossier $TARGET vous devez créer trois dossiers: backup.0, backup.1 et backup.2. Ceux-ci contiendront vos sauvegardes d'aujourd'hui, d'hier et d'avant hier respectivement.
Le script commence par supprimer le dossier backup.2 qui est le plus ancien backup. Il décale les autres dossiers afin de pouvoir créé un nouveau backup.0, c'est à dire le plus récent (aujourd'hui).
La magie se passe dans la dernière ligne. Rsync va scanner le dossier source en le comparant avec la sauvegarde du jour précédent (--link-dest=$TARGET/backup.1
). Il va vérifier tous les fichiers trouvés dans le répertoire source et les comparer avec ceux du jour précédent, backup.1. Lorsqu'il trouve un fichier qui a changé depuis la dernière sauvegarde, il le copie dans backup.0. Par contre, et c'est là toute la beauté de la chose, si le fichier n'a PAS changé, il va créé un lien dur vers le fichier se trouvant dans la sauvegarde d'hier.
De cette façon chaque dossier de sauvegarde backup.0, backup.1 et backup.2 seront des images "complètes" de votre dossier source, mais les fichiers identiques entre les sauvegardes seront stoqués une seule fois sur le disque !
La dernière étape est de planifier un cron job pour automatiser les sauvegardes !
#!/bin/sh TARGET=/mnt/sda2/backups SOURCE=/home/ /bin/rm -Rf $TARGET/backup.2 /bin/mv $TARGET/backup.1 $TARGET/backup.2 cp -al $TARGET/backup.0 $TARGET/backup.1 /usr/bin/rsync -a --no-o --delete --safe-links $SOURCE $TARGET/backup.0/