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

Установка и использование 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
Автор
Редакция

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

Herodotus: защита от банковского трояна на Android
Безопасность

Herodotus: защита от банковского трояна на Android

Как включить новый Пуск в Windows 11
Windows

Как включить новый Пуск в Windows 11

Панель полей сводной таблицы Excel — руководство
Excel

Панель полей сводной таблицы Excel — руководство

Включить новое меню «Пуск» в Windows 11 (KB5067036)
Windows 11

Включить новое меню «Пуск» в Windows 11 (KB5067036)

Дублирование Диспетчера задач в Windows 11: как исправить
Windows

Дублирование Диспетчера задач в Windows 11: как исправить

Как посмотреть историю просмотра Reels в Instagram
Социальные сети

Как посмотреть историю просмотра Reels в Instagram