Manchmal kann es sinnvoll sein, wenn angesteckte USB-Laufwerke beim automatischen mounten gleich einem speziellen Verzeichnis zugewiesen werden.
Hilfreich ist hierfür der Dienst „udev“. Udev ist ein Dienst, welcher dynamisch die Geräte (/dev/..) unter Linux verwalten kann.
Wie man das mit „udev“ lösen kann, zeige ich in diesem Beitrag.
!!Dieser Tutorial setzt ein installiertes und eingerichtetes “usbmount“ (http://krausens-online.de/debianraspbian…atisch-mounten/) voraus. !!
Der gewünschte Datenträger muss zuerst identifiziert werden. Die Identifizierung erfolgt z.B.: durch seine Seriennummer.
Um die Seriennummer eines USB-Datenträgers auslesen zu können kann man den Befehl „udevadm“ verwenden.
(In diesem Beispiel ist der USB-Datenträger als /dev/sda eingebunden)
1 2 |
$ udevadm info -a -n /dev/sda | grep serial ATTRS{serial}=="12345GGH00000142" |
Damit dem Datenträger nun eine spezielle Aktion zugewiesen werden kann wird eine udev-Regel erstellt.
Diese Regeln erstellt man unter /etc/udev/rules.d . Die Regeln werden der Reihe nach abgearbeitet.
Wichtig ist, dass die Regel für die Identifizierung vor der Regel des „usbmount“ aufgerufen wird. Ich entschiede mich dafür meine Regel 30-stick-identify.rules zu nennen.
1 |
$ sudo vim /etc/udev/rules.d/30-stick-identify.rules |
und fülle diese Datei mit folgendem Inhalt
1 |
KERNEL=="sd*", ATTRS{serial}=="12345GGH00000142", ENV{forcedmountplace}="/mnt/backup" |
Wenn eine Aktion auf einem sd-Device statt findet und dieses Device die vorgegebene Seriennummer hat, dann wird der Variable „forcesmountplace“ der Verzeichnispfad “/mnt/backup“ übergeben.
Um sicher zu gehen, dass es den Verzeichnispfad auch gibt, wird dieser jetzt angelegt.
1 |
$ sudo mkdir /mnt/backup |
Damit usbmount jetzt auch auf diese Variable reagieren kann, ist noch eine Anpassung der Datei „/usr/share/usbmount/usbmount“ notwendig.
Dazu suchen wir die Zeilen für den Aufruf der usbmount.conf und erweitern diese mit der Angabe unserer Variable.
original:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
... # Default values for configuration variables. ENABLED=1 MOUNTPOINTS= FILESYSTEMS= MOUNTOPTIONS= FS_MOUNTOPTIONS= VERBOSE=no if [ -r /etc/usbmount/usbmount.conf ]; then . /etc/usbmount/usbmount.conf log debug "loaded usbmount configurations" fi if [ "${ENABLED:-1}" -eq 0 ]; then log info "usbmount is disabled, see /etc/usbmount/usbmount.conf" exit 0 fi ... |
geändert:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
... # Default values for configuration variables. ENABLED=1 MOUNTPOINTS= FILESYSTEMS= MOUNTOPTIONS= FS_MOUNTOPTIONS= VERBOSE=no if [ -r /etc/usbmount/usbmount.conf ]; then . /etc/usbmount/usbmount.conf log debug "loaded usbmount configurations" fi #Vorgabe des Mount-Verzsichnisses aus udev-Regel if test "$forcedmountplace" != ""; then MOUNTPOINTS="$forcedmountplace $MOUNTPOINTS" fi if [ "${ENABLED:-1}" -eq 0 ]; then log info "usbmount is disabled, see /etc/usbmount/usbmount.conf" exit 0 fi ... |
Wenn die Variable $forcedmountplace einen Wert zugewiesen bekommen hat, dann wird dieser Wert an die Variable $MOUNTPOINTS übergeben und dies als Mountverzeichnis übernommen.
Ist die Variable $forcedmountplace leer, so wird der Variable $MOUNTPOINTS ein Wert aus der usbmount.conf (/media/usb0 – 7) übergeben.
Wird jetzt der USB-Datenträger angesteckt, wird in dieser in das Verzeichnis “/mnt/backup“ gemountet.
Ein „cat /var/log/messages“ zeigt an
1 2 3 4 5 |
... Dec 1 13:28:59 raspberrypi usbmount[2231]: /dev/sda does not contain a filesystem or disklabel Dec 1 13:29:00 raspberrypi usbmount[2254]: executing command: mount -tvfat -osync,noexec,nodev,noatime,nodiratime,gid=users,dmask=0007,fmask=0117 /dev/sda1 /mnt/backup Dec 1 13:29:00 raspberrypi usbmount[2254]: executing command: run-parts /etc/usbmount/mount.d ... |
(die Angaben -tvfat, gid=users usw kommen aus der usbmount.conf).
Hinweis 1:
Sollen noch weitere Datenträger speziellen Verzeichnissen zugewiesen werden so können diese einfach in der erstellten Datei “/etc/udev/rules.d/30-stick-identify.rules“ angehängt werden:
1 2 3 |
KERNEL=="sd*", ATTRS{serial}=="12345GGH00000142", ENV{forcedmountplace}="/mnt/backup" KERNEL=="sd*", ATTRS{serial}=="1HF340000004730A", ENV{forcedmountplace}="/mnt/Musik" KERNEL=="sd*", ATTRS{serial}=="CC964F00006743AF", ENV{forcedmountplace}="/mnt/Bilder" |
Hinweis 2:
Wenn man in der erstellten Datei “/etc/udev/rules.d/30-stick-identify.rules“ noch den Parameter „SYMLINK“ einfügt:
1 |
KERNEL=="sd*", ATTRS{serial}=="12345GGH00000142",SYMLINK+="backuphdd1%n", ENV{forcedmountplace}="/mnt/backup" |
so kann der Stick, sollte er einmal manuell gemountet werden, nicht nur über den Befehl
1 |
$ mount /dev/sd....... |
sondern auch mit dem Befehl
1 |
$ mount /dev/backuphdd1 |
eingebunden werden.