Bagikan drive USB melalui jaringan

8

Saya mencari metode gratis untuk membagikan perangkat USB melalui jaringan. Saya mendapat RaspberryPi (raspbian) yang memiliki perangkat USB yang terhubung. Saya ingin dapat menerima dan mengirim perintah ke perangkat ini dari server Linux saya.

Saya mencoba remserialtetapi saya tidak dapat menghubungkan klien ke server. Saya juga mencoba VirtualHeretetapi gagal

Apakah Anda tahu solusi gratis untuk melakukannya?

EDIT:

Terima kasih untuk tutorial ini, saya mencobanya tetapi saya mendapat masalah:

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 $

apa itu?

PyNico
sumber

Jawaban:

3

Anda dapat menggunakan usbip perangkat lunak ini dan ini adalah cara mengatur perangkat lunak dan menggunakannya di sisi server dan klien

Catatan:

  1. Dalam tutorial ini gunakan server server1.example.com with IP 192.168.0.100dan client client1.example.com with IP 192.168.0.101, keduanya menjalankan Ubuntu Pengaturan ini mungkin berbeda untuk Anda, jadi Anda harus menggantinya jika perlu.

  2. Akun yang digunakan dalam tutorial ini adalah rootdemikian jika suatu perintah tidak berfungsi, gunakan rootatau gunakan sudosebelum perintah

Menginstal Dan Menggunakan USB / IP Di Server

Kita dapat menginstal usbip sebagai berikut:

apt-get install usbip

Setelah itu kami memuat modul kernel usbip:

modprobe usbip

modprobe usbip_common_mod

Untuk memeriksa apakah benar-benar dimuat, jalankan:

lsmod | grep usbip

Outputnya harus sama dengan yang ini:

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

Untuk memastikan bahwa kedua modul dimuat secara otomatis setiap kali Anda mem-boot sistem, Anda dapat menambahkannya ke / etc / modules:

vi /etc/modules

[...]
usbip
usbip_common_mod

Sekarang kita dapat memulai daemon usbip:

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

Sekarang pasang perangkat USB yang ingin Anda ekspor ke server - Saya menggunakan flash drive USB SanDisk di sini.

Jalankan perintah lsusb

untuk menemukan Vendor / Device ID yang sesuai yang berupa:

Bus XXX Device YYY: ID VendorID:DeviceID

Output di server saya adalah sebagai berikut:

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

Vendor / Device ID dari flash drive USB SanDisk saya adalah 0781: 5151.

Sekarang jalankan

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

Seperti yang Anda lihat, Vendor / Device ID dari flash drive USB SanDisk saya (0781: 5151) sesuai dengan BUSID 1-1. Kami membutuhkan ini BUSIDuntuk melampirkan perangkat USB ke server:

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!

Itu saja, kita sekarang dapat menggunakan flash drive USB SanDisk pada klien usbip jarak jauh.

BTW, jika Anda menjalankan ...

netstat -tap

... Anda akan melihat bahwa daemon usbip sedang mendengarkan port 3240

jadi pastikan port ini tidak diblokir oleh firewall Anda:

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

Menginstal Dan Menggunakan USB / IP Pada Klien

Kita perlu menginstal usbip pada klien juga:

sudo apt-get install usbip

Setelah itu kami memuat vhci-hcdmodul kernel:

modprobe vhci-hcd

Untuk memeriksa apakah benar-benar dimuat, jalankan:

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

Untuk memastikan bahwa modul dimuat secara otomatis setiap kali Anda mem-boot sistem, Anda dapat menambahkannya ke /etc/modules:

vi /etc/modules

[...]
vhci-hcd

Sekarang terhubung ke server usbip dan dapatkan daftar perangkat USB yang tersedia:

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

Anda harus menemukan flash drive USB SanDisk di output (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)

Untuk melampirkan perangkat itu ke klien, jalankan:

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

Sekarang jalankan lsusbdan Anda akan menemukan perangkat USB jarak jauh di output pada klien:

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

Anda sekarang dapat menggunakan perangkat USB jarak jauh seolah-olah itu adalah perangkat USB lokal (mis. Pasang, format, tulis, baca formulir, dll.).

Melepaskan Perangkat Remote USB

Perangkat USB jarak jauh dapat dilepas sebagai berikut:

client1:

Lari...

usbip --port

... untuk mengetahui port yang digunakan perangkat remote USB pada klien - dalam hal ini 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>

Kami membutuhkan nomor port untuk melepaskan perangkat:

usbip -d 00

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

port 0 detached

Di server, kami menggunakan BUSID (1-1)untuk mengikat perangkat USB ke sistem lokal (- switch lainnya mengikat perangkat ke sistem lokal sehingga tidak lagi tersedia di jaringan):

server1:

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!

Sekarang kembali ke klien dan periksa apakah perangkat USB jarak jauh masih tersedia:

client1:

Jika semuanya berjalan dengan baik, seharusnya tidak terdaftar lagi:

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

Tautan

http://usbip.sourceforge.net

Sumber tutorial (Sisi Server)

Sumber tutorial (Sisi Klien)

Pikiran Gemuk
sumber
Catatan untuk pengguna Ubuntu Trusty (14.04): Anda akan membutuhkan kernel backported dari Utopic atau yang lebih baru dan mengutak-atik binari. Lihat untuk informasi lebih lanjut bugs.launchpad.net/ubuntu/+source/usbip/+bug/898003 . Sayangnya, setiap versi Ubuntu yang didukung lebih lama cacat dengan bug dan dikirimkan dengan usbip yang tidak berfungsi.
gertvdijk
Periksa jawaban ini sebelum digunakan: askubuntu.com/a/647071/187689
iman