คุณสามารถใช้ซอฟต์แวร์usbipนี้และนี่คือวิธีการติดตั้งซอฟต์แวร์และใช้งานได้ทั้งบนเซิร์ฟเวอร์และฝั่งไคลเอ็นต์
หมายเหตุ:
ในบทช่วยสอนนี้ใช้server server1.example.com with IP
192.168.0.100
และclient client1.example.com with IP 192.168.0.101
ทั้งสองที่ใช้งาน Ubuntu การตั้งค่าเหล่านี้อาจแตกต่างกันสำหรับคุณดังนั้นคุณต้องแทนที่พวกเขาตามความเหมาะสม
นอกจากนี้บัญชีที่ใช้ในบทช่วยสอนนี้คือ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 daemon:
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 ของฉันคือ 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) สอดคล้องกับ BUSID 1-1 เราต้องการสิ่งนี้BUSID
เพื่อแนบอุปกรณ์ USB เข้ากับเซิร์ฟเวอร์:
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!
เพียงเท่านี้เราสามารถใช้แฟลชไดรฟ์ SanDisk USB บนไคลเอนต์ usbip ระยะไกลได้แล้ว
BTW ถ้าคุณวิ่ง ...
netstat -tap
... คุณควรเห็นว่า usbip daemon กำลังฟังอยู่ 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 กับระบบโลคัล (สวิตช์ - ผูกอุปกรณ์กับระบบภายในเพื่อไม่ให้ใช้งานผ่านเครือข่ายได้อีกต่อไป):
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!
ตอนนี้กลับไปที่ไคลเอนต์และตรวจสอบว่าอุปกรณ์ USB ระยะไกลยังคงมีอยู่:
client1:
หากทุกอย่างเป็นไปด้วยดีไม่ควรอยู่ในรายการอีกต่อไป:
root@client1:~# lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
การเชื่อมโยง
http://usbip.sourceforge.net
แหล่งที่มาของการสอน (ฝั่งเซิร์ฟเวอร์)
แหล่งที่มาของบทช่วยสอน (ฝั่งไคลเอ็นต์)