Установка и использование 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.
Критерии приёмки
- После usbip -a устройство отображается при lsusb и работает (можно читать/писать).
- После usbip -d устройство исчезает из вывода lsusb.
- На сервере bind_driver –other успешно возвращает устройство локально.
- Логи (dmesg, /var/log/messages) не содержат ошибок связанных с usbip или vhci-hcd.
Простая матрица рисков и смягчения
- Риск: потеря данных при некорректном отключении. Смягчение: всегда отмонтировать файловые системы и остановить процессы, использующие устройство.
- Риск: сетевые перебои приводят к падению подключения. Смягчение: использовать мониторинг и уведомления, планировать перерывы на обслуживание.
- Риск: доступ неавторизованных клиентов. Смягчение: ограничить доступ по IP и использовать сегментацию сети.
Краткий глоссарий (1 строка)
usbip — протокол/проект для проброса USB-устройств по TCP/IP; vhci-hcd — клиентский виртуальный USB-контроллер; BUSID — идентификатор устройства на сервере.
Примечания по безопасности и приватности
USB/IP передаёт данные устройства по сети. Не передавайте по незашифрованным или публичным сетям конфиденциальные данные. В продуктивных средах ограничьте доступ к серверу по IP, VPN или VLAN.
Полезные ссылки
- USB/IP Project: http://usbip.sourceforge.net/
- OpenSUSE: http://www.opensuse.org/
Итог
Важно следовать шагам: установить пакет, загрузить vhci-hcd, подключиться к серверу и корректно отсоединять устройства. Проверьте сетевые и правовые ограничения перед использованием в продакшне.
Похожие материалы

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

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

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

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

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