Установка и использование USB/IP на клиенте
Контекст и цель
В этой инструкции показано, как установить и настроить клиентскую часть USB/IP на Debian (или совместимых дистрибутивах), подключить удалённое USB-устройство от usbip-сервера и затем корректно отсоединить его. Подойдёт для администраторов и инженеров, которым нужно использовать USB-устройства по сети как локальные.
Важно: команды и пути файлов сохранены в оригинальном виде — выполняйте их с правами root или через sudo.
Предварительные требования
- Доступ к серверу usbip (IP-адрес сервера в примерах: 192.168.0.100).
- Права администратора на клиенте и сервере.
- Поддерживаемое ядро (в примере — Debian Lenny; при других ядрах модули могут требовать сборки).
3 Установка и использование USB/IP на клиенте
Сначала нужно установить usbip на клиенте. Шаги совпадают с установкой на сервере.
Откройте список репозиториев:
vi /etc/apt/sources.listДобавьте репозитории Debian Squeeze (testing) в конец файла:
| [...] ## Squeeze / Testing deb http://ftp2.de.debian.org/debian/ squeeze main deb-src http://ftp2.de.debian.org/debian/ squeeze main deb http://security.debian.org/ squeeze/updates main deb-src http://security.de.debian.org/ squeeze/updates main |
Откройте файл конфигурации apt:
vi /etc/apt/apt.confВставьте в него строку, увеличивающую кэш APT:
| APT::Cache-Limit "100000000"; |
Создайте/отредактируйте файл предпочтений APT, чтобы задать приоритеты релизов:
vi /etc/apt/preferencesСодержимое файла должно выглядеть так:
| Package: * Pin: release a=stable Pin-Priority: 700 Package: * Pin: release a=testing Pin-Priority: 650 |
Обновите базу пакетов:
aptitude updateИ установите usbip и сопутствующие пакеты:
aptitude install usbip usbip-source module-assistantДля сборки модулей usbip под ядро Debian Lenny нужны пакеты usbip-source и module-assistant. Построим модули ядра:
m-a preparem-a updatem-a a-i usbip-sourceПосле сборки загрузите модуль vhci-hcd:
modprobe vhci-hcdПроверьте, что модуль загрузился:
lsmod | grep vhci_hcdОжидаемый пример вывода:
client1:~# lsmod | grep vhci_hcd
vhci_hcd 15844 0
usbip_common_mod 11332 1 vhci_hcd
usbcore 118160 2 vhci_hcd
client1:~#
Чтобы модуль загружался автоматически при загрузке, добавьте его в /etc/modules:
vi /etc/modules| [...] vhci-hcd |
Теперь подключимся к usbip-серверу и получим список доступных USB-устройств:
usbip -l 192.168.0.100(192.168.0.100 — IP-адрес usbip-сервера в примере.)
В выводе вы должны увидеть флеш-накопитель SanDisk (BUSID 4-5):
client1:~# usbip -l 192.168.0.100
- 192.168.0.100
4-5: SanDisk Corp. : Cruzer Micro 256/512MB Flash Drive (0781:5151)
: /sys/devices/pci0000:00/0000:00:04.1/usb4/4-5
: (Defined at Interface level) (00/00/00)
: 0 - Mass Storage / SCSI / Bulk (Zip) (08/06/50)
client1:~#
Чтобы присоединить это устройство к клиенту, выполните:
usbip -a 192.168.0.100 4-5Пример вывода:
client1:~# usbip -a 192.168.0.100 4-5
8 ports available
port 0 attached
client1:~#
Проверьте, что устройство появилось в списке USB-устройств на клиенте:
lsusbОжидаемый пример вывода:
client1:~# lsusb
Bus 001 Device 004: ID 0781:5151 SanDisk Corp. Cruzer Micro 256/512MB Flash Drive
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
client1:~#
Теперь вы можете использовать удалённое USB-устройство как локальное: монтировать, форматировать, читать и писать данные.
4 Отсоединение удалённого USB-устройства
Чтобы корректно отсоединить удалённое устройство с клиента, сначала узнайте, на каком порте оно подключено:
usbip --portВ примере порт — 00:
client1:~# usbip –port
8 ports available
Port 00:
SanDisk Corp. : Cruzer Micro 256/512MB Flash Drive (0781:5151)
1-1 -> usbip://192.168.0.100:3240/4-5 (remote devid 00040002 (bus/dev 004/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 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 (в примере 4-5):
server1:
usbip_bind_driver --other 4-5 Пример вывода на сервере:
server1:~# usbip_bind_driver –other 4-5
(process:7333): DEBUG: write “del 4-5” to /sys/bus/usb/drivers/usbip/match_busid Message: bind 4-5 to other drivers than usbip, complete!
server1:~#
Вернитесь на клиент и проверьте список usb-устройств:
lsusbЕсли всё прошло успешно, удалённое устройство больше не будет в списке:
client1:~# lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
client1:~#
Полезные сценарии и советы по отладке
- Если usbip не показывает устройств на сервере, проверьте, запущен ли на сервере демон usbip (или экспортируются ли устройства с помощью соответствующих команд) и доступен ли порт 3240 в сетевом фаерволе.
- Если модуль vhci-hcd не загружается, проверьте соответствие версий ядра и собранных модулей. При необходимости пересоберите usbip-source для текущего ядра.
- Для стабильной работы с блочными устройствами (USB-накопителями) на клиенте убедитесь, что устройство корректно размонтировано до detaching на сервере.
Важно: всегда корректно размонтируйте файловые системы (umount) перед отключением удалённого USB-устройства, чтобы избежать потери данных.
Альтернативные подходы
- Использовать сетевые файловые системы (NFS, SMB) вместо передачи уровня USB, если задача — доступ к файловым данным. Это уменьшает риски и сложность, но не подойдёт для специфических USB-устройств (например, USB-ключей с уникальными драйверами).
- Применять USB over IP в сочетании с VPN при пересечении ненадёжных сетей для шифрования трафика USB.
Короткая методология (шаги)
- Добавить репозитории и обновить apt.
- Установить usbip, usbip-source и module-assistant.
- Собрать модули и загрузить vhci-hcd.
- Просканировать сервер usbip (usbip -l).
- Подключить устройство (usbip -a).
- Использовать устройство локально.
- Отсоединить устройство (usbip -d) или перебиндить на сервере.
Чек-листы по ролям
Администратор клиента:
- Проверить наличие прав root.
- Установить пакеты и собрать модули.
- Добавить vhci-hcd в /etc/modules для автозагрузки.
Администратор сервера:
- Убедиться, что usbip демон/сервис экспортирует нужные BUSID.
- Проверить сетевой доступ к порту 3240.
- При необходимости перебиндить устройство после завершения работы.
Пользователь:
- Размонтировать файловые системы перед отключением.
- Сообщать администратору о некорректном поведении устройства.
Критерии приёмки
- Клиент успешно отображает удалённое устройство в lsusb.
- Устройство корректно монтируется и доступны чтение/запись (если это накопитель).
- После usbip -d устройство больше не отображается на клиенте.
Краткий глоссарий
- BUSID — идентификатор устройства на стороне сервера (например, 4-5).
- vhci-hcd — клиентский модуль ядра для виртуального USB-хоста.
- usbip-bind — операция, меняющая привязку устройства между драйверами.
Ссылки
- USB/IP Project: http://usbip.sourceforge.net/
- Debian: http://www.debian.org/
Краткое резюме
USB/IP позволяет пробрасывать USB-устройства по сети, делая их доступными как локальные. На клиенте требуется установить usbip, собрать и загрузить модуль vhci-hcd, затем подключиться к серверу и прикрепить нужный BUSID. Для корректного завершения работы следует корректно отсоединять устройства и при необходимости перебиндить их на сервере.
Примечание: при работе с важными данными всегда делайте резервные копии перед форматированием или операциями низкого уровня.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента