====== Ext. USB-Laufwerkdevices eindeutig zuordnen ======
===== Problem =====
Während man 'normale' externe USB-Laufwerke eindeutig mounten kann (z.B. mit UUID statt devices in der /etc/fstab), funktioniert das mit cryptsetup-Partitionen nicht.
cryptsetup kennt kein UUID (das wird beim formatieren oder partitionieren des Laufwerks vergeben). Einmal muss man /dev/sdb1, beim nächsten boot /dev/sde1 mounten. Mist.
===== Lösung =====
Dem Laufwerk/Partionen über eine Regel feste devices in /dev/ zuweisen. Dann weiß cryptsetup, was es mounten soll.
Ich hab diese Datei angelegt: /''etc/udev/rules.d/00.rules''
# geralds own Rules BUS=="usb",
ATTRS{serial}=="574341535531313939323434", KERNEL=="sd?1", NAME="%k", SYMLINK+="ext/usbhdd1", GROUP="storage"
ATTRS{serial}=="574341535531313939323434", KERNEL=="sd?3", NAME="%k", SYMLINK+="ext/usbhdd3", GROUP="storage"
Ich erstelle also eine Regel über die Seriennummer des Laufwerks.
Wie bekommt man die Seriennummer raus?
Damit ein bestimmter USB-Stick (oder auch eine Festplatte) immer den gleichen Device Namen zugewiesen bekommt, kann man sich eine Udev Regel erstellen.
Zuerst muss man die Seriennummer des Sticks herausfinden. Dazu geht man folgendermaßen vor:
# ''udevmonitor'' starten
# den Stick einstöpseln, und sich das Device merken (z.B. /dev/sdc)
Jetzt kann man sich mit Hilfe von ''udevinfo'' und ''grep'' die Serienenummer anzeigenlassen.
udevinfo -a -p `udevinfo -q path -n /dev/sdc` | grep ATTRS{serial}
Die Ausgabe sollte etwa so aussehen:
ATTRS{serial}=="14AB0000000096"
ATTRS{serial}=="0000:00:02.2"
Um herauszufinden welche Nummer die des Sticks ist führt man den Befehl nochmal aus, ersetzt aber ''ATTRS{serial}'' durch ''ATTRS{product}''.
udevinfo -a -p `udevinfo -q path -n /dev/sdc` | grep ATTRS{product}
Jetzt erhält man eine Ausgabe die in etwa so aussieht:
ATTRS{product}=="USB Mass Storage Device"
ATTRS{product}=="EHCI Host Controller"
Die gesuchte Nummer des Sticks ist also die erste.
Jetzt kann man sich eine eigene udev Regel erstellen. Dazu legt man am besten eine neue Datei unter ''/etc/udev/rules.d/'' an.
(Hinweis: udev arbeitet die Dateien in alphabetischer Reihenfolge ab). Die Datei könnte man z.B. 50-myusb.rules nennen.
In die Datei trägt man nun folgendes ein.
SUBSYSTEMS=="usb", ATTRS{serial}=="14AB0000000096", KERNEL=="sd*", SYMLINK+="usbstick%n"
Jetzt noch die udev Regeln neu laden.
udevcontrol reload_rules
Udev sollte jetzt beim einstöpseln (vorausgesetzt der Stick enthält eine Partition) zwei Symlinks, die auf das "reale" Device zeigen, in /dev erstellen.
''usbstick'' für den Stick an sich und ''usbstick1'' für die (erste) Partition. Ab jetzt kann über diese Links auf den Stick zugegriffen werden.
Enthält der Stick mehr als eine Partition wird für jede ein eigener Link mit der Partitionsnummer angelegt. Wie bei einer Festplatte auch.
zum Beispiel
/dev/usbstick
/dev/usbstick1
/dev/usbstick2