= 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