Bonjour, voici un script que j'ai réaliser. Celui-ci exécute un backup d'un serveur à un autre avec la commande rsync (rsync -OPTION /source /destination) :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
#!/bin/sh
#
#
volumes=$(cut -d' ' /etc/auto.netapp -f1)
 
        if ! mount | grep /dev/vd
        then    echo "WARNING !! DELL storage not mounted !"; exit
        fi
 
        #if pgrep -x "rsync" > /dev/null
        #then    echo "rsync is running, exit"; exit
        #else    echo "rsync is not running."
        #fi
 
#VARS
test=$1
if [ $# -eq 0 ] ; then
 
for vol in $volumes
do
 
if [ ! -f "/root/backup_logs/$vol.log" ]; then
 
        ls /netapp/$vol > /dev/null 2>&1
 
        if [ $? -gt 0 ]; then
                echo $vol non disponible
                continue
        fi
 
        echo $vol
 
        # to do : évaluer la taille qu'il reste sur la partition
        # premier backup pour ce volume, questionner l'utilisateur sur la partition
        PS3="Sur quel serveur installer la sauvegarde ? "
        select rep in r740disks md1400_1 exit
        do
        case $rep in
        r740disks) break;;
        md1400_1) break;;
        exit) exit;;
        esac
        done
 
        echo $rep > /root/backup_logs/$vol.log
 
        destsize=`df | grep $rep | awk '{ print $4 }'`
        destsizeh=`df -h | grep $rep | awk '{ print $4 }'`
        sourcesize=`df | grep $vol | awk '{ print $3 }'`
        sourcesizeh=`df -h | grep $vol | awk '{ print $3 }'`
        sourcesize2=`df -h | grep $vol | awk '{ print $2 }'`
        echo source : $vol $sourcesizeh/$sourcesize2 "|" destination : $rep $destsizeh
        if [ $sourcesize -gt $destsize ]
        then echo "Destination trop petite !" exit;
        fi
        source="/netapp/$vol"
        dest="/mnt/$rep/volumes/"
        cmd="rsync -ah -e ssh --exclude=.snapshot $source $dest 2>> /root/backup_logs/$vol.log"
        mail -s "Backup NFS Ganil" nourry@cyceron.fr <<< "La copie s'effectue de $source vers $dest."
        echo $cmd
        eval $cmd
        mail -s "Backup NFS Ganil" nourry@cyceron.fr, louis.menard2006@gmail.com  <<< "La copie de $source vers $dest est terminée !"
        exit
fi
done
 
elif [ "$test" == "schedule" ] ; then
 
#liste le fichier le plus vieux du répertoire
old=`ls -t /root/backup_logs/ | tail -1`
old=${old:0:-4}
echo Incrémentale de $old
rep=`sed -n 1p /root/backup_logs/$old.log`
source="/netapp/$old"
dest="/mnt/$rep/volumes/"
echo Destination : $rep
        if [ -d "$dest" ]; then
                cmd="rsync -ah -e ssh --exclude=.snapshot $source $dest 2>> /root/backup_logs/$old.log"
                mail -s "Backup NFS Ganil" nourry@cyceron.fr <<< "La copie s'effectue de $source vers $dest"
 
                echo $cmd
                eval $cmd
 
                mail -s "Backup NFS Ganil" nourry@cyceron.fr <<< "La copie de $source vers $dest est terminée !"
        else
                echo "Le répertoire $dest n'est pas présent, vous allez sortir" exit;
        fi
fi
Voila et j'ai aussi un script en powershell qui utilise robocopy.
Comme je peux optimiser mon script ? Moins de ligne, exécution plus rapide... Vous m'avez compris
Merci d'avance, CDLT.