Pages : 1
#1 Le 26/03/2008, à 22:41
- insomniak
Need Aide sur regle UDEV
Bonjour à tous,
Je suis proche, très proche du but !!!!!! mais malheureusement je ne l'ai pas encore atteint...
Je vous explique le topo :
J'ai un HDD externe qui me sert de backup.
Je veux qu'à l'insertion de celui ci, ma regle udev me link le HDD dans /dev/backupUsb%n
Puis une fois que c'est fait, il doit me lancer un script qui monte le disque de /dev/backupUsb3 vers /mnt/backupUsb et me fait mes rsync. A la fin du backup, il démonte et me lance un bip.
Tout ça fonctionne à une exception pres : je n'arrive pas à attendre la fin du linkage dans /dev
Voici ce que j'ai fait :
1) Regle Udev de link :
SUBSYSTEMS=="usb", SYSFS{serial}=="RD53900362002", NAME="backupUsb%n"
2) Regle Udev de lancement du script
SUBSYSTEM=="usb", ATTR{serial}=="RD53900362002", RUN+="/backup.sh"
3) Script de backup
#!/bin/sh
/usr/bin/beep
MOUNTPOINT="/mnt/BackupUsb"
LOGFILE="/backup.log"
if (!(test -d $MOUNTPOINT)) then
echo "creation repertoire" $MOUNTPOINT >> $LOGFILE
mkdir $MOUNTPOINT;
fi
mount /dev/backupUsb3 $MOUNTPOINT
if [ $? != 0 ]; then
echo "erreur de montage" $MOUNTPOINT >> $LOGFILE
/usr/bin/beep -f 1200 -n -f 1000 -n -f 1200
exit 1
fi
rsync -az --log-file=$LOGFILE --progress --delete /Datas $MOUNTPOINT
umount $MOUNTPOINT
if [ $? != 0 ]; then
echo "erreur de démontage" >> $LOGFILE
/usr/bin/beep -f 1200 -n -f 1000 -n -f 1200
exit 1
fi
/usr/bin/beep -f 1000 -r 2 -n -r 5 -l 10 --new
exit 0
Explications :
1) La regle de linkage me créé autant de liens dans udev que nécessaire. Je me retrouve avec moult /dev/backupUsb (genre /dev/backupUsb010, /dev/backupUsb1, /dev/backupUsb81)
Perso j'ai constaté que /dev/backupUsb3 correspondait à la partoche que je voulais monter (j'ai testé chaque lien jusqu'à trouver donc rien de bien fiable). Sur cette regle, si j'ajoute un RUN+="unscript.sh" avec un beep à l'interieur du script j'entend un beep puis quelques secondes plus tard j'en entend trois ou quatre je ne sais plus... Donc en gros je ne peux pas mettre mon script de backup ici car il serait executé moult fois
2) La regle ici est un essai qui finalement n'est pas très concluant car il lance le script avant que la regle 1 ne soit finie (donc en fait il essaye de monter un truc qui n'existe pas encore).
3) Ce script fonctionne parfaitement si je le lance à la main. En gros il monte le disque, fait le backup et démonte.
Je m'en remet à vous car je ne trouve pas de solution. Juste besoin d'un coup de pouce au niveau des regles udev. J'aimerai créer une regle qui permette de lancer un script une seule fois et seulement si le numero de série correspond à celui que j'ai inscrit. De plus, je cherche comment "fixer" le link de la partition pour pouvoir le retrouver facilement dans le script.
Merci d'avance
@ plus
Dernière modification par insomniak (Le 26/03/2008, à 22:42)
Hors ligne
#2 Le 31/03/2008, à 02:29
- fonzcar
Re : Need Aide sur regle UDEV
Merci pour ton début de solution.
J'ai (je pense) résolu tes problèmes, il y a peut être moyen de faire plus propre. (si jamais tu trouve merci de me le dire).
1) Dans mes règles udev je ne crée pas d'alias (NAME=....)
Je lance juste mon script comme ça :
$ cat /etc/udev/rules.d/10-local.rules
BUS=="usb" , KERNEL=="sd*", SYSFS{serial}=="0010000000000000000004F5", RUN+="/root/backup.sh"
Cette règle lance le script suivant autant de fois qu'il y a de partition sur le disque + 1 (sur /dev/sda, /dev/sda1, /dev/sda2...)
3)
MOUNTPOINT="/mnt/backup"
LOGFILE="/root/backup.log"
PART=1
echo "---------- debut ----------" >> $LOGFILE
date >> $LOGFILE
echo "devname =" $DEVNAME >> $LOGFILE
#pour recuperer le num de la partition sur laquelle est lancée le script
PARTNUM=`echo $DEVNAME | cut -c 9`
if [ "$PARTNUM" != "$PART" ]; then
echo "----- end : pas la bonne partoche -------" >> $LOGFILE
exit 1
else
if (!(test -d $MOUNTPOINT)) then
echo "creation repertoire" $MOUNTPOINT >> $LOGFILE
mkdir $MOUNTPOINT;
fi
mount $DEVNAME $MOUNTPOINT
if [ $? != 0 ]; then
echo "erreur de montage" $MOUNTPOINT >> $LOGFILE
/usr/bin/beep -f 1200 -n -f 1000 -n -f 1200
exit 1
fi
rsync -az --log-file=$LOGFILE --progress --delete /Datas $MOUNTPOINT
umount $MOUNTPOINT
if [ $? != 0 ]; then
echo "erreur de démontage" >> $LOGFILE
/usr/bin/beep -f 1200 -n -f 1000 -n -f 1200
exit 1
fi
/usr/bin/beep -f 1000 -r 2 -n -r 5 -l 10 --new
echo "-------- end - ok --------" >> $LOGFILE
echo "" >> $LOGFILE
exit 0
fi
En fait tu as la variable $DEVNAME qui contient le /dev sur lequel est apellé ton script.
Je la cutte pour récupérer le numéro de partition
Et ainsi je lance le mount et rsync que si je suis sur la bonne partition.
J'espère que ça pourra t'aider, et que quelqu'un pourra nous dire si il existe plus simple.
++
#3 Le 31/03/2008, à 07:34
- insomniak
Re : Need Aide sur regle UDEV
Salut,
En fait j'ai trouvé la solution Vendredi mais je n'ai pas eu le temps de venir la poster ce week end...
Tu reperes la partoche quand tu branche ton hdd (pour moi c'est sdb3) et ensuite il suffit de créer la regle udev suivante :
KERNEL=="sdb3", SUBSYSTEMS=="usb", ATTRS{serial}=="dshkfjhskfsdc", NAME="MonDisque", RUN+="/backup.sh"
Puis dans backup.sh tu n'as plus qu'à faire un mount /dev/MonDisque /mnt/backup
Pour tester la regle, dans backup.sh mets un /usr/bin/beep et comptes le nombre de beeps, s'il n'y en a qu'un c'est good.
Merci pour la variable DEVNAME, je ne savais pas
@+
Hors ligne
#4 Le 31/03/2008, à 22:30
- fonzcar
Re : Need Aide sur regle UDEV
Oui c'est une solution mais si tu branche un autre disque et qu'il prend /dev/sdb, ton script se lancera pas.
Donc fait gaffe
++
#5 Le 01/04/2008, à 06:47
- insomniak
Re : Need Aide sur regle UDEV
C'est volontaire : mon backup ne se fait que sur mon disque de backup et pas sur un autre ^^
Hors ligne
#6 Le 06/09/2008, à 10:49
- U-topic
Re : Need Aide sur regle UDEV
J'utilise a peu près le même genre de script pour la sauvegarde sauf que moi , a la fin , il affiche un retour visuel avec zenity...
Seulement voila,les scripts lancés par udev n'arrive pas a ouvrir nimporte quelle application graphique....Quelqu'un sait il si cest possible ?
Merci !
Hors ligne
#7 Le 10/09/2008, à 15:37
- U-topic
Re : Need Aide sur regle UDEV
Up?:D
Hors ligne
Pages : 1