USB-Stick mit udev eindeutig benennen
(Zwischenspeichern 2) |
(Letztes Zwischenspeichern vor Endkontrolle) |
||
Zeile 17: | Zeile 17: | ||
tail -f /var/log/syslog | tail -f /var/log/syslog | ||
− | dann den Stick einstecken. Im Syslog sollten dann etwas auftauchen wie "... kernel: sdh: sdh1". Je nachdem wie viele SATA- oder USB-Geräte ihr angeschlossen habt unterscheidet sich die Angabe im dritten Buchstaben (sd'''h'''), also ggf. im folgenden anpassen. Mit strg-c verlassen wir die Syslog-Ausgabe. | + | dann den Stick einstecken. Im Syslog sollten dann etwas auftauchen wie "... kernel: sdh: sdh1". Je nachdem wie viele SATA- oder USB-Geräte ihr angeschlossen habt, unterscheidet sich die Angabe im dritten Buchstaben (sd'''h'''), also ggf. im folgenden anpassen. Mit strg-c verlassen wir die Syslog-Ausgabe. |
Als nächstes ermitteln wir mir udevinfo die eindeutige Seriennummer: | Als nächstes ermitteln wir mir udevinfo die eindeutige Seriennummer: | ||
Zeile 52: | Zeile 52: | ||
Über die vorhandene udef-Regel z60_umount.rules wird dann usbmount aufgerufen. | Über die vorhandene udef-Regel z60_umount.rules wird dann usbmount aufgerufen. | ||
− | Da hier am Anfang des Scripts die Variable $MOUNTPOINTS leider geleert wird, können wir diese nicht direkt aus udef übergeben deshalb der Umweg. | + | Da hier am Anfang des Scripts die Variable $MOUNTPOINTS leider geleert wird, können wir diese nicht direkt aus udef übergeben, deshalb der Umweg. |
− | Wir ändern also das Script /usr/share/usbmount/usbmount wie folgt. | + | Wir ändern also das Script /usr/share/usbmount/usbmount wie folgt. Nach dem folgenden Originalabsatz... |
# Read configuration file. | # Read configuration file. | ||
if test -r /etc/usbmount/usbmount.conf; then | if test -r /etc/usbmount/usbmount.conf; then | ||
Zeile 90: | Zeile 90: | ||
==Weblinks== | ==Weblinks== | ||
− | * [http://www.vdr-portal.de/board/thread.php?threadid=69101 Ursprungsartikel von HolgerAusB bei vdr-portal.de] | + | * [http://www.vdr-portal.de/board/thread.php?threadid=69101 Ursprungsartikel von HolgerAusB bei vdr-portal.de] - Bei Problemen mit der Umsetzung bitte dort nachfragen |
+ | |||
+ | [[Kategorie:C't-VDR]] | ||
+ | [[Kategorie:Debian]] |
Version vom 28. September 2007, 17:02 Uhr
- Diese Seite befindet sich momentan im Aufbau
- Bitte warten Sie mit Bearbeitungen, bis ich fertig bin und diesen Hinweis entfernt habe --HolgerAusB 17:09, 28. Sep 2007 (CEST)
- Bei Fragen, nutzen Sie bitte folgende Diskussionsseite.
- Danke
Dieses HowTo beschreibt wie man mit udev und usbmmount einen USB-Speicher-Stick anhand der Seriennummer eindeutig identifizieren und im System an einer genau festgelegten Stelle mounten kann. Ein bestimmter Stick wird also nicht mal nach /media/usb0 und ein anders mal nach /media/usb2 gemountet, sondern immer nach z.B. /mnt/videostick. Eindeutige Mountpoints erleichtern z.B. das Erstellen von Befehlen für das Filebrowser-plugin.
Das ganze sollte auch mit externen USB-Festplatten und anderen USB-Massenspeichern funktionieren.
Nach diesem HowTo wird ein ein Originalscript aus dem usbmount-Paket verändert. Sie tun dies ausdrücklich auf eigene Gefahr! Außerdem bedeutet dies, dass bei einem Update des Originalpaketes die Änderung am Script u.U. erneut durchgeführt werden muss.
Inhaltsverzeichnis |
Voraussetzungen
Dieser Artikel bezieht sich auf C't-VDR 6, bzw. auf Debian Etch mit installiertem udev und usbmount. Bei anderen Systemen sind die Pfadangaben möglicherweise anders.
Schritt 1 - Ermittlung der Seriennummer
Zunächst stellen wir fest, welche Seriennumer oder andere Identifzierungen unser Stick liefert. Dazu müssen wir wissen, welches Device das System beim Einstecken vergibt. Das ermitteln wir über das Syslog
tail -f /var/log/syslog
dann den Stick einstecken. Im Syslog sollten dann etwas auftauchen wie "... kernel: sdh: sdh1". Je nachdem wie viele SATA- oder USB-Geräte ihr angeschlossen habt, unterscheidet sich die Angabe im dritten Buchstaben (sdh), also ggf. im folgenden anpassen. Mit strg-c verlassen wir die Syslog-Ausgabe.
Als nächstes ermitteln wir mir udevinfo die eindeutige Seriennummer:
udevinfo -a -p /sys/block/sdh
Hier erhalten wir eine in Blöcke unterteilte lange Ausgabe. In einem der Blöcke finden sich die für uns interessanten Angaben:
looking at parent device '/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2.4': KERNELS=="5-2.4" SUBSYSTEMS=="usb" DRIVERS=="usb" ATTRS{serial}=="0123456789ABCDEF" ATTRS{product}=="Cn Memory"
Die Seriennummer lautet hier also 0123456789ABCDEF. Die "product"-Kennung kann man für alle Fälle auch noch verwenden.
Schritt 2 - Anlegen einer Regel für udev
Unter /etc/udev/rules.d/ befinden sich einige vordefiniete Regeln (.rules), die in alphanumerischer Reihenfolge abgearbeitet werden. Wir müssen dafür sorgen, dass unsere neue Regeldatei vor der originalen Datei z60_usbmount.rules ausgeführt wird. Unsere Regel sollte also mit z59 beginnen. Wir legen also die neue Datei /etc/udef/rules.d/z59_usb-identifyer.rules an:
KERNEL=="sd*", ATTRS{serial}=="0123456789ABCDEF", ATTRS{product}=="Cn Memory", \ SYMLINK="videostick%n", ENV{SPECIALMOUNTPOINT}="/mnt/videostick"
Der Teil mit SYMLINK ist für unseren Zweck zwar nicht erforderlich, kann aber hilfreich werden, wenn wir später mal den Stick manuell mounten müssen. Dann kann man statt /dev/sdx1 /dev/videostick1 verwenden. ATTRS{product} habe ich als zusätzliches Kriterium eingefügt, nur für den Fall.
Wichtig hingegen ist ENV{SPECIALMOUNTPOINT}="/mnt/videostick". Hiermit übergebn wir eine neue Umgebungsvariable mit dem Wunschverzeichnis an das usbmount-Skript (nächster Schritt).
Den Mountpoint sollten wir dann noch einmalig anlegen:
mkdir /mnt/videostick
Wenn Sie mehrere USB-Massenspecher zuordenen wollen, wiederholen Sie die Schritte 1 und 2 für die anderen Geräte und legen Sie für jede Seriennummer eine neue Zeile in unserer udef-Regel z59.. an und vergeben dort je einen eindeutigen SYMLINK und SPECIALMOUNTPOINT.
Schritt 3 - Script von usbmount anpassen
Über die vorhandene udef-Regel z60_umount.rules wird dann usbmount aufgerufen.
Da hier am Anfang des Scripts die Variable $MOUNTPOINTS leider geleert wird, können wir diese nicht direkt aus udef übergeben, deshalb der Umweg.
Wir ändern also das Script /usr/share/usbmount/usbmount wie folgt. Nach dem folgenden Originalabsatz...
# Read configuration file. if test -r /etc/usbmount/usbmount.conf; then . /etc/usbmount/usbmount.conf fi
fügen wir neu ein:
#Add special mountpoint for udev-z59-identified devices if test "$SPECIALMOUNTPOINT" != ""; then MOUNTPOINTS="$SPECIALMOUNTPOINT $MOUNTPOINTS" fi
Erläuterung: In der original usbmount.conf steht
MOUNTPOINTS="/media/usb0 /media/usb1 ... /media/usb7"
Unsere Ergänzung schreibt nun das Wunschziel an den Anfang der Liste. Falls dieses zur Laufzeit aus irgendeinem Grunde nicht verfügbar ist weil zuvor fehlerhaft ge(un)mountet wurde oder der Mountpoint noch nicht mit mkdir angelegt war, wird dann als Rückfallebene wieder auf /media/usb[n] gemountet.
Schritt 4 - Abschlussarbeiten
Wir müssen noch den udev-daemon neu starten, damit die neue z59-Regel auch aktiv wird:
/etc/init.d/udev restart
Damit sollte zumindest das automatische Mounten beim Einstecken des Sticks funktionieren. Starten Sie zum Testen wieder das aus Schritt 1 bekannte
tail -f /var/log/syslog
und stecken dann den Stick ein, usbmount sollte dann nach wenigen Sekunden etwa folgendes melden:
usbmount[30261]: executing command: mount -tvfat -o...[gekürzt]... /dev/sdh1 /mnt/videostick
Glückwunsch! Sie haben es geschafft.
Zum manuellen Mounten ergänzt man geschickter Weise noch die /etc/fstab um den in Schritt 2 angelegten SYMLINK:
/dev/videostick1 /mnt/videostick vfat rw,async,group
Literatur
- Mirko Dölle: USB-Automateur. USB-Geräte unter Linux erkennen und in automatische Prozesse einbinden. In: c't. 16/2007, S. 184-186.
Weblinks
- Ursprungsartikel von HolgerAusB bei vdr-portal.de - Bei Problemen mit der Umsetzung bitte dort nachfragen