Installation eines USB-Sticks #

Mehr zum Thema auch auf der Seite UsbStick.

Inzwischen werden viele USB-Speichergeräte anstandslos und sofort erkannt. Man steckt das Gerät ein und fertig. Normalerweise wird das Gerät als Device /dev/sda eingebunden. Da die meisten Medien (ob Speicherkarte, Stick oder Festplatte) eine einzige grosse Partition enthalten, kann man mit

  mkdir /mnt/usbstick
  mount /dev/sda /mnt/usbstick

das Gerät mounten und dann benutzen. -- ThomasBayen

Bei Problemen: #

Das Modul zum Betreiben des USB-Anschlusses ist einkompiliert im Kernel.

Die folgende Anleitung muss mit root-Rechten durchgeführt werden.

Mit modprobe usb-storage kann der Stick in Betrieb genommen werden. Er wird normalerweise als /dev/sda1/ geführt. Man benötigt auch das Modul scsi_mod. Auch das ist normalerweise im Kernel schon vorhanden.

Für das automatische Erkennen beim Reinstecken des Sticks im laufenden Betrieb ist der usbmgr zuständig. Er hat eine eigene Konfigurationsdatei, die man unter /etc/usbmgr/usbmgr.conf findet. das automatische Erkennen beim Reinstecken des Sticks im laufenden Betrieb. Zuständig für so etwas ist der usbmgr. Dort gibt es viele Einträge allermöglichen USB-Geräte. Sie haben die Form vendor 0xZZZZ product 0xZZZZ module <modulliste> oder class 0xZ subclass 0xZ module <modulliste>.

In der Datei /var/log/syslog kann man beiden Hexzahlen für den Hersteller und das Produkt finden. Dort kann man die Versuche sehen, den Stick zu erkennen, und dabei werden einige Angaben zum Stick gemacht. Die Angaben für den vendor, das product, der class und subclass sollte man sich gut merken und trägt sie in die /etc/usbmgr/usbmrg.conf an die entsprechende Stelle ein. Die Einträge sind nach den verschiedenen Geräten wie Scanner, Kameras, usw. gruppiert. Dann muss noch der Befehl update_usbdb usbmgr.conf ausgeführt werden.

Unter Debian gibt es eine Beschreibung in /usr/share/doc/usbmgr/README.gz.

Das hier Beschriebene sollte im Prinzip für alle USB-Geräte gelten, die Speichermedien verwalten, wie z.B. Flash-Reader und Digitalkameras. Siehe Franz'ens SanDiskImageMate, dort stehen auch noch ein paar Tipps.

automatisches Mounten #

Es gibt unter http://wiki.kanotix.net/CoMa.php?CoMa=usb-storage im Kanotix-Wiki ein erstklassiges Skript, das beim einstöpseln eines USB-Storage-Devices dieses automatisch erkennt, alle Partitionen mountet und dann sogar KDE-Icons auf dem Desktop erzeugt.

Das Skript bedurfte bei mir einiger Anpassungen, weil es nicht für Debian-Linux geschrieben wurde:

  • In Debian gibt es keinen usleep-Befehl, Also habe ich an zwei Stellen usleep durch sleep ersetzt (und den Parameter durch 1.000.000 geteilt). Wenn man die Log-Meldungen weiterhin benutzen möchte, muss man SLEEPTIME auf eine ganze Zahl aufrunden. Das verlängert ggf. den Mountvorgang um eine halbe Sekunde, aber damit lebe ich.
  • Als zweite Anpassung habe ich in der Zeile, wo der eigentliche Mount-Befehl für ext2/3-Partitionen durchgeführt wird, "sync" eingefügt:
      us_MOUNTCMD="/bin/mount -t $us_FSTYPE -o user,sync $us_DEVICE $us_MOUNTPOINT"
Dadurch werden die Partitionen so gemountet, dass Änderungen nicht gepuffert werden, sondern jeweils sofort geschrieben werden. Das ist zwar merklich langsamer, aber wesentlich besser, wenn man spontan den Stick wieder herauszieht.
  • Einerseits sind die Namen der Mountpoints (z.B. "sda1") recht nichtssagend und andererseits möchte ich, wenn ich mehrere USB-Storage-Devices besitze, gar nicht den Linux-Devicenamen angezeigt haben, sondern viel mehr, welches Gerät ich eingesteckt habe. Um hier bessere Namen vergeben zu können, bin ich zu dem Schluß gekommen, daß ein Name auf dem Gerät selber abgelegt sein sollte. Hierzu kann man bei ext2/3-Devices am besten das Label nehmen, das man mit e2label setzen kann. Ist ein solches Label eingestellt, ändert sich der Name des Mountpoints. Dazu habe ich die Sektion, in der der Mount-Befehl für ext2/3 steht, durch folgendes ersetzt:
                ext2|ext3)
                        if [ -e "/sbin/e2label" ]; then
                                us_LABEL=$(e2label $us_DEVICE 2>/dev/null)
                                if [ -n "$us_LABEL" ]; then
                                       us_MOUNTPOINT=/mnt/$us_LABEL
                                fi
                        fi
                        us_MOUNTCMD="/bin/mount -t $us_FSTYPE -o user,sync $us_DEVICE $us_MOUNTPOINT"
                        ;;
                reiserfs|jfs|xfs|minix)
                        us_MOUNTCMD="/bin/mount -t $us_FSTYPE -o user,sync $us_DEVICE $us_MOUNTPOINT"
                        ;;
  • Da USB-Medien gerne zum Datenaustausch verwendet werden, werden sie häufiger auch mit einem VFAT-Dateisystem formatiert. Damit man damit auch den Namen setzen kann, muss man das mtools-Paket installieren und kann folgendes in den mount-Teil für vfat einsetzen:
                vfat|auto)
                        if [ -e "/usr/bin/mlabel" ]; then
                                MTOOLSCONF=/etc/mtools.conf  # works for Debian, could be distibution-dependent
                                mv -f $MTOOLSCONF $MTOOLSCONF.orig
                                echo "drive c: file=\"$us_DEVICE\"" >$MTOOLSCONF
                                us_LABEL=$(/usr/bin/mlabel -s c: | cut -d ' ' -f 5 -)
                                mv -f $MTOOLSCONF.orig $MTOOLSCONF
                                if [ $us_LABEL = "label" ]; then
                                        # "volume has no label"-Message?
                                        us_LABEL=""
                                fi
                                if [ -n "$us_LABEL" ]; then
                                       us_MOUNTPOINT="$MOUNTDIR/$us_LABEL"
                                fi
                        fi
                        us_MOUNTCMD="/bin/mount -t vfat -s -o $us_OWNER,shortname=mixed,quiet,sync,umask=0002,user,showexec $us_DEVICE $us_MOUNTPOINT"
                        ;;
  • Damit die Labels auch auf dem Desktop als Name benutzt werden, habe ich den Anfang der Funktion makestorageicon folgendermassen verändert:
      function makeStorageIcon {
          # make an icon (USB stick) on Desktop
          local us_NAME="$us_PARTITION"
          if [ -n "$us_LABEL" ]; then
              us_NAME="$us_LABEL"
          fi
          cat << EOF > $us_XDESKTOPFILE
      [Desktop Entry]
      Name=USB [$us_NAME]
      Type=Link
  • Damit auch das unmounten unter neueren Kerneln klappt, in denen die Devices dynamisch erzeugt werden, habe ich an allen Stellen, an denen umount benutzt wird, "$us_DEVICE" durch "$us_MOUNTPOINT" ersetzt.
  • In neueren Debian-Installationen werden für Mounts Unterverzeichnisse von "/media" verwendet, was IMHO auch Sinn macht, weil der Sinn von "/mnt" immer falsch verstanden wurde und seine Benutzung dadurch recht uneinheitlich ist. Ich habe eine Variable MOUNTDIR am Anfang eingeführt, die ich überall eingesetzt habe, wo "/mnt" steht. Diese habe ich dann auf "/media" gestzt.

Schön wäre es, wenn man die Position der Icons auf dem KDE-Desktop festlegen könnte. Hat da jemand eine Idee?

Das komplette Skript kann ich Interessenten auch gerne zusenden. Ich hoffe jedoch, daß einiges in das Original übernommen wird. -- ThomasBayen

Add new attachment

Only authorized users are allowed to upload new attachments.
« This page (revision-3) was last changed on 13-Nov-2006 16:11 by PeterHormanns