Titre modifié par Ricardo : avant = “SCRIPTS en vrac”
SCRIPT DE SAUVEGARDE (compatible CRON) POUR L’ARCHIVAGE SIMPLE DE PLUSIEURS SERVICES EN CHROOT DANS LE MEME REPERTOIRE DE SERVICE
(exemple :chroot/smb, chroot/http, chroot/mysql)
#!/bin/bash
###############################
# #
# VARS #
# #
#####-megs@libertysurf.fr-#####
###############################
# commande ou script pour envoyer a quelqu'un un mail en fin de
# sauvagarde, libre a vous d'envoyer le log global dans le mail
#------------------------------------------------------------
MAILADM=""
# mettez ici le nom des repertoires destination des archives
# ou le repertoire de montage du peripherique de sauvegarde
#------------------------------------------------------------
ADIR="/mnt/zip"
# ajoutez ici la commande qui montra le peripherique
# de sauvegarde et le demontra a la fin de la sauvegarde
# si pas de peripherique particulier, laisser vide...
#------------------------------------------------------------
PSMNT="/root/bin/zip100 -ext2 $ADIR -v -sda1"
PSUMNT="/root/bin/zip100 -u $ADIR -v"
# mettez 'y' si vous voulez une confirmation de sauvegarde
#------------------------------------------------------------
ACONF="y"
# mettez 'n' si vous voulez le mode silencieux
#------------------------------------------------------------
VM="y"
# mettez 'y' si vous voulez que les aciennes archives soient
# renommés plutôt que écrasés
#------------------------------------------------------------
SAVOLD="n"
# mettez ici le répertoire des logs
# il y a un log global qui enregistre les events globaux ($ALOG)
# et les logs spécifiques aux erreurs d'archivages de services
# ils seront complétés comme suis: $ALOG.[service]
# PURGELOG défini si les fichiers de log sont auto réinitialisé
# avant chaque sauvegarde..
#------------------------------------------------------------
ALOG="$ADIR/backup.log"
PURGELOG="n"
# mettez ici le nom du répertoire des services a sauvegarder
# et le noms des repertoires contenant les services à archiver
#------------------------------------------------------------
SDIR="/chroot"
SERVICES="http mysql smb"
###############################
# #
# GESTION DES PARAMETRES #
# #
#####-megs@libertysurf.fr-#####
###############################
if [ $# -ne 0 ]; then
for i in $* ; do
case "$i" in
'-c') ACONF="n";; # ne pas demander confirmation avant sauvegarde
'-v') VM="n";; # mode silencieux
'-s') SAVOLD="y";; # renommé ancienne archive avant de creer nouvelle sauvegarde
'-l') PURGELOG="y";; # purge les log avant la sauvegarde
*)
if [ -d "$SDIR/$i" ] ; then
SERVICES=$i;
else
if [ $VM = "y" ]; then
echo " Erreur : $i n'existe pas ou n'est pas un parametre valide";
echo " "
echo " USAGE backup [Service] [-c] [-v] [-s] [-l]";
echo " -c = ne pas demander confirmation"
echo " -v = mode silencieux"
echo " -s = renommer l'ancienne sauvegarde si elle existe"
echo " -l = purge les logs avant la sauvegarde"
echo " "
echo " ---------------------------=\\megs@libertysurf.fr//=-"
fi;
exit 1;
fi
;;
esac
done
fi
###############################
# #
# MAIN SCREEN #
# #
#####-megs@libertysurf.fr-#####
###############################
if [ $VM = "y" ]; then
clear
echo " _______________________________________________________________"
echo " "
echo " SCRIPT DE SAUVEGRADE DES SERVICES SERVEURS CHROOTES"
echo " _______________________________________________________________"
echo " "
echo " LogsFiles = $ALOG.[$SERVICES]"
echo " ArchiveDir = $ADIR"
echo " ChrootDir = $SDIR"
echo " _______________________________________________________________"
echo " ATTENTION! stoppez tout les services concerné si vous refaites"
echo " la restauration d'une archive, et veillez a démonter les"
echo " repertoires montés automatiquement dans l' arborescence du"
echo " service concerné. Les repertoires 'tmp' sont exclus de la"
echo " sauvegarde ( à la racine du service ) car cela fait planter"
echo " l'operation d'archivage."
echo " _______________________________________________________________"
echo " "
fi
###############################
# #
# MAIN TREATMENT #
# #
#####-megs@libertysurf.fr-#####
###############################
# PRISE EN COMPTE DU PERIPHERIQUE DE SAUVEGARDE
if [ ! -z "$PSMNT" -a ! -z "$PSUMNT" ]; then
test "$VM" = "y" && echo " |-[ Initialisation du peripherique de sauvegarade ]"
$PSMNT >/dev/null 2>/dev/null
echo ":event: DEVICE : $PSMNT " >> $ALOG
if [ $? -ne 0 ] ; then
test "$VM" = "y" && echo " \[Erreur : montage impossible ]"
echo ":Fatal: impossible de monter le peripherique de sauvegarde" >> $ALOG
exit 1
fi
fi
# AFFICHAGE DES DERNIERE DATE DE SAUVEGARDE
test "$VM" = "y" && echo " |-[ ACIENNES SAUVEGARDES ] "
for i in $SERVICES
do
if test -e $ALOG.$i
then
test "$VM" = "y" && (echo -n " | o [ $i ] = " ; tail -n1 $ALOG.$i)
else
test "$VM" = "y" && echo " | o [ $i na pas encore été sauvé ]"
fi
done
test "$VM" = "y" && echo " |"
# TEST POUR LA CONFIRMATION
if [ $ACONF = "y" ];
then
echo -n " |-[ Confirmez sauvegarde ? [y,Y pour Oui]";read r
else
r="y"
fi
# TRAITEMENT DE LA CONFIRMATION
if [ "$r" = "y" -o "$r" = "Y" ]
then
# TEST DE REINITIALISATION DES LOGS
if [ $PURGELOG = "y" ]; then
test "$VM" = "y" && echo " |-[ Réinitialisation des logs ]"
rm $ALOG* >/dev/null 2>/dev/null
fi
# DEBUT ARCHIVAGE
test "$VM" = "y" && echo " |-[ Initialisation ]"
echo ":debut: SAUVEGARDE DU [`date`]" >> $ALOG
for i in $SERVICES
do
test "$VM" = "y" && echo " | |---o $i [$SDIR/$i] log=$ALOG.$i"
if [ "$SAVOLD" = "y" ] ; then
if [ -e $ADIR/$i.tar ] ; then
test "$VM" = "y" && echo " | | |----> archivage ancienne sauvegarde "
mv $ADIR/$i.tar $ADIR/$i.tar.old >/dev/null 2>&1
echo ":event: [$ADIR/$i.tar] a été rennomé... " >> $ALOG
test "$VM" = "y" && echo " | | | \_[$ADIR/$i.tar.old] "
fi
fi
if test -e $SDIR/$i ; then
test "$VM" = "y" && echo " | | |----> Sauvegarde et Compression "
tar czf $ADIR/$i.tar $SDIR/$i --exclude $SDIR/$i/tmp --exclude $SDIR/$i/proc 2>$ALOG.$i
echo ":event: [$ADIR/$i.tar] a été créé... " >> $ALOG
test "$VM" = "y" && echo " | | \_[$ADIR/$i.tar] "
else
test "$VM" = "y" && echo " | | \_ Erreur : [$SDIR/$i] n'existe pas, je passe... "
echo ":erreur: [$SDIR/$i] n'existe pas, pas de sauvegarde... " >> $ALOG
fi
test "$VM" = "y" && echo " | |"
done
echo ":Fin: [`date`]" >> $ALOG
echo "[`date`]" >> $ALOG.$i
test "$VM" = "y" && echo " | [.]"
test "$VM" = "y" && echo " |"
# ENVOIE D'UN MAIl A L'ADMINISTRATEUR
if [ ! -z "$MAILADM" ]; then
test "$VM" = "y" && echo " |-[ Confirmation par mail ]"
echo ":event: Confirmation par mail à $MAILADM" >> $ALOG
$MAILADM >/dev/null 2>/dev/null
fi
else
echo ":event: [`date`] interruption utilisateur par confirmation de [$USER]" >> $ALOG
fi
# PRISE EN COMPTE DU PERIPHERIQUE DE SAUVEGARDE: DEMONTAGE
if [ ! -z "$PSMNT" -a ! -z "$PSUMNT" ]; then
test "$VM" = "y" && echo " |-[ Fermeture du peripherique de sauvegarde ]"
echo ":event: DEVICE :$PSUMNT" >> $ALOG
$PSUMNT >/dev/null 2>/dev/null
fi
test "$VM" = "y" && echo " [.]"
Ca donne a peut prêt:
SCRIPT DE SAUVEGRADE DES SERVICES SERVEURS CHROOTES
_______________________________________________________________
LogsFiles = /mnt/zip/backup.log.[http mysql smb]
ArchiveDir = /mnt/zip
ChrootDir = /chroot
_______________________________________________________________
ATTENTION! stoppez tout les services concerné si vous refaites
la restauration d'une archive, et veillez a démonter les
repertoires montés automatiquement dans l' arborescence du
service concerné. Les repertoires 'tmp' sont exclus de la
sauvegarde ( à la racine du service ) car cela fait planter
l'operation d'archivage.
_______________________________________________________________
|-[ Initialisation du peripherique de sauvegarade ]
|-[ ACIENNES SAUVEGARDES ]
| o [ http na pas encore été sauvé ]
| o [ mysql ] = [Tue Jun 13 03:10:13 CEST 2006]
| o [ smb na pas encore été sauvé ]
|
|-[ Confirmez sauvegarde ? [y,Y pour Oui]y
|-[ Réinitialisation des logs ]
|-[ Initialisation ]
| |---o http [/chroot/http] log=/mnt/zip/backup.log.http
| | |----> Sauvegarde et Compression
| | \_[/mnt/zip/http.tar]
| |
| |---o mysql [/chroot/mysql] log=/mnt/zip/backup.log.mysql
| | |----> Sauvegarde et Compression
| | \_[/mnt/zip/mysql.tar]
| |
| |---o smb [/chroot/smb] log=/mnt/zip/backup.log.smb
| | |----> Sauvegarde et Compression
| | \_[/mnt/zip/smb.tar]
| |
| [.]
|
|-[ Fermeture du peripherique de sauvegarde ]
[.]
ET VOICI UN SCRIPT QUI VA AVEC, POUR LA SAUVEGARDE SUR DISQUETTE ZIP…
#!/bin/bash
# nécéssite les drivers suivants pour zip100 sur port paralelle
# Le noyau a peut être dejas les modules intégrés
# CONFIG_SCSI=y
# CONFIG_SCSI_PPA=y
# et le module dans /etc/modules
# ppa
# parametres:
# -v = mode non bavard forcé
# -u = action démonter le lecteur (action par defaut = monter)
#
#-----------------------------------------
# VARS
#####-megs@libertysurf.fr-#####
#-----------------------------------------
# Configuration du device par defaut
DEV="/dev/sda1"
# configuration du systeme de fichier par defaut la disquette zip
FS="ext2"
# configuration du chemin de montage
ZIPMNT="/mnt/zip"
# Mode bavard (y,n)
VM="y"
# action par defaut(ne pas toucher)
ACTION="MOUNT"
#----------------------------------------
# MAIN PROG
#####-megs@libertysurf.fr-#####
#----------------------------------------
if [ $# -ne 0 ]; then
for i in $* ; do
case "$i" in
'-u')ACTION="UMOUNT";; # determine l'action démontage
'-v') VM="n";; # mode non bavard
'-vfat') FS="vfat";; # systeme de fichier FAT
'-ext3') FS="ext3";; # '' '' '' '' '' ext3
'-ext2') FS="ext2";; # '' '' '' '' '' ext3
'-sda1') DEV="/dev/sda1";; # device sda1
'-sda2') DEV="/dev/sda2";; # device sda2
'-sda3') DEV="/dev/sda3";; # device sda3
'-sda4') DEV="/dev/sda4";; # device sda4
*)
if [ -d "$i" ] ; then
ZIPMNT=$i;
else
if [ $VM = "y" ]; then
echo "Erreur : $i n'existe pas ou n'est pas un parametre valide";
echo "USAGE zip100 [/mount/rep] [-u] [-v] [-vfat/-ext{2|3}] ";
fi;
exit 1;
fi
;;
esac
done
fi
case $ACTION in
MOUNT)
if [ $VM = "y" ] ; then echo " Montage du iomega zip100 en $FS sur $ZIPMNT" ; $
mount -t $FS $DEV $ZIPMNT >/dev/null 2>/dev/null;
;;
UMOUNT)
if [ $VM = "y" ] ; then echo " Demontage du iomega zip100 en $FS sur $ZIPMNT" $
umount $ZIPMNT >/dev/null 2>/dev/null;
;;
esac