Dernière mise à jour : 24/12/2009 à 13h06
Cette méthode est valable pour tout type de distributionElle est basé sur la commande tar avec compression et possibilité de faire de l'incrémentale
Elle doit s'exécuter sous root
[size=150]A) Mise en place de la sauvegarde[/size]
1) Créer un répertoire où mettre les sauvegardes dans un filesystem contenant de la place disque
par example /BACKUP, /home/Backup ou mieux sur un disque dur USB (/media/<nom_de_volume_du_DD_USB>/Backup)
Pour l'example, nous utiliserons /BACKUP
Pour un DD USB, vous pouvez toujours créer un lien symbolique (ex: ln -s /media/disk/Backup /BACKUP)
:idea: Eviter de mettre les sauvegardes dans le même disque (ou filesystem) que le système à sauvegarder
sinon prévoir de copier les sauvegardes sur un disque USB ou graver sur CD/DVD ou par réseau sur un autre ordinateur
2) Copier le scripts ci dessous
/BACKUP/backup.sh
Code :
#!/bin/bash
level0() {
fsname=$1
fs=$2
[ -f $fsname.level0.snapshot ] && rm $fsname.level?.snapshot
[ -f $fsname.level0.tar.gz-aa ] && rm $fsname.level?.tar.gz*
[ -f $fsname.level0.log.gz ] && rm $fsname.level?.log.gz
(
tar -cvvf - \
--directory $fs \
--sparse \
--gzip \
--totals \
--one-file-system \
--label="$date $HOSTNAME level0 $fsname $fs" \
--exclude-from=$fsname.excludelist \
--listed-incremental=$fsname.level0.snapshot \
. | split -b 2047m - $fsname.level0.tar.gz-
) 2>&1 | gzip -c > $fsname.level0.log.gz
return ${PIPESTATUS[0]}
}
level1() {
fsname=$1
fs=$2
#level0 not found, make it
if [ ! \( -s $fsname.level0.snapshot -a -f $fsname.level0.tar.gz-aa \) ] ; then
echo "WARNING level0 not found on $fsname ($fs), make it !"
level0 $fsname $fs
return $?
fi
cp $fsname.level0.snapshot $fsname.level1.snapshot || exit 1
(
tar -cvvf - \
--directory $fs \
--sparse \
--gzip \
--totals \
--one-file-system \
--label="$date $HOSTNAME level1 $fsname $fs" \
--exclude-from=$fsname.excludelist \
--listed-incremental=$fsname.level1.snapshot \
. | split -b 2047m - $fsname.level1.tar.gz-
) 2>&1 | gzip -c > $fsname.level1.log.gz
return ${PIPESTATUS[0]}
}
pre() {
return 0
if ! mount | grep " $mp " ; then
mount $mp || exit 1
fi
}
post() {
return 0
umount $mp
}
export PATH=/sbin:/usr/sbin:/bin:/usr/bin
date=`date`
if [ $# -ne 4 ] ; then
echo "usage $0 level0|level1 fsname path mount_point"
exit 1
fi
mp=$4
case "$1" in
'level0')
pre
level0 $mp/$2 $3 || echo "ERROR level0 $mp/$2 $3 return code <> 0 ==> $?. Check log files, please !"
post
;;
'level1')
pre
level1 $mp/$2 $3 || echo "ERROR level1 $mp/$2 $3 return code <> 0 ==> $?. Check log files, please !"
post
;;
*)
echo "usage $0 level0|level1 fsname path"
esac
Faire un chmod +x /BACKUP/backup.sh pour le rendre exécutable
3) Créer le fichier d'exclusion pour le / (root)
/BACKUP/root.excludelist
Code :
./tmp/*
./var/tmp/*
4) Créer le fichier d'exclusion pour le /home
/BACKUP/home.excludelist
Code :
./Backup/*
./user/tmp/*
5) Créer le script de sauvegarde Total
/BACKUP/backup_full.sh
Code :
echo "*** Backup Full root / ***"
/home/Backup/backup.sh level0 root / /BACKUP
[ "$?" -eq 0 ] && echo "Done"
echo "*** Backup Full home /home ***"
/home/Backup/backup.sh level0 home /home /BACKUP
[ "$?" -eq 0 ] && echo "Done"
Faire un chmod +x /BACKUP/backup_full.sh pour le rendre exécutable
Important : L'example ici suppose que vous avez 2 filesystem : le système / et le /home
:idea: vous pouvez faire la version incrémentale (backup_inc.sh) en remplaçant level0 par level1
Vous pouvez prévoir par example un "full" mensuel du / et /home et un incrémental quotidien du /home uniquement
[size=150]B) Exécution de la sauvegarde[/size]
Lancer la sauvegarde manuellement une première fois
exécuter tout simplement /BACKUP/backup_full.sh
Vous pouvez ensuie l'automatiser dans un cron par exemple (full hebdomadaire à 12h30)
[list]crontab -l
# min(0-59) hours(0-23) day(1-31) month(1-12) dow(0-7) command
30 12 * * 5 /BACKUP/backup_full.sh >/BACKUP/backup_full.log 2>&1[/list]
[size=150]C) Restauration[/size]
Rappel : Toutes ces commandes sont à exécuter sous root
1) Restauration du tout /home
Tous les utilsateurs doivent être délogger
Code :
cd /home; cat /BACKUP/home.level0.tar.* | tar xvzf -
2) Restaurer un user du /home
L'utilsateur user doit être délogger
Code :
cd /home; cat /BACKUP/home.level0.tar.* | tar xvzf - ./user
3) Restaurer ces vidéos
Code :
cd /home; cat /BACKUP/home.level0.tar.* | tar xvzf - ./user/Vidéo
:idea: Vous pouvez restaurer au fichier près, le fichier home.level0.log contient la liste des fichiers sauvegardés
4) Restauration du tout le système /
Il faut démarrer avec un Live CD et monter le disque contenant le système à restaurer (ex: /mnt)
et brancher le disque USB contenant la sauvegarde (ex: /media/disk)
Code :
cd /mnt; cat /media/disk/root.level0.tar.* | tar xvzf -
4) Restaurer /usr/local
Code :
cd /; cat /BACKUP/root.level0.tar.* | tar xvzf - ./usr/local
Editeur : goupil le 23 Février 2009