Optimisation script de Backup
Bonjour,
J'ai écris un script simple de backup entre deux machines distante. Il fonctionne à merveille. Le problème que j'ai c'est que le backup est long, 28h pour environ 400G de données.
Résumé de la partie principale du script :
-> Si le tar.gz n'exite pas, je fais le rsync, je tar, puis je gz.
-> S'il existe, je gz -d, je tar -x, je met à jour avec rsync puis je retar et regz.
Code:
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
| # /bin/bash
# Creation des fichiers temporaires
touch /data/export/backup/academic.txt
touch /data/export/backup/mail.txt
# Recherche des personnes appartenant au groupe academic
# Résultat mis dans le fichier academic.txt
ldapsearch -h machin -p 389 -D "cn=Admin" -w xxxxx -b ou=people,dc=conception,dc=arcsis,dc=org gidNumber=80000 | sed -n 's/^uid: //p' > /data/export/backup/academic.txt
# Début de la boucle qui lit les noms un par un (ligne par ligne)
while read line
do
# Si le dossier de la personne n'existe pas, le créer
if [ ! -e "/data/export/backup/academic/$line" ]; then
mkdir /data/export/backup/academic/$line
fi
# Si c'est le premier backup, création du tar.gz
if [ ! -e "/data/export/backup/academic/$line/$line.tar.gz" ]; then
echo "Début du backup de $line"
/usr/local/bin/rsync -r -t -o -g -v --progress -c -z -i -s /home/$line /data/export/backup/academic/$line/
# Si la commande précédente comporte une erreure
# elle est reporter dans le fichier mail.txt qui sera envoyé à la fin
if [ $? = 0 ]; then
echo "Les données de l'utilisateur $line ont bien été mise à jour" >> /data/export/backup/mail.txt
else
echo "Une erreur est survenue lors de la mise à jour des donnée de $line" >> /data/export/backup/mail.txt
fi
#
tar -cvf /data/export/backup/academic/$line/$line.tar /data/export/backup/academic/$line/$line
gzip /data/export/backup/academic/$line/$line.tar
rm -rf /data/export/backup/academic/$line/$line
echo "Taille fichier : " ; du -sh /data/export/backup/academic/$line/$line.tar.gz >> /data/export/backup/mail.txt
# Si le fichier de backup existe déjà : On décompresse -> fait une mise à jour
# -> recompresse -> supprime le .tar
else
echo "Début de la mise à jour de $line"
gzip -vd /data/export/backup/academic/$line/$line.tar.gz
tar -xvf /data/export/backup/academic/$line/$line.tar
/usr/local/bin/rsync -r -t -o -g -v --progress -c -z -i -s /home/$line /data/export/backup/academic/$line/
#
if [ $? = 0 ]; then
echo "Les données de l'utilisateur $line ont bien été mise à jour" >> /data/export/backup/mail.txt
else
echo "Une erreur est survenue lors de la mise à jour des donnée de $line" >> /data/export/backup/mail.txt
fi
#
tar -cvf /data/export/backup/academic/$line/$line.tar /data/export/backup/academic/$line/$line
gzip /data/export/backup/academic/$line/$line.tar
rm -rf /data/export/backup/academic/$line/$line
echo "Taille fichier : " ; du -sh /data/export/backup/academic/$line/$line.tar.gz >> /data/export/backup/mail.txt
fi
done < /data/export/backup/academic.txt
# Envoi des information de backup
mail -s "Résumé du Backup du $(date)" root < /data/export/backup/mail.txt
# Supression des fichiers temporaire
rm /data/export/backup/academic.txt
rm /data/export/backup/mail.txt |
D'après mes observations, ce serait le tar et le zip (détar et dézip) qui prendrais le plus de temps. Aurait-il une alternative plus optimisé permettant de comprésser plus rapidement. Je veux que ça reste sous forme de script, pas de logiciel ou autre.