USB-Laufwerk über Netzwerk freigeben

8

Ich suche nach einer kostenlosen Methode, um ein USB-Gerät über das Netzwerk freizugeben. Ich habe ein RaspberryPi (Raspbian), an das ein USB-Gerät angeschlossen ist. Ich möchte in der Lage sein, Befehle von meinem Linux-Server zu empfangen und an dieses Gerät zu senden.

Ich habe es versucht remserial, kann den Client jedoch nicht mit dem Server verbinden. Ich habe es auch versucht, VirtualHereaber es ist abgestürzt

Kennen Sie eine kostenlose Lösung dafür?

EDIT:

Vielen Dank für dieses Tutorial, ich habe es versucht, aber ich habe einige Probleme:

pi@raspberrypi /boot $ zcat /proc/config.gz |grep USBIP
CONFIG_USBIP_CORE=m
CONFIG_USBIP_VHCI_HCD=m
CONFIG_USBIP_HOST=m
# CONFIG_USBIP_DEBUG is not set
pi@raspberrypi /boot $ sudo modprobe usbip-core
pi@raspberrypi /boot $ sudo modprobe usbip-host
pi@raspberrypi /boot $ sudo usbipd -D

pi@raspberrypi /boot $ usbip list -l
Local USB devices
=================
- busid 1-1 (0424:9514)
     1-1:1.0 -> hub
- busid 1-1.1 (0424:ec00)
     1-1.1:1.0 -> smsc95xx
- busid 1-1.3 (0403:6010)
     1-1.3:1.0 -> unknown
     1-1.3:1.1 -> unknown
- busid 1-1.4 (04f2:1126)
     1-1.4:1.0 -> usbhid
- busid 1-1.5 (04f2:1125)
     1-1.5:1.0 -> usbhid
     1-1.5:1.1 -> usbhid

pi@raspberrypi /boot $ sudo usbip --debug  bind -b 1-1.3
usbip: debug: /build/linux-tools-TqR1ks/linux-tools-3.2.17/drivers/staging/usbip/userspace/src/usbip.c:134:[run_command]
running command: `bind'
usbip: debug: /build/linux-tools-TqR1ks/linux-tools-3.2.17/drivers/staging/usbip/userspace/src/usbip_bind.c:162:[unbind_other]
1-1.3:1.0 -> unknown
usbip: debug: /build/linux-tools-TqR1ks/linux-tools-3.2.17/drivers/staging/usbip/userspace/src/usbip_bind.c:162:[unbind_other]
1-1.3:1.1 -> unknown
usbip: debug: /build/linux-tools-TqR1ks/linux-tools-3.2.17/drivers/staging/usbip/userspace/src/utils.c:65:[modify_match_busid]
write "add 1-1.3" to /sys/bus/usb/drivers/usbip-host/match_busid
usbip: debug: /build/linux-tools-TqR1ks/linux-tools-3.2.17/drivers/staging/usbip/userspace/src/usbip_bind.c:101:[bind_usbip]
bind driver at 1-1.3:1.0 failed
usbip: debug: /build/linux-tools-TqR1ks/linux-tools-3.2.17/drivers/staging/usbip/userspace/src/usbip_bind.c:101:[bind_usbip]
bind driver at 1-1.3:1.1 failed
usbip: error: could not bind device to usbip-host
usbip: debug: /build/linux-tools-TqR1ks/linux-tools-3.2.17/drivers/staging/usbip/userspace/src/utils.c:65:[modify_match_busid]
write "del 1-1.3" to /sys/bus/usb/drivers/usbip-host/match_busid
  pi@raspberrypi /boot $ sudo usbip --debug  bind -b 1-1.3:1.1
usbip: debug: /build/linux-tools-TqR1ks/linux-tools-3.2.17/drivers/staging/usbip/userspace/src/usbip.c:134:[run_command]
  running command: `bind'
usbip: debug: /build/linux-tools-TqR1ks/linux-tools-3.2.17/drivers/staging/usbip/userspace/src/usbip_bind.c:143:[unbind_other]
  problem getting device attributes: No such file or directory
usbip: error: could not unbind driver from device on busid 1-1.3:1.1
pi@raspberrypi /boot $

was könnte es sein ?

PyNico
quelle

Antworten:

3

Sie können diesen Software- Uspip verwenden. Auf diese Weise können Sie die Software einrichten und sowohl auf der Server- als auch auf der Clientseite verwenden

Anmerkungen:

  1. Verwenden Sie in diesem Tutorial das server server1.example.com with IP 192.168.0.100und client client1.example.com with IP 192.168.0.101, beide unter Ubuntu. Diese Einstellungen können für Sie unterschiedlich sein, daher müssen Sie sie gegebenenfalls ersetzen.

  2. Das in diesem Lernprogramm verwendete Konto ist also das root, wenn ein Befehl nicht funktioniert, verwenden Sie entweder den rootoder sudoden Befehl vor dem Befehl

Installieren und Verwenden von USB / IP auf dem Server

Wir können usbip wie folgt installieren:

apt-get install usbip

Anschließend laden wir die usbip-Kernelmodule:

modprobe usbip

modprobe usbip_common_mod

Um zu überprüfen, ob sie wirklich geladen wurden, führen Sie Folgendes aus:

lsmod | grep usbip

Die Ausgabe sollte dieser ähnlich sein:

root@server1:~# lsmod | grep usbip
usbip                  15124  0
usbip_common_mod       13605  1 usbip
root@server1:~#

Um sicherzustellen, dass beide Module beim Booten des Systems automatisch geladen werden, können Sie sie zu / etc / modules hinzufügen:

vi /etc/modules

[...]
usbip
usbip_common_mod

Jetzt können wir den usbip-Daemon starten:

root@server1:~# usbipd -D
Bind usbip.ko to a usb device to be exportable!

Schließen Sie nun ein USB-Gerät an, das Sie auf den Server exportieren möchten. Ich verwende hier ein SanDisk-USB-Flash-Laufwerk.

Führen Sie den Befehl aus lsusb

So finden Sie die entsprechende Hersteller- / Geräte-ID in Form von:

Bus XXX Device YYY: ID VendorID:DeviceID

Die Ausgabe auf meinem Server ist wie folgt:

root@server1:~# lsusb
Bus 001 Device 002: ID 0781:5151 SanDisk Corp. Cruzer Micro Flash Drive
Bus 001 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub

Die Hersteller- / Geräte-ID meines SanDisk USB-Flash-Laufwerks lautet 0781: 5151.

Jetzt renn

usbip_bind_driver --list
root@server1:~# usbip_bind_driver --list
List USB devices
 - busid 1-1 (0781:5151)
     1-1:1.0 -> usb-storage

Wie Sie sehen, entspricht die Hersteller- / Geräte-ID meines SanDisk USB-Flash-Laufwerks (0781: 5151) der BUSID 1-1. Wir benötigen dies BUSID, um das USB-Gerät an den Server anzuschließen:

root@server1:~# usbip_bind_driver --usbip 1-1
** (process:765): DEBUG:  1-1:1.0       -> usb-storage
** (process:765): DEBUG: unbinding interface
** (process:765): DEBUG: write "add 1-1" to /sys/bus/usb/drivers/usbip/match_busid
** Message: bind 1-1 to usbip, complete!

Das war's, wir können jetzt das SanDisk USB-Flash-Laufwerk auf einem Remote-USB-Client verwenden.

Übrigens, wenn du rennst ...

netstat -tap

... Sie sollten sehen, dass der USB-Dämon zuhört port 3240

Stellen Sie daher sicher, dass dieser Port nicht von Ihrer Firewall blockiert wird:

root@server1:~# netstat -tap
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 *:ssh                   *:*                     LISTEN      537/sshd
tcp        0      0 *:3240                  *:*                     LISTEN      762/usbipd
tcp        0     52 server1.example.com:ssh 192.168.0.199:4024      ESTABLISHED 667/0
tcp6       0      0 [::]:ssh                [::]:*                  LISTEN      537/sshd

Installieren und Verwenden von USB / IP auf dem Client

Wir müssen usbip auch auf dem Client installieren:

sudo apt-get install usbip

Danach laden wir das vhci-hcdKernelmodul:

modprobe vhci-hcd

Führen Sie Folgendes aus, um zu überprüfen, ob es wirklich geladen wurde:

root@client1:~# lsmod | grep vhci_hcd
vhci_hcd               19800  0
usbip_common_mod       13605  1 vhci_hcd

Um sicherzustellen, dass das Modul beim Booten des Systems automatisch geladen wird, können Sie es hinzufügen zu /etc/modules:

vi /etc/modules

[...]
vhci-hcd

Stellen Sie nun eine Verbindung zum USB-Server her und erhalten Sie eine Liste der verfügbaren USB-Geräte:

    usbip -l 192.168.0.100
(192.168.0.100 is the IP address of the usbip server.)

Sie sollten das SanDisk USB-Flash-Laufwerk im Ausgang finden (BUSID 1-1):

root@client1:~# usbip -l 192.168.0.100
- 192.168.0.100
     1-1: SanDisk Corp. : Cruzer Micro Flash Drive (0781:5151)
        : /sys/devices/pci0000:00/0000:00:07.2/usb1/1-1
        : (Defined at Interface level) (00/00/00)
        :  0 - Mass Storage / SCSI / Bulk (Zip) (08/06/50)

Führen Sie Folgendes aus, um das Gerät an den Client anzuschließen:

root@client1:~# usbip -a 192.168.0.100 1-1
8 ports available
port 0 attached

Führen lsusbSie nun aus und Sie sollten das entfernte USB-Gerät in der Ausgabe auf dem Client finden:

root@client1:~# lsusb
Bus 001 Device 002: ID 0781:5151 SanDisk Corp. Cruzer Micro 256/512MB Flash Drive
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

Sie können das Remote-USB-Gerät jetzt so verwenden, als wäre es ein lokales USB-Gerät (z. B. mounten, formatieren, schreiben, lesen usw.).

Entfernen eines Remote-USB-Geräts

Ein entferntes USB-Gerät kann wie folgt getrennt werden:

client1:

Lauf...

usbip --port

... um herauszufinden, welchen Port das entfernte USB-Gerät auf dem Client verwendet - in diesem Fall Port 00:

root@client1:~# usbip --port
8 ports available

Port 00: <Port in Use> at High Speed(480Mbps)
       SanDisk Corp. : Cruzer Micro 256/512MB Flash Drive (0781:5151)
       1-1 -> usbip://192.168.0.100:3240/1-1  (remote devid 00010002 (bus/dev 001/002))
       1-1:1.0 used by usb-storage
           /sys/class/bsg/1:0:0:0/device
           /sys/class/scsi_device/1:0:0:0/device
           /sys/class/scsi_disk/1:0:0:0/device
           /sys/class/scsi_host/host1/device
           /sys/class/usb_endpoint/usbdev1.4_ep02/device
           /sys/class/usb_endpoint/usbdev1.4_ep81/device
           /sys/block/sdb/device
Port 01: <Port Available>
Port 02: <Port Available>
Port 03: <Port Available>
Port 04: <Port Available>
Port 05: <Port Available>
Port 06: <Port Available>
Port 07: <Port Available>

Wir benötigen die Portnummer, um das Gerät zu trennen:

usbip -d 00

root@client1:~# usbip -d 00
8 ports available

port 0 detached

Auf dem Server verwenden wir das BUSID (1-1), um das USB-Gerät an das lokale System zu binden (der Schalter --other bindet das Gerät an das lokale System, sodass es nicht mehr über das Netzwerk verfügbar ist):

Server 1:

usbip_bind_driver --other 1-1

root@server1:~# usbip_bind_driver --other 1-1
** (process:7333): DEBUG: write "del 1-1" to /sys/bus/usb/drivers/usbip/match_busid
** Message: bind 1-1 to other drivers than usbip, complete!

Gehen Sie nun zurück zum Client und prüfen Sie, ob das Remote-USB-Gerät noch verfügbar ist:

client1:

Wenn alles gut geht, sollte es nicht mehr aufgelistet werden:

root@client1:~# lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub 

Links

http://usbip.sourceforge.net

Quelle des Tutorials (Serverseite)

Quelle des Tutorials (Client-Seite)

Fat Mind
quelle
Hinweis für Benutzer von Ubuntu Trusty (14.04): Sie benötigen einen Backport-Kernel von Utopic oder neuer und müssen mit den Binärdateien herumspielen. Weitere Informationen finden Sie unter bugs.launchpad.net/ubuntu/+source/usbip/+bug/898003 . Jede ältere unterstützte Ubuntu-Version ist leider fehlerhaft und wird mit nicht funktionierendem USB-Stick ausgeliefert.
Gertvdijk
Überprüfen Sie diese Antwort vor dem Gebrauch: askubuntu.com/a/647071/187689
Iman