Cette page a pour but de proposer un script BASH qui permet de sauvegarder des données.
Dans le détail, il effectue plusieurs opérations :
- les données sont sauvegardées dans un répertoire défini par l’utilisateur
- les bases sql peuvent également être sauvegardées (dump)
- les données du répertoire de sauvegarde sont compressées dans une archive gzip (tar.bz2)
- les deux dernières archives mensuelles et quotidiennes sont conservées, les plus anciennes sont supprimées
- la dernière archive est exportée sur une autre machine
L’option -m en paramêtre permet de spécifier la sauvegarde mensuelle.
Voici le script qui permet de faire cela. Le texte en gras est à modifier suivant vos propres paramètres.
#!/bin/sh
#Sauvegarde de tous les fichiers mentionnes en fin du script
#dans un repertoire $REP_SAUV et cree un tar.bz2 chaque jour et chaque mois
#en conservant deux archives quotidennes et mensuelles
#Fait egalement une copie sur une machine distante (serveur)#variables
#Repertoire ou les fichiers sont copies (sans etre compresses)
REP_SAUV= »/home/sauve »
#Repertoire personnel
REP_PERSO= »/home/toto »
#Repertoires ou sont stockes les archives
DATE=$(date +%y%m%d)
if [ « $1 » = « -m » ] ; thenREP_TAR= »/home/tar/monthly »
INTITUL= »Sauvegarde mensuelle »else
REP_TAR= »/home/tar/daily »
INTITUL= »Sauvegarde quotidienne »fi
#Repertoire sur une machine distante pour copier les archives
#par ssh (scp)
REP_DIST= »machine1:/home/sauve-dist«####################################################
echo « Sauvegarde en cours… »
cd $REP_TAR
#Vide le repertoire de sauvegarde
rm -rf $REP_SAUV/*
#Prepare le fichier de logs
if [ -e tar.log ] ; thenmv -f tar.log tar.log.old
fi
echo « ————————————————-« >>tar.log
echo « Sauvegarde du `date +%A » « %d » « %B » « %Y » – « %T` »>>tar.log
echo « $INTITUL »>>tar.log
echo « ————————————————-« >>tar.log
echo « suppr : OK »>>tar.log# Fonctions ######################
function backup() {
#Creation des repertoires
CIBLE=$REP_SAUV${1%/*}/
if test ! -d $CIBLE
thenmkdir -p $CIBLE
fi
#copie les fichiers
cp -R $1 $CIBLE
}function backupsql() {
#sauvegarde ne base sql
echo $REP_SAUV/$3.sql >> tar.log
mysqldump -u $1 -p$2 $3 > $REP_SAUV$3.sql
}function menage() {
for MYFILE in `find $1 -name « sauve* » | sort`;do
NB=`find $1 -name « sauve* » | sort | wc -l`
if (( $NB >= 3 ));then
rm -f $MYFILE
fi
done
}####################################
#Choisissez ci-dessous les repertoires
#ou fichiers a sauvegarder
####################################
backup /etc/hosts
backup /etc/samba
#scripts d’admin
backup /root/bin
#backup des infos de mail
backup $REP_PERSO/.mozilla-thunderbird
#Sauvegarde des sous-repertoires du
#repertoire perso finissant par -s
for REPER in `find $REP_PERSO/ -name « *-s » | sort`;do
backup $REPER
done
#sqldump des bases mysql
#backupsql identifiant password nomdelabdd#Cree le tar
ls -lRa $REP_SAUV>>tar.log
tar -cjf sauve_$DATE.tar.bz2 $REP_SAUV 2>>tar.log
scp $REP_TAR/sauve_$DATE.tar.bz2 $REP_DIST/ 2>>tar.log#Limite le nombre de sauvegardes
menage $REP_TAR/#Fin du script ok
echo « ————————————————-« >>tar.log
echo « `date +%A » « %d » « %B » « %Y » – « %T` »>>tar.log
echo « Fin de sauvegarde »>>tar.log
echo « ————————————————-« >>tar.log
echo « fin du script $0 : OK »>>tar.log
N.B. Reste à prévoir l’authentification ssh sur machine1 par échange de clés (voir l’article sur cette question), et à programmer l’exécution du script toutes les nuits, et tous les mois avec l’option -m. Je vous renvoie à cron et crontab pour en apprendre plus.