menu.jpg  ::  Home ::  Computing ::  Downloads ::  Scooter ::  Links ::  Music ::  Nonsense ::  Mail :: 

PC: Wechselmedien mit dem Kernel-Automounter einbinden

Viele Wechselmedien haben eine USB-Schnittstelle. USB Medien werden von Linux als SCSI-Geräte gesehen und den Device-Knoten /dev/sdx[y] zugeordnet. Über die Device-Knoten ordnet man den Medien Mountpoints zu. Sobald man aber mit mehreren USB Medien zugleich arbeitet, kann man leicht den Überblick verlieren, an welchem Knoten welches Medium hängt und an welchem Mountpoint dieses letztendlich gemountet ist.

Ich umgehe dieses Problem hier mit dem udevd(8), der so konfiguriert ist, dass er einzelnen Geräten definierte Device-Knoten zuordnet, die ich wiederum bestimmten Mountpoint zuordnen kann.

1. Mit udev definierte Device-Knoten für einzelne Geräte zuordnen

Alle USB Geräte melden sich beim System mit einem Wust von Informationen, darunter der Angabe ihres Herstellers, ihres Produktnamens und ihrer Seriennummer an. Diese Informationen lassen sich mit udevadm(8) auslesen.

Einer meiner Memory-Sticks gibt u.a. folgendes aus:

 # udevadm info --path=/sys/block/sde --attribute-walk
 ...
 looking at parent device '/devices/pci0000:00/0000:00:13.2/usb2/2-4/2-4.4':
   KERNELS=="2-4.4"
   SUBSYSTEMS=="usb"
   DRIVERS=="usb"
   ATTRS{configuration}==""
   ATTRS{bNumInterfaces}==" 1"
   ATTRS{bConfigurationValue}=="1"
   ATTRS{bmAttributes}=="80"
   ATTRS{bMaxPower}==" 80mA"
   ATTRS{urbnum}=="231"
   ATTRS{idVendor}=="1307"
   ATTRS{idProduct}=="0163"
   ATTRS{bcdDevice}=="0100"
   ATTRS{bDeviceClass}=="00"
   ATTRS{bDeviceSubClass}=="00"
   ATTRS{bDeviceProtocol}=="00"
   ATTRS{bNumConfigurations}=="1"
   ATTRS{bMaxPacketSize0}=="64"
   ATTRS{speed}=="480"
   ATTRS{busnum}=="2"
   ATTRS{devnum}=="6"
   ATTRS{version}==" 2.00"
   ATTRS{maxchild}=="0"
   ATTRS{quirks}=="0x0"
   ATTRS{authorized}=="1"
   ATTRS{manufacturer}=="USBest Technology"
   ATTRS{product}=="USB Mass Storage Device"
   ATTRS{serial}=="000000000004E6"
   ...

Über die Seriennummer, unter ATTRS{serial} zu finden, lässt sich folgende Regel für den udevd(8) erstellen, mit der dieser beim Einstecken des Mediums den symbolischem Link /dev/stick0 erstellen soll, der auf den tatsächlichen Device-Knoten zeigt:

  SUBSYSTEMS=="usb", KERNEL=="sd?1", ATTRS{serial}=="000000000004E6", NAME="%k", MODE="0666", SYMLINK+="stick0"

Diese Regel habe ich in die Datei /etc/udev/rules.d/10-local-rules eingetragen und sehe hier nach Einstecken des Memory-Sticks folgenden symbolischen Link:

 # ls -l /dev/stick0
 lrwxrwxrwx 1 root root 4 Dec 26 12:27 /dev/stick0 -> sde1

Sollte der Link wider Erwarten nicht vorhanden sein, kann man den udevd(8) mit folgendem Befehl zum Neueinlesen seines Regelsatzes zwingen:

 # udevadm control --reload-rules

1.1. Dem symbolischen Link einen festen Mountpoint zuordnen

Für diesem Link kann ich jetzt einen festen Mountpoint wie z. B. /mnt/misc/stick0 anlegen und einen entsprechenden Eintrag in der /etc/fstab vornehmen, um diesen Memory-Stick zukünftig auch mit User-Rechten an einer definierten Stelle einzubinden:

/dev/stick0 /mnt/misc/stick0 vfat rw,noatime,noauto,user,flush,noexec 0 0

Mit dem Befehl mount /mnt/misc/stick0 lässt sich der eingesteckte Memory-Stick dann in den Dateibaum einbinden.

1.2. Den symbolischen Link über den Kernel-Automounter einbinden

Statt des unter 1.1. geschilderten Wegs, der manuelles Mounten erfordert, setze ich hier den Kernel-Automounter ein. Der Kernel-Automounter überwacht konfigurierte Mountpoints und bindet diese automatisch ein, sobald man in das jeweilige Verzeichnis wechselt.

Dazu ist folgende Option ist bei der Konfiguration des Kernels erforderlich:

  CONFIG_AUTOFS4_FS=y

Ausserdem muss das Paket autofs, dass die erforderlichen Userspace Tools für den Kernel-Automounter enthält, installiert und das automount(8) Programm, über das der Kernel-Automounter gesteuert wird, muss gestartet sein.

  /etc/init.d/autofs start  

Mein Kernel-Automounter wäre für den o. a. Memory-Stick folgendermassen konfiguriert:

Die etwas kryptisch aussehenden uid und gid Anweisungen bewirken, dass die Dateien dem User, der den Automount angestossen hat, gehören.

Ich stecke den Memory-Stick ein und wechsele in das Verzeichnis /mnt/misc/stick0, in das vom Kernel-Automounter schon automatisch der Memory-Stick eingebunden ist. Nachdem ich das Verzeichnis wieder verlassen habe, wird der Memory-Stick automatisch nach 5 Sekunden wieder ausgebunden und ich kann ihn wieder abziehen.


Valid XHTML 1.0

Zurück zur Main-Site
Impressum
Created with GNU-Emacs on Sat Dec 26 12:08:56 CET 2009

Valid CSS