Гид по технологиям

Установка и использование USB/IP на клиенте

4 min read Системное администрирование Обновлено 27 Sep 2025
Установка и использование USB/IP на клиенте
Установка и использование USB/IP на клиенте

Введение

Эта инструкция описывает, как установить и использовать USB/IP на клиентской системе (пример — OpenSUSE). Кратко: пакет usbip предоставляет возможность «перекидывать» USB-устройства по сети; vhci-hcd — виртуальный хост-контроллер на клиенте, который делает удалённые устройства видимыми как локальные.

Краткие определения:

  • usbip: утилита и набор модулей для переноса USB через TCP/IP.
  • vhci-hcd: виртуальный USB Host Controller Interface для клиента.
  • BUSID: идентификатор устройства на сервере (например, 2-5).

Шаг 1 — Установка usbip на клиенте

Первым делом установите пакет usbip. В OpenSUSE это делается так:

yast2 -i usbip

Важно: usbip ожидает файл usb.ids в каталоге /usr/share/hwdata, но в OpenSUSE 11.2 он находится в /usr/share/usbip/usb.ids. Чтобы избежать проблем, создайте символьную ссылку и каталог, если его нет:

mkdir /usr/share/hwdata
ln -sf /usr/share/usbip/usb.ids /usr/share/hwdata/

Шаг 2 — Загрузка модуля vhci-hcd

Загрузите модуль ядра:

modprobe vhci-hcd

Проверьте, что модуль загружен:

lsmod | grep vhci_hcd

Ожидаемый фрагмент вывода:

client1:~ # lsmod | grep vhci_hcd
vhci_hcd               26576  0
usbip_common_mod       25232  1 vhci_hcd
client1:~#

Чтобы модуль загружался автоматически при загрузке системы, добавьте его в переменную MODULES_LOADED_ON_BOOT в файле /etc/sysconfig/kernel:

vi /etc/sysconfig/kernel

Содержимое (пример):

[...]
## Type:                string
## ServiceRestart:      boot.loadmodules
#
# This variable contains the list of modules to be loaded
# once the main filesystem is active
# You will find a few default modules for hardware which
# can not be detected automatically.
#
MODULES_LOADED_ON_BOOT="vhci-hcd"
[...]

Затем примените конфигурацию:

SuSEconfig

Важно: в других дистрибутивах авто-загрузка модуля может требовать добавления его в /etc/modules-load.d/ или аналогичный файл.

Шаг 3 — Подключение к серверу и привязка удалённого устройства

Получите список доступных устройств на сервере (замените IP на адрес сервера):

usbip -l 192.168.0.100

Пример ожидаемого вывода, где BUSID равен 2-5 (SanDisk):

client1:~ # usbip -l 192.168.0.100
- 192.168.0.100
2-5: SanDisk Corp. : Cruzer Micro 256/512MB Flash Drive (0781:5151)
: /sys/devices/pci0000:00/0000:00:04.1/usb2/2-5
: (Defined at Interface level) (00/00/00)
:  0 - Mass Storage / SCSI / Bulk (Zip) (08/06/50)

client1:~ #

Подключите устройство к клиенту, указав IP сервера и BUSID:

usbip -a 192.168.0.100 2-5

Пример вывода:

client1:~ # usbip -a 192.168.0.100 2-5
8 ports available

port 0 attached
client1:~ #

Проверьте, что устройство видно через lsusb:

lsusb

Ожидаемый пример:

client1:~ # lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 004: ID 0781:5151 SanDisk Corp. Cruzer Micro Flash Drive
client1:~ #

Теперь вы можете работать с устройством как с локальным: монтировать, форматировать, читать и записывать данные.

Важно: прежде чем производить низкоуровневые операции (например, форматирование), убедитесь, что устройство не используется другими процессами.

Шаг 4 — Отключение (детач) удалённого USB-устройства на клиенте

Чтобы корректно отсоединить удалённое устройство, сначала узнайте, на каком порту оно находится на клиенте:

usbip --port

Пример вывода с информацией о порте (в данном примере это Port 00):

client1:~ # usbip --port
8 ports available

Port 00:  at High Speed(480Mbps)
SanDisk Corp. : Cruzer Micro 256/512MB Flash Drive (0781:5151)
1-1 -> usbip://192.168.0.100:3240/2-5  (remote devid 00020002 (bus/dev 002/002))
1-1:1.0 used by usb-storage
/sys/devices/platform/vhci_hcd/usb1/1-1/1-1:1.0/host4/scsi_host/host4/device
Port 01: 
Port 02: 
Port 03: 
Port 04: 
Port 05: 
Port 06: 
Port 07: 
client1:~ #

Далее отключите устройство по номеру порта (в примере — 00):

usbip -d 00

Пример:

client1:~ # usbip -d 00
8 ports available

port 0 detached
client1:~ #

После этого на сервере перевяжите устройство обратно на локальные драйверы, используя BUSID (запустите на сервере):

bind_driver --other 2-5

Пример вывода сервера:

server1:~ # bind_driver --other 2-5
 (process:3484): DEBUG: write "del 2-5" to /sys/bus/usb/drivers/usbip/match_busid
 Message: bind 2-5 to other drivers than usbip, complete!
server1:~#

Теперь вернитесь к клиенту и убедитесь, что устройство больше не отображается в lsusb:

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

Если устройство не исчезло, проверьте логи ядра (dmesg), процессы, блокирующие устройство, и состояние vhci-hcd.

Быстрая шпаргалка — команды

yast2 -i usbip                # установить пакет usbip (OpenSUSE)
modprobe vhci-hcd              # загрузить модуль клиента
lsmod | grep vhci_hcd          # проверить модуль
usbip -l                   # перечислить устройства на сервере
usbip -a            # привязать удалённое устройство к клиенту
usbip --port                   # показать состояние портов vhci
usbip -d                 # отсоединить устройство на клиенте
bind_driver --other     # на сервере привязать устройство обратно локально
lsusb                          # показать USB устройства на клиенте
SuSEconfig                     # применить изменения конфигурации (OpenSUSE)

Когда это может не сработать (примеры отказов)

  • Сетевые ограничения: межсетевые экраны или NAT блокируют порт 3240 (по умолчанию). Проверьте настройки сети.
  • Несовместимость драйверов: некоторые устройства (особенно сложные многоконфигурационные девайсы) некорректно работают через USB/IP.
  • Конфликты при автоподключении: если на сервере уже есть локальный драйвер, устройство может быть недоступно по usbip.
  • Версии ядра и модулей: старые или проприетарные ядровые сборки могут не содержать необходимых модулей.

Альтернативные подходы

  • Использовать сетевые протоколы уровня блоков/файлов: iSCSI, NFS, Samba — для общей работы с данными вместо проброса USB-устройств.
  • Аппаратные KVM-over-IP или USB-over-IP коммутаторы — для физического разделения USB вне ОС.
  • Специализированные решения для печати/сканирования в сети, если целевая задача ограничивается одним типом устройств.

Роль-ориентированный чек-лист

Администратор:

  • Установить пакет usbip.
  • Обновить/подгрузить vhci-hcd.
  • Открыть/проверить сетевой порт 3240.
  • Проверить совместимость устройства.

Конечный пользователь:

  • Запросить у администратора BUSID устройства на сервере.
  • Выполнить usbip -a и проверить lsusb.
  • Корректно отмонтировать файловые системы перед usbip -d.

Критерии приёмки

  1. После usbip -a устройство отображается при lsusb и работает (можно читать/писать).
  2. После usbip -d устройство исчезает из вывода lsusb.
  3. На сервере bind_driver –other успешно возвращает устройство локально.
  4. Логи (dmesg, /var/log/messages) не содержат ошибок связанных с usbip или vhci-hcd.

Простая матрица рисков и смягчения

  • Риск: потеря данных при некорректном отключении. Смягчение: всегда отмонтировать файловые системы и остановить процессы, использующие устройство.
  • Риск: сетевые перебои приводят к падению подключения. Смягчение: использовать мониторинг и уведомления, планировать перерывы на обслуживание.
  • Риск: доступ неавторизованных клиентов. Смягчение: ограничить доступ по IP и использовать сегментацию сети.

Краткий глоссарий (1 строка)

usbip — протокол/проект для проброса USB-устройств по TCP/IP; vhci-hcd — клиентский виртуальный USB-контроллер; BUSID — идентификатор устройства на сервере.

Примечания по безопасности и приватности

USB/IP передаёт данные устройства по сети. Не передавайте по незашифрованным или публичным сетям конфиденциальные данные. В продуктивных средах ограничьте доступ к серверу по IP, VPN или VLAN.

Полезные ссылки

Итог

Важно следовать шагам: установить пакет, загрузить vhci-hcd, подключиться к серверу и корректно отсоединять устройства. Проверьте сетевые и правовые ограничения перед использованием в продакшне.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Исправление ошибки Python oxzep7
Python

Исправление ошибки Python oxzep7

Как восстановить файлы из опустошённой Корзины на Mac
Mac

Как восстановить файлы из опустошённой Корзины на Mac

Как избежать мошенничества с фальшивыми номерами в AI
Кибербезопасность

Как избежать мошенничества с фальшивыми номерами в AI

Как использовать iMessage на Android
Гайды

Как использовать iMessage на Android

Загрузка Windows Server 2019 в безопасном режиме
Администрирование

Загрузка Windows Server 2019 в безопасном режиме

Как создать ярлык в Snapchat
Социальные сети

Как создать ярлык в Snapchat