Léa-Linux & amis :   LinuxFR   GCU-Squad   Zarb.Org   GNU
Archive de la liste aide - [Aide] script bash pour sauvegarde complète d'un système (presque bon)
Version compilée avec les conseils de tout le monde, (base par base SQL, 
ajout des ${}, de SECONDS et des "$?" )
j'ai également ajouté une option de sauvegarde par USB ou SSH

je tente le script en pièce jointe en espérant que ca passe les 
contrôles antivirus!



On 09/02/2016 14:07, R. Daneel Olivaw wrote:
> Pour mesurer la durée d'exécution, j'ai un truc simple:
> SECONDS=0
> au début du script puis
> echo ${SECONDS}
> à la fin.
>
> Le bash va gratuitement et sans frais caché compter les secondes pour
> toi ;) (il le fait tout le temps en fait, en mettant '0' on ne fait
> qu'initialiser le compteur).
>
> Et pour enfoncer le clou, les accolades permettent de :
> 1/ clairement délimiter les variables
>    echo ${var}iable
>    echo $variable
> 2/ faire des trucs
>    mettre en majuscules ${var^^} ou minuscules ${var,,}
>    faire des remplacements ${var/a/b} (remplace 'a' par 'b', à la sed)
>
> Maintenant, allez en paix !
>
> R. Daneel Olivaw
> The Human Robot Inside.
>
>
-------------- section suivante --------------
#!/bin/bash

SECONDS=0 #chrono

mysql_pwd="xxxxxxxx"
dirtobackup=("/root" "/etc" "/home")

#point de montage pour SSHFS ou disque USB
mount_point="/mnt"

#sauvegarde par SSH
backuphost="sshbackup at wxxxxxxx.me"

#sauvegarde par USB
usbdevice="/dev/disk/by-label/storite250"
mount_opts=""

#option de rsync (ajout des options --no-o et --no-g pour eviter les problèmes de chmod sur les fichiers transférés)
rsync_opts="-aq --no-o --no-g --delete"

#chemin vers la sauvegarde
backupdir=${mount_point}"/"${HOSTNAME}


#verifie si le point de montage n'est pas utilisé
mountpoint ${mount_point}
if [ "$?" -eq 0 ];then
  echo "Le point de montage ${mount_point} est deja utilisé => FIN"
  exit 1
fi


#montage du disque USB pour la sauvegarde
if [ "$1" == "usb" ] && [ -n "${usbdevice}" ]; then
  echo "Montage du disque USB ${usbdevice}"
  mount ${mount_opts} ${usbdevice} ${mount_point}

 #montage de la partition avec SSHFS
elif [ "$1" == "ssh" ] && [ -n "${backuphost}" ]; then
  echo "Montage de la partition de sauvegarde sur "${backuphost}
  sshfs ${backuphost}: ${mount_point}

else
  echo "Type de sauvegarde non renseigne"
  echo "Essayez '$0 ssh' ou  '$0 usb'"
  exit 1
fi



#verifie si la partition de sauvegarde est bien montée
mountpoint ${mount_point}
if [ "$?" -ne 0 ];then
  echo "la Partition de sauvegarde n'est pas montee => FIN"
  exit 1
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


######### debut des sauvegardes ##########


for mydir in ${dirtobackup[@]} ;do 
  echo "Sauvegarde repertoire ${mydir}" 
  rsync ${rsync_opts} ${mydir} ${backupdir}
done


echo 'Sauvegarde de la liste des paquets APT'
dpkg --get-selections > ${backupdir}"/APT-paquets-instales"


echo 'Sauvegarde des bases Mysql'
mysql_databases="$(mysql -u root -p${mysql_pwd} -Bse 'show databases')"

for db in ${mysql_databases[@]} ;do 
  echo "Sauvegarde SQL ${db}"
  mysqldump -u root -p${mysql_pwd} $db | bzip2 -c > "${backupdir}/Mysql-${db}.sql.bz2"
done



echo "Temps de sauvegarde:"
echo ${SECONDS} "Sec"

echo "Taille de la sauvegarde:"
du -hs ${backupdir}

echo "demontage de la partition"
umount ${mount_point}
exit 0

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