#1 Le 27/02/2013, à 23:33
- alexpr78
Demande d'aide Script Test Restauration backup
Bonsoir à tous,
Pas très fort niveau dev, je suis aujourd'hui obliger de développer un script qui test la restauration d'un backup de plusieurs fichiers dans plusieurs dossiers ... pour ensuite dire que si la restauration se passe bien, alors la sauvegarde est réussie ... Sauf que le test doit être effectuer par exemple un fichier dans chaque dossier du dossier principale.
Je vais mieux m'expliquer, j'utilise ce script (Cron tout les soirs) nommer daily.backup.sh:
#UNIX / Linux shell script to backup dirs to tape device like /dev/st0 (linux)
# This script make both full and incremental backups.
# You need at two sets of five tapes. Label each tape as Mon, Tue, Wed, Thu and Fri.
# You can run script at midnight or early morning each day using cronjons.
# The operator or sys admin can replace the tape every day after the script has done.
# Script must run as root or configure permission via sudo.
# -------------------------------------------------------------------------
# Copyright (c) 1999 Vivek Gite <vivek@nixcraft.com>
# This script is licensed under GNU GPL version 2.0 or above
# -------------------------------------------------------------------------
# This script is part of nixCraft shell script collection (NSSC)
# Visit [url]http://bash.cyberciti.biz/[/url] for more information.
# -------------------------------------------------------------------------
# Last updated on : March-2003 - Added log file support.
# Last updated on : Feb-2007 - Added support for excluding files / dirs.
# -------------------------------------------------------------------------
LOGBASE=/root/backup/log
# Backup dirs; do not prefix /
BACKUP_ROOT_DIR="mnt/Backup"
# Get todays day like Mon, Tue and so on
NOW=$(date +"%A")
# Tape devie name
TAPE="/dev/st0"
# Exclude file
TAR_ARGS=""
EXCLUDE_CONF=/root/.backup.exclude.conf
# Backup Log file
LOGFILE=$LOGBASE/$NOW.backup.log
TEST_DIR=$LOGBASE/$NOW.verif.backup.log
# Path to binaries
TAR=/bin/tar
MT=/bin/mt
# ------------------------------------------------------------------------
# Excluding files when using tar
# Create a file called $EXCLUDE_CONF using a text editor
# Add files matching patterns such as follows (regex allowed):
# home/vivek/iso
# home/vivek/*.cpp~
# ------------------------------------------------------------------------
[ -f $EXCLUDE_CONF ] && TAR_ARGS="-X $EXCLUDE_CONF"
#### Custom functions #####
# Make a full backup
full_backup(){
local old=$(pwd)
cd /
date
mt -f /dev/st0 setblk 0
# mt -f /dev/st0 compression
$TAR $TAR_ARGS -cvpf $TAPE $BACKUP_ROOT_DIR
date
$MT -f $TAPE rewind
cd $old
}
# Make sure all dirs exits
verify_backup_dirs(){
local s=0
for d in $BACKUP_ROOT_DIR
do
if [ ! -d /$d ];
then
echo "Error : /$d directory does not exits!"
s=1
fi
done
# if not; just die
[ $s -eq 1 ] && exit 1
}
#### Main logic ####
# Make sure log dir exits
# Verify dirs
full_backup > $LOGFILE
#Listing des fichiers se trouvant dans la cassette :
tar tf /dev/st0 > /tmp/tapefiles.log
/root/backup/log/tapefiles.sh > /tmp/tmp2.log
mail -s "Vérification fichier cassette ecriture" test@test.fr < /tmp/tmp2.log
/root/backup/log/backup_test_verif.sh > /tmp/tmp.log
mail -s "Verifications Des Sauvegardes" admin@admin.fr < /tmp/tmp.log
Le script tape-files.sh
#!/bin/bash
cd /root/backup/log
mt -f /dev/st0 rewind
clear
cd /tmp/
tapefiles="testtape.log"
#Affichage de la derniere ligne du log du jour
date1=$(date +%A)
jour=$(date +%Y%m%d%H%M)
clear
echo "= ="
echo "==== ========="
echo "==== ========="
echo "==== ========="
#derniereligne=$(tail -n 1 /root/backup/log/$fichierdate)
tail -n 10 $tapefiles
echo "==== ========="
echo "==== ========="
echo "==== ========="
echo "==== ========="
echo "==================================================================="
echo "==== Verification du Dossier DOSSIERX ======="
echo "==================================================================="
if [ `grep "DOSSIERX/$" $tapefiles` ]; then
echo "Le dossier DOSSIERX a bien ete sauvegarder sur la Bande ! "
else
echo "La sauvegarde du dossier DOSSIERX a echouer !!"
fi
echo "==== ========="
echo "==== ========="
echo "==== ========="
echo "==== ========="
echo "==================================================================="
echo "==== Verification du Dossier DOSSIER1 ========"
echo "==================================================================="
if [ `egrep "DOSSIER1/$" $tapefiles` ]; then
echo "Le dossier DOSSIER1 a bien ete sauvegarder sur la Bande ! "
else
echo "La sauvegarde du dossier DOSSIER1 a echouer !!"
Il test juste les caractères, s'ils sont présent alors on affiche ça ... puis l'envoi auto par mail.
Maintenant il faudrait créer un nouveau script qui serai exécuter par le fichier principale (dailybackup.sh) à la fin de la sauvegarde qui permettrai de restaurer un fichier aléatoirement dans chaque dossier, j'ai penser à ça :
Le dossier /tmp/TEST-RESTORE est pour le dossier de destination pour les tests.
#/bin/bash
TRESTORE="/tmp/TEST-RESTORE"
cd $TRESTORE
clear
if tar -xzf /dev/st0 [#On pourrait utiliser le fichier tmp2.log qui détient les chemins des fichiers dans la cassette ?] -eq 0 ; then
variable1=OK
Enfin je sais pas mais je pense a quelque chose comme ça ou utiliser du awk ?!
Pouvez vous m'aider ^^ ?
merci d'utiliser les balises code et non pas quote qui servent à citer
Dernière modification par ljere (Le 28/02/2013, à 09:07)
Hors ligne
#2 Le 05/03/2013, à 22:52
- Didier-T
Re : Demande d'aide Script Test Restauration backup
bonsoir alexpr78,
je ne suis pas certain d'avoir tout compris à ce que tu souhaite faire, mais il me semble qu'une partie du problème consiste à comparer le contenu de deux fichiers, pour ce faire tu peut utiliser la commande cmp, voici un exemple pour une comparaison simple et utilisable par un script.
#!/bin/bash
fichier="nom du fichier a comparer"
rep_source="mnt/Backup"
rep_temp="/tmp/TEST-RESTORE"
# insérer ici commande tar pour extraire le fichier à comparer
`cmp -s $rep_source/$fichier $rep_temp/$fichier`
if [ $? -eq 1 ]; then
echo "les fichiers sont différents"
else
echo "les fichiers sont identiques"
fi
je n'utilise pas tar en ligne de commande, il te faudra donc chercher pour l'extraction du fichier.
Hors ligne
#3 Le 06/03/2013, à 06:44
- pingouinux
Re : Demande d'aide Script Test Restauration backup
Bonjour,
`cmp -s $rep_source/$fichier $rep_temp/$fichier` if [ $? -eq 1 ]; then echo "les fichiers sont différents" else echo "les fichiers sont identiques" fi
Pour info, les ` ` qui encadrent la commande cmp ne servent à rien, et il est préférable de mettre des " " autour des variables (au cas où les noms contiendraient des espaces). Tu peux aussi faire ceci :
if cmp -s "$rep_source/$fichier" "$rep_temp/$fichier"; then
echo "les fichiers sont identiques"
else
echo "les fichiers sont différents"
fi
Édité : Correction
Dernière modification par pingouinux (Le 06/03/2013, à 07:47)
Hors ligne
#4 Le 06/03/2013, à 07:34
- Didier-T
Re : Demande d'aide Script Test Restauration backup
Bonjour,
Didier-T #2 a écrit :`cmp -s $rep_source/$fichier $rep_temp/$fichier` if [ $? -eq 1 ]; then echo "les fichiers sont différents" else echo "les fichiers sont identiques" fi
Pour info, les ` ` qui encadrent la commande cmp ne servent à rien, et il est préférable de mettre des " " autour des variables (au cas où les noms contiendraient des espaces). Tu peux aussi faire ceci :
if cmp -s "$rep_source/$fichier" "$rep_temp/$fichier" echo "les fichiers sont identiques" else echo "les fichiers sont différents" fi
Bonjour pingouinux,
Merci pour la correction, par contre deux questions, je vois que tu n'a pas mis de then dans ta commande if (certainement un oubli )
et que se passe t'il si le retour de la commande cmp n'est ni 0 ni 1 ?
étant un complet autodidacte j’apprends un peut tout les jours, et parfois j’oublie des infos.
Hors ligne
#5 Le 06/03/2013, à 07:44
- pingouinux
Re : Demande d'aide Script Test Restauration backup
je vois que tu n'a pas mis de then dans ta commande if
Effectivement. Je corrige tout de suite.
que se passe t'il si le retour de la commande cmp n'est ni 0 ni 1
$?==0 => commande terminée normalement
$?!=0 => autres cas
Hors ligne
#6 Le 06/03/2013, à 07:48
- Didier-T
Re : Demande d'aide Script Test Restauration backup
...
que se passe t'il si le retour de la commande cmp n'est ni 0 ni 1
$?==0 => commande terminée normalement
$?!=0 => autres cas
en effet, c'est évidant.
Merci
Hors ligne
#7 Le 06/03/2013, à 17:26
- alexpr78
Re : Demande d'aide Script Test Restauration backup
Merci pour vos réponses, c'est exactement ça, juste il manque un petit truc, c'est que le choix du fichier de restauration, je veux qu'il se fasse aléatoirement (en gros qu'il se base sur un nom de fichier se trouvant dans les logs de la cassette -> tar tf /dev/st0 > /tmp/tapefiles.log.
Merci pour tout.
Hors ligne
#8 Le 06/03/2013, à 17:55
- Didier-T
Re : Demande d'aide Script Test Restauration backup
il te faut deux petites choses
rentrer les noms (et chemin) de tes fichiers dans un tableau
générer un nombre aléatoire compris entre 0 et nombre de données dans la tableau
pour remplir le tableau
i=1
while read ligne ;do
myarray[$i]=$ligne
i=$(($i+1))
done < brol
pour générer un nombre aléatoire, il y a cette solution (trouvée ici)
min=100
max=$i
number=$[($RANDOM % ($[$max - $min] + 1)) + $min]
echo $number
pour plus d'info sur les tableaux tu peut regarder ceci
Hors ligne