네트워크를 통해 USB 드라이브 공유


8

네트워크를 통해 USB 장치를 공유하는 무료 방법을 찾고 있습니다. USB 장치가 연결된 RaspberryPi (raspbian)가 있습니다. Linux 서버에서이 장치로 명령을 받고 보낼 수 있기를 원합니다.

시도 remserial했지만 클라이언트를 서버에 연결할 수 없습니다. 나도 시도 VirtualHere했지만 추락

무료 솔루션을 알고 있습니까?

편집하다 :

이 튜토리얼의 Thx, 나는 그것을 시도했지만 몇 가지 문제가 있습니다.

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 $

뭐가 될수 있었는지 ?

답변:


3

이 소프트웨어 usbip을 사용할 수 있으며 이것이 소프트웨어 를 설정하고 서버와 클라이언트 측 모두에서 사용하는 방법입니다

노트:

  1. 이 튜토리얼에서는 server server1.example.com with IP 192.168.0.100and client client1.example.com with IP 192.168.0.101, Ubuntu를 실행하는 두 가지 설정을 사용할 수 있습니다.이 설정은 사용자마다 다를 수 있으므로 적절한 위치에서 바꾸어야합니다.

  2. 또한이 튜토리얼에서 사용 된 계정 root은 명령이 작동하지 않는 경우 명령을 사용 root하거나 sudo명령 전에 사용합니다

서버에서 USB / IP 설치 및 사용

다음과 같이 usbip을 설치할 수 있습니다 :

apt-get install usbip

그런 다음 usbip 커널 모듈을로드합니다.

modprobe usbip

modprobe usbip_common_mod

실제로로드되었는지 확인하려면 다음을 실행하십시오.

lsmod | grep usbip

출력은 다음과 유사해야합니다.

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

시스템을 부팅 할 때마다 두 모듈이 모두 자동으로로드되도록하려면 / etc / modules에 추가하면됩니다.

vi /etc/modules

[...]
usbip
usbip_common_mod

이제 usbip 데몬을 시작할 수 있습니다 :

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

이제 서버로 내보내려는 USB 장치를 연결하십시오-SanDisk USB 플래시 드라이브를 사용하고 있습니다.

명령을 실행 lsusb

다음과 같은 형식으로 해당 공급 업체 / 장치 ID를 찾습니다.

Bus XXX Device YYY: ID VendorID:DeviceID

내 서버의 출력은 다음과 같습니다.

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

SanDisk USB 플래시 드라이브의 공급 업체 / 장치 ID는 0781 : 5151입니다.

이제 실행

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

보시다시피, SanDisk USB 플래시 드라이브 (0781 : 5151)의 공급 업체 / 장치 ID는 BUSID 1-1에 해당합니다. BUSIDUSB 장치를 서버에 연결 하려면 다음이 필요 합니다.

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!

이제 원격 usbip 클라이언트에서 SanDisk USB 플래시 드라이브를 사용할 수 있습니다.

BTW, 달리면 ...

netstat -tap

... usbip 데몬이 수신 대기 중임을 알 수 있습니다 port 3240

방화벽에 의해이 포트가 차단되지 않도록하십시오 :

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

클라이언트에서 USB / IP 설치 및 사용

클라이언트에도 usbip을 설치해야합니다 :

sudo apt-get install usbip

그런 다음 vhci-hcd커널 모듈 을로드합니다 :

modprobe vhci-hcd

실제로로드되었는지 확인하려면 다음을 실행하십시오.

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

시스템을 부팅 할 때마다 모듈이 자동으로로드되도록하려면 다음에 추가하면됩니다 /etc/modules.

vi /etc/modules

[...]
vhci-hcd

이제 usbip 서버에 연결하여 사용 가능한 USB 장치 목록을 얻으십시오.

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

SanDisk USB 플래시 드라이브는 출력 (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)

해당 장치를 클라이언트에 연결하려면 다음을 실행하십시오.

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

이제 실행 lsusb하면 클라이언트의 출력에서 ​​원격 USB 장치를 찾을 수 있습니다.

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

이제 원격 USB 장치를 마치 로컬 USB 장치 인 것처럼 사용할 수 있습니다 (예 : 마운트, 포맷, 쓰기, 읽기 등).

원격 USB 장치 분리

원격 USB 장치는 다음과 같이 분리 할 수 ​​있습니다.

client1 :

운영...

usbip --port

... 원격 USB 장치가 클라이언트에서 사용하는 포트를 찾으려면이 경우 포트 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>

장치를 분리하려면 포트 번호가 필요합니다.

usbip -d 00

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

port 0 detached

서버에서 우리 BUSID (1-1)는 USB 장치를 로컬 시스템에 바인딩 하기 위해 를 사용합니다 (--other 스위치는 더 이상 네트워크를 통해 장치를 사용할 수 없도록 장치를 로컬 시스템에 바인딩합니다).

서버 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!

이제 클라이언트로 돌아가서 원격 USB 장치가 여전히 사용 가능한지 확인하십시오.

client1 :

모든 것이 잘되면 더 이상 나열해서는 안됩니다.

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

연결

http://usbip.sourceforge.net

학습서 소스 (서버 측)

학습서 소스 (클라이언트 측)


Ubuntu Trusty (14.04) 사용자를위한 참고 사항 : Utopic 이상의 백 포트 커널이 필요하며 이진 파일을 사용하는 바이올린이 필요합니다. 자세한 내용은 bugs.launchpad.net/ubuntu/+source/usbip/+bug/898003을 참조하십시오 . 불행히도 지원되는 모든 이전 우분투 버전에는 버그가 있으며 작동하지 않는 usbip이 제공됩니다.
gertvdijk

사용하기 전에이 답변을 확인하십시오. askubuntu.com/a/647071/187689
iman
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.