Script bash de sauvegarde de répertoires et de fichiers

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 » ] ; then

    REP_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 ] ; then

    mv -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
then

    mkdir -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.

Laisser un commentaire