Merci beaucoup pour ces précieuses info Tellmewhy, ainsi qu’à vous tous pour vos conseils.
J’ai décidé de ne pas utilisé la varaible $? du code de sortie afin de garantir le fonctionnement du script même en cas d’exécution de plusieurs scripts en parallèles sur le même terminal.
Afin de faire bénéficier la communauté de ce que je fais, je laisse ici à tout hasard le code de mon script de backup rsync que j’ai bien amélioré depuis.
Rsync est une excellente solution de backup pour nos systèmes Linux.
J’ai pris le script de base proposé dans le tuto ici :http://www.linuxfocus.org/Francais/March2004/article326.shtml
et je l’ai retravaillé pour automatiser la tache sur mes disques USB externes.
Le script monte le disque USB connecté à l’aide de son LABEL, comme ça plus de problème avec un UUID qui change ou un identifiant sda ou sdb qui change.
Il suffit de nommer son disque lors du formatage ou de le renommer avec “tune2fs -L” et “tune2fs -l” pour voir les info de votre disque. (Gafez-vous avec les majuscules ! Linux est sensible à ça et j’ai eu quelques soucis avec le label de mes disque “Backup1” ou “backup1”. En plus il faut carrément débrancher physiquement votre disque à chaque fois que vous changez son Label si non /dev/disk/by-label/ vous donne des informations qui ne sont pas à jour.)
Ensuite le script rédige un rapport de backup avec des statistiques sur les disques et l’envoie par e-mail.
Je fais un “mdstat” car j’ai un RAID logiciel, mais vous pouvez effacer sans problème les lignes concernées.
Pour terminer il démonte le disque de backup.
[code]#!/bin/sh
#########################################################
Script de bakcup incrémental rsync
Créé par Brian Hone 24-3-2002
Adapté par Dougstar7 11-6-2008
Ce script est distribué gratuitement sous licence GPL
Pour que ce script fonctionne correctement, il vous faut,
au minimum, avoir installé les paquets : rsync et ssmtp,
et avoir configuré /etc/ssmtp/ssmtp.conf.
Vous pouvez utiliser sendmail ou postfix (ou autre…) pour
envoyer les e-mails, mais ils sont plus compliqué à configurer
Le log du dernier backup se trouve sous : /tmp/log-backup.txt
#########################################################
##################################
Configurez ces options
##################################
###################################
Adresse E-mail pour le status du backup
- un rapport du backup et de l’état des disques
est envoyé à ce(s) adresse(s) e-mail
(Ã séparer par un espace si il y en a plusieures)
###################################
MAILADDR="votreEmail@votreFAI.ch"
###################################
HOSTNAME
- C’est le nom de votre machine backupée
(Usage purement informatif)
###################################
HOSTNAME=nom-de-mon-serveur
###################################
Le dossier à backuper
- C’est le chemin du dossier dont vous
désirez réaliser un backup
(ne pas oublier de mettre un “/” à la fin
pour aviter de copier le dossier lui-même)
###################################
BACKUPDIR=/Donnees/
###################################
Label des 2 disques externes possibles utilisés pour le backup
voir commandes : e2label, tune2fs -L
Si les deux disques sont présents, le backup est réalisé sur le premier
Ces noms servent également de chemins pour définir où seront
stockées les données backupées.
Un “/” sera ajouté automatiquement devant.
###################################
ARCHIVEROOT1=Backup1 #USB disk 1 Western digital
ARCHIVEROOT2=Backup2 #USB disk 2 Seagate
############################################
Depuis ici, il est préférable de ne rien
rien changer. A moins que vous ne
sachiez exactement ce que vous faites
############################################
Dossier qui contient nos données backupées
CURRENT=Principal
Dossier dans lequel nous enregistrons
uniquement les données qui ont changé (mode incrémental).
INCREMENTDIR=date +%Y-%m-%d
Heure de début du backup
BACKUP_BEG_DATE=date +%T
export PATH=$PATH:/bin:/usr/bin:/usr/local/bin
Pour éviter de faire un backup sur un dossier de / au lieu d’un des deux disques USB externes montés/à monter
if grep -q ‘/backup1’ /proc/mounts;then
ARCHIVEROOT="/$ARCHIVEROOT1"
elif grep -q ‘/backup2’ /proc/mounts;then
ARCHIVEROOT="/$ARCHIVEROOT2"
elif [ -h /dev/disk/by-label/$ARCHIVEROOT1 ];then
ARCHIVEROOT="/$ARCHIVEROOT1"
mount -L $ARCHIVEROOT1 $ARCHIVEROOT
elif [ -h /dev/disk/by-label/$ARCHIVEROOT2 ];then
ARCHIVEROOT="/$ARCHIVEROOT2"
mount -L $ARCHIVEROOT2 $ARCHIVEROOT
else
echo"Aucun des deux disques USB externe de backup n’est monté sur $ARCHIVEROOT1 ou sur $ARCHIVEROOT2. Backup annulé !"|tee /tmp/log-backup.txt
exit
fi
Pour être sûr que notre arborescence de backup existe
install -d $ARCHIVEROOT/$CURRENT
options à passer à rsync
OPTIONS="–force --ignore-errors --delete --backup --backup-dir=$ARCHIVEROOT/$INCREMENTDIR -av"
notre fonction rsync
do_rsync()
{
rsync $OPTIONS $BACKUPDIR $ARCHIVEROOT/$CURRENT 2>&1 |tee /tmp/log-backup.tmp
}
notre fonction de rapport post-backup rsync
do_accounting()
{
end time of the backup
BACKUP_END_DATE=date +%T
echo “Rapport de backup $INCREMENTDIR de $HOSTNAME: ($BACKUP_BEG_DATE)”>/tmp/rsync_script_tmpfile
echo “Debut : $BACKUP_BEG_DATE”>>/tmp/rsync_script_tmpfile
echo “Fin : $BACKUP_END_DATE”>>/tmp/rsync_script_tmpfile
echo >> /tmp/rsync_script_tmpfile
echo “################################################”>>/tmp/rsync_script_tmpfile
echo “# Etat des disques RAID 1”>>/tmp/rsync_script_tmpfile
echo “################################################”>>/tmp/rsync_script_tmpfile
cat /proc/mdstat >> /tmp/rsync_script_tmpfile
echo >> /tmp/rsync_script_tmpfile
echo “################################################”>>/tmp/rsync_script_tmpfile
echo “# Taille des backups sur le disque”>>/tmp/rsync_script_tmpfile
echo “################################################”>>/tmp/rsync_script_tmpfile
du -sh $ARCHIVEROOT/* >> /tmp/rsync_script_tmpfile
echo >> /tmp/rsync_script_tmpfile
echo “################################################”>>/tmp/rsync_script_tmpfile
echo “# Taux d’utilisation des disques”>>/tmp/rsync_script_tmpfile
echo “################################################”>>/tmp/rsync_script_tmpfile
df -h >> /tmp/rsync_script_tmpfile
echo >> /tmp/rsync_script_tmpfile
echo "Mail $MAILADDR -s Rapport de backup de $HOSTNAME - $INCREMENTDIR < /tmp/rsync_script_tmpfile"
Mail $MAILADDR -s “Rapport de backup de $HOSTNAME - $INCREMENTDIR” < /tmp/rsync_script_tmpfile
echo "cp /tmp/rsync_script_tmpfile /tmp/log-backup.txt"
cp /tmp/rsync_script_tmpfile /tmp/log-backup.txt
echo "cat /tmp/log-backup.tmp >> /tmp/log-backup.txt"
cat /tmp/log-backup.tmp >> /tmp/log-backup.txt
echo "rm /tmp/log-backup.tmp"
rm /tmp/log-backup.tmp
echo "rm /tmp/rsync_script_tmpfile"
rm /tmp/rsync_script_tmpfile
}
Pour avertir si le dossier à backuper n’est pas référencé de manière correcte
if [ -d $BACKUPDIR ]; then
now the actual transfer
do_rsync && date && do_accounting
else
echo “Ne trouve pas le dossier à backuper $BACKUPDIR. Backup annulé”|tee /tmp/log-backup.txt; exit
fi
Attendre que le disque soit prêt
sleep 30s
Démonter par sécurité le dossier de backup.
En cas de mise en veille non demandée du disque USB,
des données risquent d’être perdues.
echo “umount $ARCHIVEROOT”|tee -a /tmp/log-backup.txt
umount $ARCHIVEROOT 2>&1 |tee -a /tmp/log-backup.txt
[/code]
Voilà bon chance à ceux qui backup. Vous verrez “rsync” c’est super 