Es gibt viele verschiedenartige Speichermedien, die an USB angeschlossen werden, z.B. LinuxHardware/DigitalKameras oder LinuxHardware/UsbSpeichermedien. Diese Speichermedien basieren alle auf dem gleichen Prinzip und auch das Einbinden ins System verläuft nahezu gleich. Dies wird im Folgenden beschrieben.
Inhaltsverzeichnis
USB Speichermedien in Linux einbinden
Zuerst muss das Kernel-Modul usb_storage (USB support -> USB Device Class drivers -> USB Mass Storage support) und evtl. Abhängigkeiten geladen werden, dann kann das Dateisystem des Geräts gemounted werden:
modprobe usb_storage mount /dev/sda1 /mnt/myusbstorage # oder für CD-Laufwerke: mount /dev/scd0 /mnt/usbcd
Man kann usb_storage auch direkt in den Kernel kompilieren. Dann muss man das Modul usb_storage nicht mit modprobe geladen werden. Außerdem muss im Kernel SCSI Support und SCSI disk support aktiviert sein. Bei vielen Distributionen ist dies automatisch der Fall. Unter USB findet sich ein usbdevfs für USB Medien. Dieses darf aber auf keinen Fall aktiviert sein, wenn man /dev Filesystem (unter File Systems -> Pseudo Filesystems) aktiviert hat, dieses braucht man allerdings unbedingt in 99% der Fälle.
Bei manchen Kartenlesern muss die Kerneloption "Probe all LUNs on each SCSI device" gesetzt werden (z.B. Hama CardReaderWriter 6 in 1).
Eine ausführliche Anleitung liefert das Buch The Linux USB sub-system von Brad Hards.
Wenn man bei einem Multi-Speicherkartenleser und Verwendung von udev das Problem hat, daß auf die Speicherkarten nur zugegriffen werden kann, wenn diese beim Booten des Rechners oder Anschließen des Kartenleser in dem entsprechenden Slot eingesteckt waren und ansonsten eine Fehlermeldung kommt, die besagt, daß /dev/sd?x kein gültiges blockorientiertes Gerät sei liegt dieses daran, daß udev für jeden Slot des Kartenlesers standardmäßig nur das jeweilige Device /dev/sd? anlegt, wenn es kein eingestecktes Medium mit Partitionstabelle findet. Um dieses zu umgehen und für alle möglichen Partitionen die jeweiligen Blockdevices gleich anzulegen fügt man folgende Zeile zu den auszuführenden Regeln (bei Debian z.B. in /etc/udev/udev.rules) für udev hinzu:
#create all blockdevices for external card reader BUS=="usb", KERNEL=="sd?", NAME{all_partitions}="%k"
Weit verbreitet ist auch der gnome-volume-manager. Obwohl hauptsächlich für Gnome gedacht, lässt sich seine Funktionalität auch unter anderen Window-Managern nutzen.
Anmerkungen
Manche Distributionen haben diesen Schritt mittels HotPlug automatisiert, so dass man direkt ohne weitere Schritte auf die Daten zugreifen kann.
Hierbei ist zu beachten, dass das Laden von Kernel-Modulen nur als root möglich ist. Alternativ kann man auch dafür sorgen, dass das Modul gleich beim booten geladen wird. Das Modul erzeugt dann das Gerät /dev/sd(x). Sollten sich keine anderen SCSI Geräte oder ähnliches (wie z.B. IDE-Brenner oder Parallelport-Scanner, die über eine SCSI-Emulation angesprochen werden) im System befinden, ist /dev/sda das Mittel der Wahl. Ansonsten ist Probieren angesagt oder man schaut sich mal /proc/scsi/scsi an.
Auch haben einige der Speichermedien das Problem, dass sie mit einem proprietären Dateisystem arbeiten. Dies kann man meist umgehen, in dem man einfach ein Dateisystem seiner Wahl auf dem Gerät erzeugt, also z.B. vfat, damit es auch unter Windows lesbar bleibt. Wenn das fehlschlägt, bieten die meisten Geräte wie z.B. Kameras die Möglichkeit, sich neu zu formatieren oder man formatiert unter Windows mit dem entsprechenden Treiber neu. Allerdings: Wenn ich hier schreibe "kann man meist" oder "die meisten Geräte", dann meine ich das auch so! Deshalb sollte man sich vorher vergewissern ob die Formatierung rückgängig gemacht werden kann, falls das Gerät damit nicht zurecht kommt.
xD Picture Card
Um eine xD-Card zu nutzen muss man die Karte als msdos (FAT16) mounten.
SD-Karten und Schreibschutz
Die allermeisten USB-Sticks haben mittlerweile keinen Schreibschutz per Schalter mehr (Ausnahme: Trekstor CS [...]). Falls man ihn für selbstgebackene Live-Cds oder Firmware aber doch lieber hätte, kann eine SD-Karte (Secure Digital) und ein kleiner Kartenleser helfen. Man sollte sich aber nicht darauf verlassen, dass der Schreibschutz von SD-Karten beim Einbinden tatsächlich wirksam wird. Wenn der Kartenleser (wie z.B. der genannte Hama CardReader 6 in 1) die Plastiklasche ("Lock") gar nicht detektiert, bleibt das Medium beschreibbar. In diesem Fall ist kein echter Hardware-Schreibschutz vorhanden. Also vor dem Kauf das Gerät vorher genau anschauen oder ausprobieren. Gerät(e), die den Schreibschutz erkennen: Carat electronics Card Reader (SD-/SDHC und MMC).
Tips
USB Stick nur noch Readonly
Der USB Stick (z.b in Ubunut9.1) wird unter Gnome nur noch als ReadOnly gemoutet, kein schreiben möglich. Ursache kleine defekte im FAT System des Sticks, man erkennt es aber nicht, kein Alarm. Erkennen kann man es nur im Terminal mit dem Befehl dmesg. Mit dosfsck auf das Gerät brachte aber leider kein Erfolg. Ich habe es neu formatiert.
Fragen
Wie kann ein bestimmtes Gerät immer auf denselben Mountpoint legen? Ich habe hier einen CF-Adapter und einen USB-Stick, die beide per usb-storage gemountet werden sollen; das erste von den beiden, das eingesteckt wird, bekommt immer sda, das zweite sdb. Wie kann ich jetzt unabhängig davon den USB-Stick immer auf /mnt/usb-stick mounten? --JoergHoh
- Die Geräte haben meist Seriennummern, damit kannst Du (bzw. hotplug) jedes genau erkennen.
- Du kannst probieren, in der fstab nach dem Label der Partition mounten zu lassen.
Ich benutze SuSE 8.2 und einen Memory-Solution Memory-Stick, mein usb funktioniert mit einem Scanner und einer Kamera wunderbar. Wenn ich allerdings den Memory-Stick reinstecke bleibt mein usb-storage Modul mit einem (initializing) hängen und Befehle wie rchotplug restart bleiben auch hängen. Ein less /proc/scsi/scsi zeigt mir eine usb flash-disk mit direct access an, mounten von dev/sda1oder ein fdisk -l /dev/sda bleibt auch hängen.
Folgender WorkAround ist möglich:
- Dem Kernel mit einer zusätzlichen Bootoption auf die Sprünge helfen. Dazu in der Datei /boot/grub/menu.lst den Eintrag pci=noacpi zufügen. Bitte Vorsicht, wenn man nicht weiß, was man tut, könnte es passieren, dass der Rechner danach nicht mehr bootet.
- im der Datei /etc/sysconfig/hotplug den Eintrag: HOTPLUG_USB_USE_USBMODULES="yes" auf: "no"setzen
Ich habe beide WorkArounds (auch kombiniert) ausprobiert und habe immer noch das gleiche Problem, auch ein cat /proc/bus/usb/devices bleibt hängen und liefert keine Ausgabe. Vielleicht liegt es ja an der Reihenfolge der Usb-Module, die ausprobiert werden. Und vielleicht weiss da jemand auch Rat wie man die Reihenfolge tauschen könnte. Im Moment habe ich die Standardreihenfolge HOTPLUG_USB_HOSTCONTROLLER_LIST="ehci-hcd ohci-hcd uhci-hcd usb-uhci uhci usb-ohci ehci-hcd" eingetragen. Danke
Nachdem nun ein neuer Kernel(2.4.21) da ist habe ich auch eine Teillösung des Problems erreicht:
- Ich habe mir die Quellen von kernel.org runtergeladen, konfiguriert und kompiliert, das mache ich immer mal, wenn es einen aktuelleren Kernel gibt als den, der bei der Dirstribution dabei war. Nun funktioniert der usb-Stick und wird als usb-mass-storage einwandfrei erkannt und ich kann /dev/sda1 mounten.
- Ich habe allerdings nun ein grosses Problem, der Datenträger ist schreibgeschützt und ich kann ihn nicht beschreiben oder formatieren, ich sehe eine Passid.exe win32 Datei und komme ohne Windows nicht weiter. Auch ein mount -o rw,remount hilft nicht weiter, formatieren oder neu partitionieren kann ich das Ding auch nicht. Jetzt suche ich nach einer Möglichkeit den Passwortschutz zu deaktivieren. Bis jetzt ohne Erfolg.
Nachdem hotplug den USB-Stick erkannt hat (Icon auf dem Desktop) in einer Konsole 'fdisk /dev/sdx' (x steht für das SCSI device, einfach mal 'cat /etc/fstab' ausführen um den Buchstaben herauszufinden) eingeben, die Partition löschen und neu anlegen, als FAT16 und bootable kennzeichnen und dann die Partition formatieren. Vielleicht geht das Formatieren auch ohne Neuanlegen der Partition.
Eine rw-Freischaltung für Linux ist mit dem beiliegendem Windows-98-UMSD-Utility möglich, vorgehen wie folgt:
1. Inbetriebnahme unter Windows 98, Starten des UMSD-Utilities
2. Einstellung:
- UMSD: Public Area Only --> Resize (Neuformatierung)
damit wird vermutlich der gesicherte Bereich des Sticks komplett in den ungesicherten Bereich überführt, so daß der Memory-Stick für Linux rw-freigeschalten ist.
Anschließend getestet mit RedHat-Linux 8.0 (mount /dev/sda1 /mnt/usb1, sda1 und usb1 ist von der eigenen Konfiguration abhängig)
Wie erreicht man, daß wenn man einen USB Memory-Stick einschiebt, auf dem Desktop (KDE3) ein Icon auftaucht ?
Und: Wie kann man im Konqueror ein neues Device fuer ein USB-Drive einrichten? Rechtsklick/new/devices/harddisk zeigt zwar einen Dialog an, aber was auch immer ich da eingebe, fuehrt nur zu der Fehlermeldung "unknown device <devicename>".
- Wo im Konqueror willst Du das machen?
- devices:/
Kennt jemand ein Tool wie bei SuSE Plugger, das das Vorhandensein von USB Geräten überwacht und bei Bedarf mountet?
das sollte mit autofs funktionieren
http://wiki.kanotix.net/CoMa.php?CoMa=usb-storage bietet ebenfalls ein "Plug & Pray" Lösung an, die sogar Icons auf den Desktop zaubert. Setzt allerdings HotPlug voraus, welches sich mit usbmgr beisst.
Siehe auch
usbmount
Für Debian (und auch dessen Abkömmlinge) gibt es jetzt usbmount. Man braucht dazu nur noch udev und dann werden sämtliche USB-Speichermedien auch parallel ohne weiteres zutun gemountet. Anstecken und es ist ein weiteres Laufwerk verfügbar. Es ist auch egal welches Filesystem verwendet wird wenn man die benötigten Filesysteme in der Konfigurationsdatei eingetragen hat (Zu finden unter /etc/usbmount/usbmount.conf)
Weitere Infos unter
Anmerkung zu USBmount: USBmount wird nicht mehr aktualisiert und ist auch nur dann sinnvoll, wenn man den USB-Stick z.B. als /media/usb0 ansprechen will. Die durch udev gemounteten Sticks werden über deren Label gemountet, z.B. /media/Mein_Stick, falls der USB-Stick Mein_Stick heißt.