usbip – Comparte tus dispositivos usb en red
Enviado por miguelcarmona :: 19 de febrero de 2010
usbip es un proyecto bastante interesante. Nos permite compartir cualquier dispositivo usb conectado en un equipo para que lo pueda gestionar otro. Puede ser bastante útil para compartir cierto hardware con máquinas virtuales.
Su instalación y configuración en openSuse viene a ser bastante sencilla:
El servidor
Instalación:
zypper install usbip |
El software usbip lee la lista de dispositivos conocidos en la ruta /usr/share/hwdata pero en realidad está /usr/share/usbip/ así que con hacer un enlace a dicho archivo bastaría
mkdir /usr/share/hwdata ln -sf /usr/share/usbip/usb.ids /usr/share/hwdata/ |
Cargamos los módulos necesarios en el kernel:
modprobe usbip modprobe usbip_common_mod |
Podemos verificar si todo está correcto:
lsmod | grep usbip |
Nos saldría algo como:
server:~ # lsmod | grep usbip usbip 21540 0 usbip_common_mod 25232 1 usbip server:~ # |
Para hacer automática la carga del módulo al iniciar el sistema podemos añadirlo a la línea MODULES_LOADED_ON_BOOT=»usbip usbip_common_mod» del archivo /etc/sysconfig/kernel
Si hemos añadido la «auto-carga» de dicho módulo, es recomendable ejecutar un:
SuSEconfig |
Para iniciar el demonio de usbip, ejecutaremos:
usbipd -D |
Nos reportará algo así:
Bind usbip.ko to a usb device to be exportable! |
A partir de este momento, ya tenemos el demonio funcionando para compartir el dispositivo.
Sólo nos queda indicarle el dispositivo que deseamos compartir. Para saber el dispositivo a compartir, podemos usar lsusb:
server:~ # lsusb Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 001 Device 003: ID 05ac:9130 Apple, Inc. Bus 001 Device 004: ID 058f:6362 Alcor Micro Corp. Hi-Speed 21-in-1 Flash Card Reader/Writer (Internal/External) Bus 001 Device 005: ID 05e3:0718 Genesys Logic, Inc. Bus 001 Device 006: ID 05ac:9222 Apple, Inc. Bus 001 Device 007: ID 04d9:0499 Holtek Semiconductor, Inc. Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub Bus 002 Device 002: ID 046d:08f0 Logitech, Inc. QuickCam Messenger server:~ # |
En principio, compartiré un disco duro usb (05e3:0718 Genesys Logic, Inc.) y la webcam logitech (046d:08f0 Logitech, Inc. QuickCam Messenger).
Con el comando bind_driver –list, listaremos los dispositivos que se permiten compartir:
server:~ # bind_driver --list List USB devices - busid 1-2 (05ac:9130) 1-2:1.0 -> hub - busid 1-3 (058f:6362) 1-3:1.0 -> usb-storage - busid 1-5 (05e3:0718) 1-5:1.0 -> usb-storage - busid 2-1 (046d:08f0) 2-1:1.0 -> STV06xx 2-1:1.1 -> snd-usb-audio 2-1:1.2 -> snd-usb-audio - busid 1-2.2 (05ac:9222) 1-2.2:1.0 -> usbhid - busid 1-2.3 (04d9:0499) 1-2.3:1.0 -> usbhid server:~ # |
Para enlazar dichos dispositivos:
bind_driver --usbip 1-5 bind_driver --usbip 2-1 |
De momento, si tenemos el cortafuegos funcionando, recomiendo detenerlo para comprobar su funcionamiento y después configurarlo para permitir acceso al puerto 3240 en TCP:
netstat -putan | grep usbipd |
El cliente
Instalación:
zypper install usbip |
Volvemos a enlazar bien el archivo usb.ids en la ruta correcta:
mkdir /usr/share/hwdata ln -sf /usr/share/usbip/usb.ids /usr/share/hwdata/ |
Cargamos los módulos necesarios:
modprobe vhci-hcd |
Comprobando…
lsmod | grep vhci_hcd |
client:~ # lsmod | grep vhci_hcd vhci_hcd 26576 0 usbip_common_mod 25232 1 vhci_hcd client:~ # |
Para establecerlo como auto-inicio editaremos el archivo /etc/sysconfig/kernel y actualizar MODULES_LOADED_ON_BOOT=»vhci-hcd»
Si hemos establecido el auto-inicio
SuSEconfig |
Ahora listamos los dispositivos compartidos del equipo servidor:
client:~ #usbip -l 192.168.10.5 - 192.168.10.5 1-5: Genesys Logic, Inc. : unknown product (05e3:0718) : /sys/devices/pci0000:00/0000:00:02.1/usb1/1-5 : (Defined at Interface level) (00/00/00) : 0 - Mass Storage / SCSI / Bulk (Zip) (08/06/50) 2-1: Logitech, Inc. : QuickCam Messenger (046d:08f0) : /sys/devices/pci0000:00/0000:00:02.0/usb2/2-1 : Vendor Specific Class / Vendor Specific Subclass / Vendor Specific Protocol (ff/ff/ff) : 0 - Vendor Specific Class / Vendor Specific Subclass / Vendor Specific Protocol (ff/ff/ff) : 1 - Audio / Control Device / unknown protocol (01/01/00) : 2 - Audio / Streaming / unknown protocol (01/02/00) client:~ # |
Lógicamente, sustituiremos con la ip del equipo servidor.
Para conectar los dispositivos:
client:~ #usbip -a 192.168.10.5 1-5 8 ports available port 0 attached client:~ # usbip -a 192.168.10.5 2-1 8 ports available port 1 attached linux-gqss:~ # |
Comprobamos…
linux-gqss:~ # lsusb Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub Bus 005 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 005 Device 004: ID 05e3:0718 Genesys Logic, Inc. Bus 005 Device 005: ID 046d:08f0 Logitech, Inc. QuickCam Messenger linux-gqss:~ # |
Pruebas y conclusiones
Las pruebas, sinceramente, son bastante escasas. Tras intentar varias veces la configuración de la webcam, no pude hacerla funcionar correctamente. Sólo se mostraba una imagen verde (aunque puede ser debido a los problemas que tengo en el equipo cliente con el driver nvidia).
Sobre el disco duro usb, en una hora aproximada de pruebas, funcionó perfectamente.
Calculé la transferencia media y resultó en 7.143 Mb/s. No es mala transferencia para unas tarjetas de red a 100 Mbits, pero he de decir que las pruebas de transferencia por nfs superan el rendimiento (alrededor de 9.5 Mb/s de media).
El proyecto usbip, ha liberado una etapa bastante temprana del cliente para windows, por lo levanté una máquina virtual y me puse a «trastear». A pesar de listar los dispositivos, reiteró varios errores al hacer la conexión.
Fuentes:
http://www.howtoforge.com/how-to-set-up-a-usb-over-ip-server-and-client-with-opensuse-11.2