Der Universal Serial Bus (USB) wird von vielen externen Speichern benutzt: Festplatten, USB-Thumbdrives sowie von CD- und DVD-Brennern. FreeBSD bietet Unterstützung für Geräte mit USB 1.x, 2.0 und 3.0.
Die Unterstützung für USB 3.0 ist mit einiger Hardware, einschließlich Haswell (Lynx Point) Chipsätzen, nicht kompatibel. Wenn FreeBSD beim Booten mit dem Fehler failed with error 19 abbricht, müssen Sie xHCI/USB3 im BIOS deaktivieren.
Unterstützung für USB-Massenspeicher ist
im GENERIC
-Kernel enthalten. Für einen
angepassten Kernel müssen die nachstehenden Zeilen in der
Kernelkonfigurationsdatei enthalten sein:
device scbus # SCSI bus (required for ATA/SCSI) device da # Direct Access (disks) device pass # Passthrough device (direct ATA/SCSI access) device uhci # provides USB 1.x support device ohci # provides USB 1.x support device ehci # provides USB 2.0 support device xhci # provides USB 3.0 support device usb # USB Bus (required) device umass # Disks/Mass storage - Requires scbus and da device cd # needed for CD and DVD burners
FreeBSD benutzt den umass(4)-Treiber, der das
SCSI-Subsystem verwendet um auf
USB-Geräte zuzugreifen. Da alle
USB-Geräte vom System als
SCSI-Geräte erkannt werden, dürfen Sie
nicht device atapicam
in die Kernelkonfigurationsdatei aufnehmen, wenn es sich bei
dem Gerät um einen CD- oder
DVD-Brenner handelt.
Der übrige Abschnitt beschreibt, wie Sie überprüfen können ob ein USB-Gerät von FreeBSD erkannt wird und wie Sie das Gerät so konfigurieren, dass es verwendet werden kann.
Um die USB-Konfiguration zu testen,
schließen Sie das USB-Gerät an.
Verwenden Sie dmesg
um zu überprüfen, ob
das Gerät in den Systemmeldungen erscheint. Dies sollte in
etwa so aussehen:
umass0: <STECH Simple Drive, class 0/0, rev 2.00/1.04, addr 3> on usbus0 umass0: SCSI over Bulk-Only; quirks = 0x0100 umass0:4:0:-1: Attached to scbus4 da0 at umass-sim0 bus 0 scbus4 target 0 lun 0 da0: <STECH Simple Drive 1.04> Fixed Direct Access SCSI-4 device da0: Serial Number WD-WXE508CAN263 da0: 40.000MB/s transfers da0: 152627MB (312581808 512 byte sectors: 255H 63S/T 19457C) da0: quirks=0x2<NO_6_BYTE>
Fabrikat, Gerätedatei (da0
),
Geschwindigkeit und Kapazität werden je nach Gerät
unterschiedlich sein.
Da ein USB-Gerät als
SCSI-Gerät erkannt wird, kann
camcontrol
benutzt werden, um die mit dem
System verbundenen USB-Massenspeicher
anzuzeigen:
#
camcontrol devlist
<STECH Simple Drive 1.04> at scbus4 target 0 lun 0 (pass3,da0)
Alternativ kann usbconfig
benutzt
werden, um die Geräte aufzulisten. Weitere Informationen zu
diesem Kommando finden Sie in usbconfig(8).
#
usbconfig
ugen0.3: <Simple Drive STECH> at usbus0, cfg=0 md=HOST spd=HIGH (480Mbps) pwr=ON (2mA)
Wenn das Gerät noch nicht formatiert ist, finden Sie in
Abschnitt 17.2, „Hinzufügen von Laufwerken“ Informationen, wie Sie
USB-Laufwerke formatieren und Partitionen
einrichten. Wenn das Laufwerk bereits ein Dateisystem
enthält, kann es von root
nach den Anweisungen in
Abschnitt 3.7, „Anhängen und Abhängen von Dateisystemen“ eingehängt werden.
Aus Sicherheitsgründen sollten Sie Benutzern, denen Sie
nicht vertrauen, das Einhängen (z.B. durch die unten
beschriebene Aktivierung von
vfs.usermount
) beliebiger Medien
verbieten. Die meisten Dateisysteme wurden nicht
entwickelt, um sich vor böswilligen Geräten zu
schützen.
Um auch normalen Anwendern das Einhängen des Laufwerks zu
gestatten, könnten Sie beispielsweise mit pw(8) alle
potentiellen Benutzer dieser Gerätedateien in die Gruppe
operator
aufnehmen.
Außerdem muss sichergestellt werden, dass operator
Schreib- und Lesezugriff auf diese Gerätedateien haben.
Hierfür werden die folgenden Zeilen in
/etc/devfs.rules
hinzugefügt:
[localrules=5] add path 'da*' mode 0660 group operator
Verfügt das System über interne SCSI-Laufwerke, so verändern Sie die zweite Zeile wie folgt:
add path 'da[3
-9]*' mode 0660 group operator
Dies wird die ersten drei
SCSI-Laufwerke (da0
bis da2
) davon ausschließen, in die
Gruppe operator
aufgenommen zu werden. Ersetzen Sie 3
durch die Anzahl der SCSI-Laufwerke.
Weitere Informationen zu dieser Datei finden Sie in
devfs.rules(5).
Aktivieren Sie nun die Regeln
in /etc/rc.conf
:
devfs_system_ruleset="localrules"
Als nächstes müssen Sie das System anweisen, auch
normalen Benutzern das mounten von Dateisystemen zu erlauben,
indem Sie die folgende Zeile in
/etc/sysctl.conf
hinzufügen:
vfs.usermount=1
Da diese Einstellung erst nach einem Neustart wirksam
wird, können Sie diese Variable mit sysctl
auch direkt setzen:
#
sysctl vfs.usermount=1
vfs.usermount: 0 -> 1
Zuletzt müssen Sie noch ein Verzeichnis anlegen, in
das das USB-Laufwerk eingehängt werden
soll. Dieses Verzeichnis muss dem Benutzer gehören, der das
USB-Laufwerk in den Verzeichnisbaum
einhängen will. Dazu legen Sie als root
ein
Unterverzeichnis
/mnt/
an, wobei Sie username
username
durch den Login des jeweiligen Benutzers sowie
usergroup
durch die primäre
Gruppe des Benutzers ersetzen:
#
mkdir /mnt/
username
#
chown
username
:usergroup
/mnt/username
Wenn Sie nun beispielsweise einen
USB-Stick
anschließen, wird automatisch die Gerätedatei
/dev/da0s1
erzeugt. Ist das Gerät mit
einem FAT-Dateisystem formatiert, kann es
der Benutzer mit dem folgenden Befehl in den Verzeichnisbaum
einhängen:
%
mount -t msdosfs -o -m=644,-M=755 /dev/da0s1 /mnt/
username
Bevor das Gerät entfernt werden kann, muss es abgehängt werden:
#
umount /mnt/
username
Nach Entfernen des Geräts stehen in den Systemmeldungen Einträge, ähnlich der folgenden:
umass0: at uhub3, port 2, addr 3 (disconnected) da0 at umass-sim0 bus 0 scbus4 target 0 lun 0 da0: <STECH Simple Drive 1.04> s/n WD-WXE508CAN263 detached (da0:umass-sim0:0:0:0): Periph destroyed
autofs(5) unterstützt das automatische Einhängen von Wechselmedien beginnend mit FreeBSD 10.2-RELEASE.
Damit USB-Geräte automatisch
eingehängt werden, muss der Kommentar für folgende Zeile in
/etc/auto_master
entfernt werden:
/media -media -nosuid
Anschließend fügen Sie folgende Zeilen in
/etc/devd.conf
hinzu:
notify 100 { match "system" "GEOM"; match "subsystem" "DEV"; action "/usr/sbin/automount -c"; };
Falls autofs(5) und devd(8) bereits ausgeführt werden, müssen Sie die Konfiguration neu einlesen:
#
service automount reload
#
service devd restart
autofs(5) wird beim Booten automatisch gestartet,
wenn Sie folgende Zeile in /etc/rc.conf
hinzufügen:
autofs_enable="YES"
Damit autofs(5) funktioniert, muss devd(8) aktiviert sein, was aber in der Voreinstellung der Fall ist.
Starten Sie jetzt die Dienste:
#
service automount start
#
service automountd start
#
service autounmountd start
#
service devd start
Jedes Dateisystem, das automatisch eingehängt werden kann,
erscheint als ein Verzeichnis unterhalb von
media
. Das Verzeichnis wird nach dem
Dateisystemlabel benannt, bzw. nach dem Gerätenamen, falls
kein Label existiert.
Das Dateisystem wird transparent beim ersten Zugriff in den Verzeichnisbaum eingehängt und auch nach gewisser Zeit der Inaktivität wieder ausgehängt. Laufwerke können auch manuell ausgehängt werden:
#
automount -fu
Diese Methode wird in der Regel bei Speicherkarten und USB-Sticks verwendet. Sie funktioniert aber mit allen Blockgeräten, einschließlich optischen Laufwerken und iSCSI-LUNs.
Der cfumass(4)-Treiber ist ein USB Geräte-Modus-Treiber und steht mit FreeBSD 12.0 zur Verfügung.
Auf USB-OTG-kompatibler Hardware, wie in eingebetteten Systemen, kann der FreeBSD USB-Stack im Geräte-Modus laufen. Der Geräte-Modus ermöglicht es dem Rechner, verschiedene Arten von USB-Geräteklassen zu präsentieren, einschließlich serieller Schnittstellen, Netzwerkadapter und Massenspeicher. Ein USB-Host, beispielsweise ein Laptop oder Desktop-Rechner, kann darauf wie auf ein physikalisches USB-Gerät zugreifen.
Je nach angeschlossener Hardware, ermöglicht das usb_template(4) Kernelmodul es dem USB-Stack, automatisch zwischen Host- und Geräteseite umzuschalten. Das Anschließen eines USB-Gerätes an den USB-OTG-Port bewirkt, dass FreeBSD in den Geräte-Modus wechselt.
Was FreeBSD dem USB-Host präsentiert,
hängt von der sysctl-Variablen
hw.usb.template
ab. Eine Liste der
verfügbaren Werte finden Sie in usb_template(4). Damit
der Host die geänderte Konfiguration erkennt, muss entweder
das Gerät getrennt und wieder angeschlossen, oder der
USB-Bus neu gescannt werden. Wenn auf dem
Host FreeBSD läuft, können Sie usbconfig(8)
reset
benutzen. Dieser Befehl muss nach
dem Laden von usb_template.ko
erfolgen,
falls der USB-Host bereits am
USB-OTG-Port
angeschlossen war.
Die sysctl-Variable hw.usb.template
ist
in der Voreinstellung auf 0 gesetzt, so dass FreeBSD als
USB-Massenspeicher funktioniert. Dazu
müssen die beiden Kernelmodule usb_template(4) und
cfumass(4) geladen sein. cfumass(4) ist die
Schnittstelle zum CTL-Subsystem, die auch für
iSCSI- und Fibre Channel-Targets
benutzt wird. Auf der Host-Seite können
USB-Massenspeicher nur auf eine einzelne
LUN (LUN 0)
zugreifen.
USB-Massenspeicher benötigen keinen
aktiven ctld(8)-Daemon, obwohl er bei Bedarf verwendet
werden kann. Dies unterscheidet sich von
iSCSI. So gibt es zwei Möglichkeiten,
ein Target zu konfigurieren: ctladm(8) und ctld(8).
Beide erfordern, dass das cfumass.ko
Kernelmodul geladen ist. Das Modul kann wie folgt geladen
werden:
#
kldload cfumass
Wenn cfumass.ko
nicht im Kernel
enthalten ist, kann das Modul beim Booten über
/boot/loader.conf
geladen werden:
cfumass_load="YES"
Eine LUN kann auch ohne den ctld(8)-Daemon erstellt werden:
#
ctladm create -b block -o file=/data/target0
Damit wird dem USB der Inhalt des
Abbilds /data/target0
als
LUN präsentiert. Die Datei muss vor dem
Ausführen des Befehls vorhanden sein. Um die
LUN beim Systemstart zu konfigurieren,
fügen Sie den Befehl in /etc/rc.local
hinzu.
ctld(8) kann ebenfalls verwendet werden, um
LUNs zu verwalten. Erstellen Sie
/etc/ctl.conf
und fügen Sie eine Zeile in
/etc/rc.conf
hinzu, um sicherzustellen,
dass ctld(8) beim Booten automatisch gestartet wird.
Danach starten Sie den Daemon.
Dies ist ein Beispiel für eine einfache
/etc/ctl.conf
Konfigurationsdatei.
ctl.conf(5) enthält eine ausführliche Beschreibung der
einzelnen Optionen.
target naa.50015178f369f092 { lun 0 { path /data/target0 size 4G } }
Dieses Beispiel erstellt ein Target mit einer einzigen
LUN.
naa.50015178f369f092
ist eine Gerätekennung
aus 32 zufälligen, hexadezimalen Ziffern. Die
path
-Zeile definiert den vollständigen Pfad
einer Datei oder eines zvols, welche als Backend für die
LUN benutzt wird. Die Konfigurationsdatei
muss vor dem Start von ctld(8) existieren. Die zweite
Zeile ist optional und gibt die Größe der
LUN an.
Fügen Sie folgende Zeile in
/etc/rc.conf
hinzu, um den
ctld(8)-Daemon beim Booten zu starten:
ctld_enable="YES"
Um ctld(8) zu starten, führen Sie dieses Kommando aus:
#
service ctld start
Beim Start liest der ctld(8)-Daemon
/etc/ctl.conf
ein. Wenn diese Datei nach
dem Start des Daemons bearbeitet wird, können Sie sie erneut
einlesen, damit die Änderungen direkt wirksam sind:
#
service ctld reload
Wenn Sie Fragen zu FreeBSD haben, schicken Sie eine E-Mail an
<de-bsd-questions@de.FreeBSD.org>.
Wenn Sie Fragen zu dieser Dokumentation haben, schicken Sie eine E-Mail an
<de-bsd-translators@de.FreeBSD.org>.