Automatische Scriptausführung bei plug-in von USB-Stick

Vor geraumer Zeit beschrieb ich, wie man EncFS-Mounts bei Suspend/Hibernate automatisch aushängen kann. Heute drehe ich den Spieß etwas um und zeige euch, wie ihr eure Mounts automatisch wieder eingehangen bekommt.

Das Ganze läuft auf Basis von udev und setzt voraus, dass sich eine “autorun.sh” genannte Datei mit entsprechenden Befehlen im Root-Verzeichnis eures USB-Sticks befindet.

Zuerst legen wir die Datei /etc/udev/rules.d/99-crypto.rules mit folgendem Inhalt an.

ENV{ID_FS_LABEL}=="crypto", ACTION=="add", \
    RUN="/usr/bin/mkdir /mnt/$env{ID_FS_LABEL}" \
    RUN+="/bin/mount $env{DEVNAME} /mnt/$env{ID_FS_LABEL}" \
    RUN+="/bin/sh /mnt/$env{ID_FS_LABEL}/autorun.sh"
<!--more-->
ENV{ID_FS_LABEL}=="crypto", ACTION=="remove", \
    RUN="/usr/bin/rmdir /mnt/$env{ID_FS_LABEL}"

Als Alternative zu ID_FS_LABEL könnte man auch ID_FS_UUID oder eine Kombination aus ID_SERIAL und  ID_PART_ENTRY_NUMBER verwenden. Die Entscheidung muss jeder für sich selbst treffen. Ich halte es bei solchen Dingen lieber simpel.

# udevadm info /dev/sdc1 | grep -E '(ID_FS_(UUID|LABEL)|ID_SERIAL|ID_PART_ENTRY_NUMBER)='
E: ID_FS_LABEL=crypto
E: ID_FS_UUID=7a7fbb20-743b-11e2-bcfd-0800200c9a66
E: ID_PART_ENTRY_NUMBER=1
E: ID_SERIAL=0x0ee49818

Wenn die Regeln korrekt angelegt wurden, kann man sie auch direkt einem ersten Test unterziehen.

# udevadm test /sys/block/sdc/sdc1
[...]
read rules file: /etc/udev/rules.d/99-crypto.rules
[...]
run: '/usr/bin/mkdir /mnt/crypto'
run: '/bin/mount /dev/sdc1 /mnt/crypto'
run: '/bin/sh /mnt/crypto/autorun.sh'
unload module index

Wenn auch das geklappt hat, muss bekommt udev die Anweisung die Regeln neu zu laden und wir sind fertig.

# udevadm control --reload-rules