USB mit Debian/Sarge
Nachdem ich nun auf Sarge umgestiegen bin, musste ich erstmal meinen ganzen USB-Kram einrichten. Natürlich soll alles automatisch funktionieren.
Ich laß mich doch nicht von Windows-Anwendern belächeln... :-)
Die Geschichte ist schnell eingerichtet - wenn man Kernel 2.6 und udev verwendet.
Es folgt eine schnelle Übersicht der Einrichtung in 6 Schritten. Hersteller oder Produktnamen können bei deinen Geräten anders sein! Eventuell muss man diese Informationen erst über das sysfs (unter /sys) in Erfahrung bringen. Die System-Logdateien können auch hilfreich sein. Datei- und Zugriffsrechte sind abhängig von deiner persönlichen Paranoia. :-)
1. Benutzergruppen anlegen
# addgroup --system --gid 222 usbstick # addgroup --system --gid 250 usbdrive # addgroup --system --gid 333 multicard
2. Benutzer den Gruppen zuweisen
# adduser hugo2 usbstick # adduser hugo8 multicard # adduser hugo8 usbdrive
3. Verzeichnisse anlegen
$ ls -l /media/ drwxr-xr-x 2 root root 4096 2005-07-02 14:20 medion drwxr-xr-x 6 root root 4096 2005-07-02 14:20 multicard drwxr-xr-x 2 root root 1024 2006-03-03 15:18 usbdrive drwxr-xr-x 2 root root 4096 2005-07-02 14:20 usbstick
$ ls -l /media/multicard/ drwxr-xr-x 2 root root 4096 2005-07-02 14:20 cf-md drwxr-xr-x 2 root root 4096 2005-07-02 14:20 mmc-sd drwxr-xr-x 2 root root 4096 2005-07-02 14:20 ms-pro drwxr-xr-x 2 root root 4096 2005-07-02 14:20 xd-sm
$ ls -ld /etc/dev.d/block/ drwxr-xr-x 2 root root 4096 2005-07-08 15:09 /etc/dev.d/block/
4. Dateien für Devices anlegen
$ ls -l /etc/dev.d/block/ -rwxr-xr-x 1 root root 1159 2005-07-08 15:07 medion.dev -rwxr-xr-x 1 root root 2073 2005-07-08 15:08 multicard.dev -rwxr-xr-x 1 root root 1127 2005-07-08 15:09 usbstick.dev -rwxr-xr-x 1 root root 1351 2006-03-04 11:33 usbdrive.dev
/etc/dev.d/block/medion.dev
#!/bin/sh ###################################################################### # /etc/dev.d/block/medion.dev ###################################################################### # # Medion Kamera beim Anstecken/Abziehen automatisch mounten/umounten # # Achtung: falls Daten auf die Kamera geschrieben wurden: # vor dem Abziehen manuell den Befehl sync ausfuehren, # sonst droht eventuell Datenverlust! # Das kann man schlecht automatisieren - woher will das # System wissen, wann ich die Kamera abziehe?! :-) # ###################################################################### if [ "$ACTION" == "add" ] ; then if [ "$DEVNAME" == "/dev/medion" ]; then if [ $UDEV_LOG ]; then logger "medion device added ($*)[`env`]" fi mount /media/medion fi fi if [ "$ACTION" == "remove" ] ; then if [ "$DEVNAME" == "/dev/medion" ]; then if [ $UDEV_LOG ]; then logger "medion device removed ($*)[`env`]" fi umount /media/medion fi fi exit 0 ###################################################################### # eof ######################################################################
/etc/dev.d/block/multicard.dev
#!/bin/sh ###################################################################### # /etc/dev.d/block/multicard.dev ###################################################################### # # USB MultiCard ReaderWriter beim Anstecken/Abziehen # automatisch mounten/umounten # # Hinweis: beim einstecken neuer Cards in den MultiCard # ReaderWrite kurz USB-Kabel ziehen und wieder einstecken, # weil ein einfacher Kartenwechsel nicht erkannt wird!) # # Achtung: falls Daten auf eine Karte geschrieben wurden: # vor dem Abziehen manuell den Befehl sync ausfuehren, # sonst droht eventuell Datenverlust! # Das kann man schlecht automatisieren - woher will das # System wissen, wann ich das Kabel abziehe?! :-) # ###################################################################### log_add_dev() { if [ $UDEV_LOG ]; then logger "multicard new device added [`env`]" fi } log_del_dev() { if [ $UDEV_LOG ]; then logger "multicard device removed [`env`]" fi } if [ "$ACTION" == "add" ] ; then if [ "$DEVNAME" == "/dev/multicard/cf-md" ]; then log_add_dev mount /media/multicard/cf-md fi if [ "$DEVNAME" == "/dev/multicard/ms-pro" ]; then log_add_dev mount /media/multicard/ms-pro fi if [ "$DEVNAME" == "/dev/multicard/mmc-sd" ]; then log_add_dev mount /media/multicard/mmc-sd fi if [ "$DEVNAME" == "/dev/multicard/xd-sm" ]; then log_add_dev mount /media/multicard/xd-sm fi fi if [ "$ACTION" == "remove" ] ; then if [ "$DEVNAME" == "/dev/multicard/cf-md" ]; then log_del_dev umount /media/multicard/cf-md fi if [ "$DEVNAME" == "/dev/multicard/ms-pro" ]; then log_del_dev umount /media/multicard/ms-pro fi if [ "$DEVNAME" == "/dev/multicard/mmc-sd" ]; then log_del_dev umount /media/multicard/mmc-sd fi if [ "$DEVNAME" == "/dev/multicard/xd-sm" ]; then log_del_dev umount /media/multicard/xd-sm fi fi exit 0 ###################################################################### # eof ######################################################################
/etc/dev.d/block/usbstick.dev
#!/bin/sh ###################################################################### # /etc/dev.d/block/usbstick.dev ###################################################################### # # USB-Stick beim Anstecken/Abziehen automatisch mounten/umounten # # Achtung: falls Daten auf den Stick geschrieben wurden: # vor dem Abziehen manuell den Befehl sync ausfuehren, # sonst droht eventuell Datenverlust! # Das kann man schlecht automatisieren - woher will das # System wissen, wann ich den Stick abziehe?! :-) # ###################################################################### if [ "$ACTION" == "add" ]; then if [ "$DEVNAME" == "/dev/usbstick" ]; then if [ $UDEV_LOG ]; then logger "usbstick new device added ($*)[`env`]" fi mount /media/usbstick fi fi if [ "$ACTION" == "remove" ]; then if [ "$DEVNAME" == "/dev/usbstick" ]; then if [ $UDEV_LOG ]; then logger "usbstick device removed ($*)[`env`]" fi umount /media/usbstick fi fi exit 0 ###################################################################### # eof ######################################################################
/etc/dev.d/block/usbdrive.dev
#!/bin/sh ###################################################################### # /etc/dev.d/block/usbdrive.dev ###################################################################### # # nur einfache Loggingfunktionen fuer USB-Platte an/abstecken # (mounten mit automounter) # ###################################################################### log_add_dev() { if [ $UDEV_LOG ]; then logger "usbdrive new device added [`env`]" fi } log_del_dev() { if [ $UDEV_LOG ]; then logger "usbdrive device removed [`env`]" fi } if [ "$ACTION" == "add" ] ; then if [ "$DEVNAME" == "/dev/usbdrive/part" ]; then log_add_dev fi if [ "$DEVNAME" == "/dev/usbdrive/part/1" ]; then log_add_dev fi if [ "$DEVNAME" == "/dev/usbdrive/part/2" ]; then log_add_dev fi if [ "$DEVNAME" == "/dev/usbdrive/part/3" ]; then log_add_dev fi fi if [ "$ACTION" == "remove" ] ; then if [ "$DEVNAME" == "/dev/usbdrive/part" ]; then log_del_dev fi if [ "$DEVNAME" == "/dev/usbdrive/part/1" ]; then log_del_dev fi if [ "$DEVNAME" == "/dev/usbdrive/part/2" ]; then log_del_dev fi if [ "$DEVNAME" == "/dev/usbdrive/part/3" ]; then log_del_dev fi fi exit 0 ###################################################################### # eof ######################################################################
5. Datei und Link für udev-Regeln anlegen
$ ls -l /etc/udev/MAIN.rules -rw-r--r-- 1 root root 2072 2005-07-08 15:18 /etc/udev/MAIN.rules
$ ls -l /etc/udev/rules.d/MAIN.rules lrwxrwxrwx 1 root root 13 2005-06-30 15:24 /etc/udev/rules.d/MAIN.rules -> ../MAIN.rules
/etc/udev/MAIN.rules
######################################################################### # /etc/udev/rules.d/MAIN.rules (is link of /etc/udev/MAIN.rules!) ######################################################################### # # Devices mit udev automatisch anlegen, # abhaengig von Hersteller und Produkt # ######################################################################### # Digicam Medion made by http://www.medion.de/ ######################################################################### BUS="scsi", SYSFS{vendor}="MCC", SYSFS{model}="DSC-3", \ MODE="0660", GROUP="multicard", NAME="medion" ######################################################################### # USB Stick Red Pearl made by http://www.cnmemory.de/ ######################################################################### BUS="scsi", SYSFS{vendor}="OTi", SYSFS{model}="Flash Disk", \ MODE="0660", GROUP="usbstick", NAME="usbstick" ######################################################################### # Hama USB 2.0 CardReaderWriter made by http://www.hama.de/ ######################################################################### # CompactFlash Typ I + II ; MicroDrive BUS="scsi", SYSFS{vendor}="ICSI", SYSFS{model}="* CF", \ MODE="0660", GROUP="multicard", NAME="multicard/cf-md" # Memory Stick Card ; Memory Stick Pro BUS="scsi", SYSFS{vendor}="ICSI", SYSFS{model}="* MS", \ MODE="0660", GROUP="multicard", NAME="multicard/ms-pro" # MMC ; SD BUS="scsi", SYSFS{vendor}="ICSI", SYSFS{model}="* MMC/SD", \ MODE="0660", GROUP="multicard", NAME="multicard/mmc-sd" # XD Card ; SM BUS="scsi", SYSFS{vendor}="ICSI", SYSFS{model}="* SM", \ MODE="0660", GROUP="multicard", NAME="multicard/xd-sm" ######################################################################### # Siemens USB Data Cable 510 made by http://www.siemens.de/ # Mobil-Connection for Internet over GPRS ######################################################################### BUS="usb", KERNEL="ttyUSB*", SYSFS{idProduct}="2303", \ MODE="0660", GROUP="dip", NAME="handy" ######################################################################### # USB-Drive - Billigteil von: ich bin doch nicht blöd! :-) ######################################################################### BUS="scsi", SYSFS{vendor}="TOSHIBA", SYSFS{model}="MK3021GAS", \ MODE="0660", GROUP="usbdrive", NAME="usbdrive/part/%n" ######################################################################### # Canon EOS 350D nicht hier, sondern ueber hotplug und gphoto2 ansteuern! ######################################################################### # eof #########################################################################
Hinweis für Debian/Etch: prinzipiell kann man diesen Setup auch für Etch verwenden, wenn man genau festgelegte Devices braucht.
Man muss das aber bei Etch nicht unbedingt machen! (da wird eh einiges besser...)
Wichtig: die Syntax von udev hat sich bei Etch geändert (teilweise anderer Operator == bitte Manpage lesen)!
6. /etc/fstab anpassen (Beispiele)
/dev/usbstick /media/usbstick vfat defaults,noauto,gid=222,umask=002,quiet,noexec,nodev,showexec,codepage=850,iocharset=iso8859-15,nosuid 0 0
/dev/medion /media/medion vfat defaults,noauto,gid=333,umask=002,quiet,noexec,nodev,showexec,codepage=850,iocharset=iso8859-15,nosuid 0 0
/dev/multicard/cf-md /media/multicard/cf-md vfat defaults,noauto,gid=333,umask=002,quiet,noexec,nodev,showexec,codepage=850,iocharset=iso8859-15,nosuid 0 0
/dev/multicard/mmc-sd /media/multicard/mmc-sd vfat defaults,noauto,gid=333,umask=002,quiet,noexec,nodev,showexec,codepage=850,iocharset=iso8859-15,nosuid 0 0
/dev/multicard/ms-pro /media/multicard/ms-pro vfat defaults,noauto,gid=333,umask=002,quiet,noexec,nodev,showexec,codepage=850,iocharset=iso8859-15,nosuid 0 0
/dev/multicard/xd-sm /media/multicard/xd-sm vfat defaults,noauto,gid=333,umask=002,quiet,noexec,nodev,showexec,codepage=850,iocharset=iso8859-15,nosuid 0 0
Hinweis: die Option sync habe ich erstmal aus den Mount-Optionen entfernt!
Nach neueren Erkenntnissen, kann diese Option in Zusammenhang mit vfat eine USB-Stick sogar zerstören! Ich habe bis jetzt aber noch nichts negatives festgestellt.
Automounter mit autofs
Festeingebaute Cardreader
Hinweis: momentan teste ich gerade autofs. Ich bin mir noch nicht sicher, ob's soo gut ist...
Bei festeingebauten MultiCardreadern hat man das Problem, dass man den Cardreader eben nicht mal schnell vom Strom/Netz trennen kann (für die automatische Erkennung). Hier könnte man den Automounter zum Zuge kommen lassen. (In Ermangelung eines festeingebauten Gerätes benutze ich mal meinen mobilen Cardreader! - obwohl, an diese Zugriffsart könnte ich mich auch ständig gewöhnen...) Alle Anpassungen beziehen sich auf obrige Anpassungen mit udev.
Als erste Maßnahme wird autofs installiert: apt-get install autofs
Danach erstmal alle /dev/multicard/* Einträge aus der /etc/fstab wieder entfernen (oder auskommentieren).
In der Datei /etc/dev.d/block/multicard.dev werden alle mount und umount Befehle entfernt (oder auskommentiert). Der Rest kann in der Datei bleiben - für ein eventuelles Debugging.
Die Verzeichnisse unter /media/multicard/* werden nicht mehr benötigt, sie stören eher an dieser Stelle. Diese Verzeichnisse werden entfernt und später durch Links ersetzt.
Weiterhin werden noch die zwei folgenden Dateien angepasst:
/etc/auto.master
/var/autofs/usb /etc/auto.usb --timeout=60
/etc/auto.usb
# # This is an automounter map and it has the following format # key [ -mount-options-separated-by-comma ] location # Details may be found in the autofs(5) manpage # multicard_cf-md -fstype=vfat,defaults,noauto,gid=333,umask=002,quiet,noexec,nodev,showexec,codepage=850,iocharset=iso8859-15,nosuid :/dev/multicard/cf-md multicard_mmc-sd -fstype=vfat,defaults,noauto,gid=333,umask=002,quiet,noexec,nodev,showexec,codepage=850,iocharset=iso8859-15,nosuid :/dev/multicard/mmc-sd multicard_ms-pro -fstype=vfat,defaults,noauto,gid=333,umask=002,quiet,noexec,nodev,showexec,codepage=850,iocharset=iso8859-15,nosuid :/dev/multicard/ms-pro multicard_xd-sm -fstype=vfat,defaults,noauto,gid=333,umask=002,quiet,noexec,nodev,showexec,codepage=850,iocharset=iso8859-15,nosuid :/dev/multicard/xd-sm # # eof #
Alle Anpassungen müssen natürlich auf das jeweilige System und auf die eigenen Bedürfnisse abgestimmt werden!
Da momentan bei Sarge vor einem direkten Mounten gewarnt wird
/usr/share/doc/autofs/README.direct, lege ich einfach Links für die jeweiligen Mountpunkte an:
$ ls -l /media/multicard/ lrwxrwxrwx 1 root root 31 2006-02-28 13:40 cf-md -> /var/autofs/usb/multicard_cf-md lrwxrwxrwx 1 root root 32 2006-02-28 13:40 mmc-sd -> /var/autofs/usb/multicard_mmc-sd lrwxrwxrwx 1 root root 32 2006-02-28 13:40 ms-pro -> /var/autofs/usb/multicard_ms-pro lrwxrwxrwx 1 root root 31 2006-02-28 13:40 xd-sm -> /var/autofs/usb/multicard_xd-sm
Hinweis: meine Cards haben alle nur ein Partition!
Falls mehrere Partitionen auf einer Card vorhanden sind,
muss man die ganze Geschichte selbstverständlich anpassen!
Zugriff auf die Mountpunkte geht dann über die Links in /media/multicard/*.
umounten automatisch nach voreingestelltem Timeout, falls kein Zugriff mehr erfolgt.
Hinweis: an besten immer vor entnehmen einer Card den Befehl sync
ausführen!
Ach ja, nach den Anpassungen bitte den autofs-Deamon neu starten: /etc/init.d/autofs restart
externe USB-Platte
Habe mir jetzt auch mal so ein Billigteil zugelegt; aufgeteilt habe ich die Platte in 3 Partitionen: 2x FAT32 und 1x ext2 (für Backupzwecke). Auch hier habe ich mich erstmal für den automounter entschieden. Die Datei /etc/udev/MAIN.rules wurde um eine Regel erweitert und die Datei /etc/dev.d/block/usbdrive.dev wurde neu erstellt.
Zuerst wird die Datei /etc/auto.usb erweitert:
/etc/auto.usb
# # die Datei um folgende Einträge erweitern: # usbdrive_part_1 -fstype=vfat,defaults,noauto,gid=250,umask=002,quiet,noexec,nodev,showexec,codepage=850,iocharset=iso8859-15,nosuid :/dev/usbdrive/part/1 usbdrive_part_2 -fstype=vfat,defaults,noauto,gid=250,umask=002,quiet,noexec,nodev,showexec,codepage=850,iocharset=iso8859-15,nosuid :/dev/usbdrive/part/2 usbdrive_part_3 -fstype=ext2,defaults,noauto :/dev/usbdrive/part/3
Nun nur noch die Symlinks unter /media/usbdrive/* anlegen:
$ ls -l /media/usbdrive/ lrwxrwxrwx 1 root root 31 2006-03-03 15:18 part_1 -> /var/autofs/usb/usbdrive_part_1 lrwxrwxrwx 1 root root 31 2006-03-03 15:18 part_2 -> /var/autofs/usb/usbdrive_part_2 lrwxrwxrwx 1 root root 31 2006-03-03 15:18 part_3 -> /var/autofs/usb/usbdrive_part_3
Zugriff auf die Mountpunkte geht dann über die Links in /media/usbdrive/*.
umounten automatisch nach voreingestelltem Timeout, falls kein Zugriff mehr erfolgt.
Schreibzugriff auf die FAT-Partitionen sollte kein Problem sein, Lesezugriff auf die ext2-Partition auch nicht. Schreibzugriff auf die ext2-Partition bleibt root vorbehalten, was ich auch völlig in Ordnung finde für reine Systembackups.
Hinweis: an besten immer vor abhängen der Platte den Befehl sync
ausführen!
Hinweis: der automounter müllt die Logs ganz schön voll. Bei Verwendung von syslog-ng kann man die Ausgaben ganz gut unterbinden mit einer Erweiterung des f_syslog-Filters (z.B. ... and not match("automount")). Die anderen Logging-Meldungen kann man in den /etc/dev.d/block/*.dev-Dateien beeinflussen.
Und noch ein Tipp zu dem Billigteil: meine Platte besitzt zwei Anschlüsse: einmal Mini-USB (für die Daten) und noch einen Stromanschluss auch über USB; ohne diese extra Stromanschluss geht nichts! Am besten immer erst den Strom anschliessen und dann das Datenkabel - beim Abziehen genau umgekehrt.
weitere Informationen
Spezielle Informationen findest du in den Manpages von addgroup, adduser, udev, mount, hotplug und fstab.Das Arbeiten mit den USB-Geräten sollte in Zukunft gleich viel mehr Freude bereiten! :-)