Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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