Dernière mise à jour : 28/12/2009 à 13h59
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
A) Mise en place de la sauvegarde
1) Créer un répertoire où mettre les sauvegardes dans un filesystem contenant de la place disque
par exemple /BACKUP, /home/Backup ou mieux sur un disque dur USB (/media/<nom_de_volume_du_DD_USB>/Backup)
Pour l'exemple, nous utiliserons /BACKUP
Pour un DD USB, vous pouvez toujours créer un lien symbolique (ex: ln -s /media/disk/Backup /BACKUP)
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'exemple ici suppose que vous avez 2 filesystem : le système / et le /home
Vous pouvez faire la version incrémentale (backup_inc.sh) en remplaçant level0 par level1
Vous pouvez prévoir par exemple un "full" mensuel du / et /home et un incrémental quotidien du /home uniquement
B) Exécution de la sauvegarde
Lancer la sauvegarde manuellement une première fois
Exécuter tout simplement /BACKUP/backup_full.sh
Vous pouvez ensuite l'automatiser dans un cron par exemple (full hebdomadaire à 12h30)
Code :
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
C) Restauration
Rappel : Toutes ces commandes sont à exécuter sous root
1) Restauration du tout /home
Tous les utilisateurs doivent être délogger
Code :
cd /home; cat /BACKUP/home.level0.tar.* | tar xvzf -
2) Restaurer un user du /home
L'utilisateur 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
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