Léa-Linux & amis :   LinuxFR   GCU-Squad   Zarb.Org   GNU
Archive de la liste aide - [Aide] Avis sur script bash pour sauvegarde complète d'un système
Pourquoi crées-tu ton chrono? la commande time est là pour ça :)
lance ton script par la commande suivante:
/usr/bin/time -f "Temps de sauvegarde: %E" monbackup.sh

Tu dois utiliser le chemin absolu, sinon bash utilisera sa commande
interne en lieu et place de la commande time du système

> script:
> 
> #!/bin/bash
> 
> mysql_pwd="xxxxxxxxx"
> dirtobackup=("/root" "/etc" "/home")
 ajoute ici:
backuphost="sshbackup at xxxxxxxxx.me"
rsync_opts="-aq --no-o --no-g --delete"

> 
> mount_point='/mnt'
Pourquoi des simples quote?

> mount_cmd="sshfs sshbackup at xxxxxxxxxx.me:"
inutile
> #cmd_montage='mount -t /dev/sdb2
> 
> 
> backupdir=$mount_point'/'$HOSTNAME
> 
backupdir="${mount_point}/${HOSTNAME}"
> 
> date_start=$(date +%s) #chrono
> 
> 
> echo "Montage de la partition de sauvegarde avec la commande:"
> mount_cmd=$mount_cmd' '$mount_point
> echo $mount_cmd
> eval $mount_cmd

Ouh, c'est pas très beau ça... Tu n'as pas besoin d'eval...
sshfs ${backuphost}: ${mount_point}
> 
> 
> #verifie si la partition de sauvegarde est bien montée
> mountpoint $mount_point
Attention, ici tu vérifies juste que sshfs n'as pas renvoyé d'erreur,
tu ne peux rien dire sur le fait que la partition soit montée ou non
(elle peut être déjà montée)
Le mieux, c'est de faire le check de la partition avant de lancer
sshfs, par exemple avec:
if mount|grep -q "$mount_point"; then
 # $mount_point est déjà monté
 echo "$mount_point est déjà monté! => FIN"
 exit 1
else
 sshfs ${backuphost}: ${mount_point}
 if [ $? -ne 0 ];then
    echo "Echec du montage sshfs => FIN"
    exit 1
 fi
fi
 
> 
> #verifie si le dossier de sauvegarde pour cette machine existe sur la 
> partition de sauvegarde
> if [ -d $backupdir ];then
>    echo "Le dossier de sauvegarde existe bien sur la machine
> distante";
> 
> else
>    echo "Creation du rerpertoire de sauvegarde";
>    mkdir $backupdir
> fi
> 
> 
> 
> #sauvegarde des repertoires avec rsync
> for i in ${!dirtobackup[@]} ;do
>    echo "Sauvegarde repertoire "${dirtobackup[i]};
> 
>    # Rsync ajout des options --no-o et --no-g pour eviter les
> problèmes de chmod sur les fichiers transférés
>    rsync -aq --no-o --no-g --delete  ${dirtobackup[i]} $backupdir
> done
> 
Tu n'as pas besoin de mapper ton array comme un hashage :)
Ici, utilise plutôt
for i in "${dirtobackup[@]}"; do
  echo "Sauvegarde de ${i}"
  rsync ${rsync_opts} ${i} ${backupdir}
done

> echo 'Sauvegarde de la liste des paquets APT'
> dpkg --get-selections > $backupdir"/APT-paquets-instales"
> 
> 
> echo 'Sauvegarde des bases Mysql'
> mysqldump -u root -p$mysql_pwd --all-databases | bzip2 -c > 
> $backupdir/"Mysql.sql.bz2"
Ici aussi, ça dépend du nombre de bases que tu dois sauvegarder, mais
je pense qu'il est préférable de les traiter une
par une dans des archives séparées avec une autre boucle for.

> 
> 
> date_end=$(date +%s)
> 
> echo "Temps de sauvegarde:"
> echo $(($date_end-$date_start)) "Sec"
> 
> echo "Taille de la sauvegarde:"
> du -hs $backupdir
> 
> echo "demontage de la partition"
> fusermount -u $mount_point

Assure-toi que c'est bien démonté :)
 if [ $? -ne 0 ];then
    echo "Echec du démontage => FIN"
    exit 1
 fi


Amicalement,
Ille

Serveur hébergé par ST-Hebergement et Lost-Oasis / IRC hébergé par FreeNode / NS secondaire hébergé par XName
Sauf mention contraire, les documentations publiées sont sous licence Creative-Commons