Sauvegarder avec rsync
De Wiki de la communauté Mandriva.
Si vous voulez contribuer, cliquez simplement sur l'onglet modifier. Consultez également les autres pages dont le contenu est à réviser.
Sommaire |
Public visé
Cet article sur rsync ne s'adresse pas aux personnes débutantes. J'entends par là les personnes :
- ne manipulant pas la console
- n'ayant pas d'expérience en programmation BASH
Mais de nombreux outils graphiques faciles sont disponibles.
- grsync interface graphique facile basée sur rsync
- rsnapshot basé justement sur rsync
Mandriva en propose d'aussi dans le Centre de Contrôle Mandriva
Maintenant, si vous êtes prêt à vous amuser ou si vous voulez gérer vos sauvegardes à 100 %, c'est article est fait pour vous.
Brève présentation de rsync
Le lecteur pourra voir avec profit la page sur Unison.
Solution de sauvegarde sur disque local
Objectifs
Les objectifs sont les suivant :
- Réaliser des sauvegardes automatiques à l'aide de cron.
- Protection contre le double lancement.
- Avoir une copie conforme des fichiers actuels. Ceci est utile en cas de crash du disque ou en cas de perte massive de données.
- Avoir une sauvegarde incrémentielle. Ceci nous assure un historique des changements. Si un fichier corrompu s'est déjà propagé dans la copie conforme, on doit pouvoir le retrouver dans cette sauvegarde.
En plus de cela, pour le confort :
- Compression des sauvegardes incrémentielles au format bz2 afin d'économiser l'espace disque.
- Suppression des sauvegardes incrémentielles les plus anciennes.
Le script
Le script que je propose pour effectuer cela est le suivant : Attention, cette page est en cours de rédaction, n'utilisez pas encore ce script
#!/bin/sh
###########################################################
# This script uses rsync to backup directories on a media
# (ex: USB disk) with a copy and incremental method.
###########################################################
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
############################################################
#
# Written by Spip <unpeudescience at gmail dot com>
# Version 1.0
#
############################################################
#to be nice...
ionice -c3 -p$$
renice +15 -p $$
THEDATE=`date +%F_%Hh%M`
FILE='/media/disk/sauvegarde'
LOGFILE='/var/log/sauvegarde'
SPLIT='====================================================================='
#check logfile directory
if ! [ -e $LOGFILE ]
then
/bin/mkdir -p $LOGFILE
fi
#check if the media is mounted
if ! [ -e $FILE ]
then
echo "$THEDATE : péripherique non connecté. Pas de sauvegarde possible" >> "$LOGFILE/save.log"
echo $SPLIT >> "$LOGFILE/save.log"
exit 0
fi
#prevent a second task
LOCKFILE="/var/lock/sauvegarde.lock"
[ -f $LOCKFILE ] && exit 0
#if the script are stoped, remove lockfile
trap "rm -f $LOCKFILE" EXIT
touch $LOCKFILE
echo "$THEDATE : Début de sauvegarde" >> "$LOGFILE/save.log"
# $1:time to keep files; $2: name of the backup; $3: target
function save() {
echo "$SPLIT" >> "$LOGFILE/$2.log"
echo "$THEDATE" >> "$LOGFILE/$2.log"
#Incremental & copie
INC="$FILE/$2/INC/$THEDATE"
BAK="$FILE/$2/BAK"
TOSAVE="$3"
/bin/mkdir -p "$INC"
if ! [ -e "$BAK" ]
then
/bin/mkdir -p "$BAK"
fi
#a: archivage :recurcif, preserve dates, persmissions, groupes...
#v: verbose mode
#delete : supprime les fichiers n'etant plus chez l'émeteur >> copie conforme.
/usr/bin/rsync -av --stats --delete --backup --backup-dir="$INC" "$TOSAVE" "$BAK" >> "$LOGFILE/$2.log"
#bz2 compression & remove files
cd $FILE/$2/INC
tar -cjvf "$INC.tar.bz2" "$THEDATE"
rm -rf "$THEDATE"
#Mr Proper with tmpwatch: 3d indicates 3 days, time before cleaning
/usr/sbin/tmpwatch -a $1 "$FILE/$2/INC" >> "$LOGFILE/save.log"
}
#List here all repositories to backup
save 20d thunderbird_gnu /home/gnu/.thunderbird/
save 7d firefox_gnu /home/gnu/.mozilla/
save 40d source_code /home/gnu/Bureau/source_code/
#to log the end of the backup
THEDATE=`date +%F_%Hh%M`
echo "$THEDATE : Sauvegarde effectuée" >> "$LOGFILE/save.log"
exit 0
Le script est largement commenté, ajoutons tout de même quelques précisions :
Automatisation
Le script est placé dans /opt/script. Je crée ensuite un lien symbolique dans le dossier /etc/cron.daily
Remarque sur le système de fichier
J'ai effectué mes premiers essais avec un disque formaté en FAT. Cependant, j'avais un problème avec ce format. Les fichiers possédant des majuscules étaient sauvegardés avec des minuscules, d'où un nouveau transfert à chaque sauvegarde. Ceci vient d'une option dans le montage du disque : shortname KDE3 met cette option sur none. Je n'ai pas réussi à contourner le problème (GNOME semble proposer une option pour modifier cela). l'utilisation de fstab avec la bonne option shortname=mixed a provoqué d'autres erreurs sur les liens symboliques. Je suis donc passé à un format ext3 plus rapidement que prévu. Celui-ci fonctionne parfaitement.
Solution de sauvegarde à travers SSH
Solutions alternatives
- LuckyBackup une application de sauvegardes/synchronisation s'appuyant sur la technologie rsync


