Objetivos de la practica
- Comprender el concepto de USB passthrough entre host e invitado y por que VirtualBox necesita el Extension Pack para USB 2.0/3.0.
- Configurar el controlador USB de una VM y elegir entre OHCI (1.1), EHCI (2.0) y xHCI (3.0).
- Capturar manualmente y mediante filtros USB un dispositivo desde la VM.
- Detectar, identificar y montar un pendrive en una VM Windows: Administrador de dispositivos, Diskpart, transferencia y rendimiento.
- Detectar, identificar y montar un pendrive en una VM Linux desde la terminal con
lsusb,lsblk,dmesg,mountyumount. - Comparar la compatibilidad cross-OS de FAT32, exFAT, NTFS y ext4.
- Diagnosticar problemas tipicos: dispositivo no aparece, capturado por otra VM, permisos en host, conflicto de versiones.
Parte 0 - Conceptos previos (25 min)
0.1 - El problema del USB en virtualizacion
Cuando enchufas un pendrive en el USB del PC, lo recibe el host (Windows / Linux real, el que esta corriendo VirtualBox). La VM no lo ve por si sola: hay que cederselo. A esto se le llama USB passthrough.
VirtualBox ofrece tres modos de controlador USB:
| Controlador | Standard | Velocidad nominal | Cuando usarlo |
|---|---|---|---|
| OHCI | USB 1.1 | 12 Mbps | Solo USB 1.1 muy antiguos. Casi obsoleto. |
| EHCI | USB 2.0 | 480 Mbps | Pendrives, ratones, teclados, webcams 720p. |
| xHCI | USB 3.0/3.1/3.2 | 5-10 Gbps | Discos externos rapidos, webcams 1080p+, transferencias grandes. |
0.2 - Captura manual vs filtros
Para que un dispositivo USB pase del host a la VM hay dos vias:
- Captura manual: con la VM en marcha, en el menu Dispositivos → USB seleccionas el dispositivo. El host pierde el acceso y la VM lo gana.
- Filtro USB: defines en la configuracion de la VM una "regla" (por nombre, vendor ID, product ID, numero de serie...) y cada vez que ese USB se conecte al host, VirtualBox lo redirigira automaticamente a la VM. Util para perifericos de uso permanente (lector de DNI, dongle, etc.).
0.3 - VID y PID
Cada dispositivo USB tiene dos identificadores en hexadecimal:
- VID (Vendor ID): 4 caracteres hex. Identifica al fabricante. Ejemplos:
0x0781SanDisk,0x1d6bLinux Foundation,0x046dLogitech. - PID (Product ID): 4 caracteres hex. Identifica el modelo dentro del fabricante.
La pareja VID:PID identifica univocamente un modelo de dispositivo.
0.4 - Cuestionario de entrada (sin mirar nada)
Antes de empezar, contesta lo que sepas. Al final compararemos:
| Pregunta | Tu respuesta |
|---|---|
| Si conecto un pendrive al PC con la VM en marcha, ¿la VM lo ve automaticamente? | |
| ¿Que diferencia hay entre OHCI, EHCI y xHCI? | |
| ¿Para que sirve el VirtualBox Extension Pack? | |
| En Linux, ¿que comando muestra los dispositivos USB conectados? | |
| ¿Que es VID:PID? |
Parte 1 - Preparar host y VirtualBox (30 min)
1.1 - Comprobar la version de VirtualBox
- Abre VirtualBox.
- Menu Ayuda → Acerca de VirtualBox.
- Apunta la version exacta.
| Version de VirtualBox | |
| Sistema operativo del host |
1.2 - Comprobar si esta instalado el Extension Pack
- En VirtualBox 7.x: Archivo → Herramientas → Administrador de extensiones.
- Si no encuentras ese menu, prueba Archivo → Preferencias → Extensiones (versiones antiguas).
- Mira si aparece Oracle VM VirtualBox Extension Pack (en VirtualBox 7.1+ se llama Oracle VirtualBox Extension Pack sin "VM").
| ¿Esta instalado el Extension Pack? | |
| Si esta, version |
https://www.virtualbox.org/wiki/Downloads (la version debe coincidir con la de VirtualBox), haz doble clic en el .vbox-extpack y acepta la instalacion. Hace falta admin/sudo en el host.
1.3 - Permisos del usuario host (solo Linux host)
Si tu host es Linux, el usuario debe pertenecer al grupo vboxusers para acceder a USB. Si tu host es Windows, salta este paso.
- En el host, terminal:
groups. ¿Aparecevboxusers? - Si no:
sudo usermod -aG vboxusers $USERy cierra sesion para que se aplique.
1.4 - Activar controlador USB en una VM (Windows guest)
- Apaga la VM Windows si esta encendida (configuracion USB requiere VM apagada).
- Selecciona la VM → Configuracion → USB.
- Comprueba que Habilitar controlador USB esta marcado.
- Selecciona Controlador USB 3.0 (xHCI).
- Acepta y arranca la VM.
| Controlador USB elegido | |
| ¿La VM arranca sin errores? |
1.5 - Repetir para la VM Linux (Ubuntu)
- Apaga la VM Ubuntu.
- Configuracion → USB → controlador xHCI.
- Acepta y arranca.
Parte 2 - Pendrive en Windows guest (60 min)
2.1 - Identificar el pendrive en el host
- Conecta el pendrive a un puerto USB del PC fisico (host).
- Espera a que el host lo monte.
- Si tu host es Windows, abre el Explorador y mira que letra le ha dado.
- Si tu host es Linux, terminal:
lsusbylsblk.
| Letra/punto de montaje en host | |
| Capacidad del pendrive | |
| Sistema de archivos visto por el host |
2.2 - Pasar el pendrive a la VM Windows (captura manual)
- Arranca la VM Windows.
- En la barra de la ventana de la VM: Dispositivos → USB.
- Veras la lista de USB del host. Localiza tu pendrive (suele tener el nombre o el modelo).
- Haz clic en el. Aparecera un tilde ✓ al lado.
| Nombre del dispositivo en el menu USB | |
| ¿Aparece sonido de "dispositivo conectado" en la VM Windows? |
2.3 - Comprobar en el Administrador de dispositivos
- En la VM Windows, clic derecho en Inicio → Administrador de dispositivos.
- Despliega Controladoras de bus serie universal.
- Apunta los controladores que aparecen.
- Despliega Unidades de disco. Deberias ver el pendrive.
| Controladores USB que ve la VM | |
| Nombre del pendrive en Unidades de disco |
2.4 - VID y PID del dispositivo
- En el Administrador de dispositivos → Controladoras USB, busca un dispositivo con el nombre del pendrive (suele ser USB Mass Storage).
- Clic derecho → Propiedades → pestana Detalles.
- En Propiedad, elige Identificadores de hardware.
- Veras lineas como
USB\VID_0781&PID_5567. Apunta los valores.
| VID | |
| PID | |
| Fabricante deducido (busca el VID en internet) |
2.5 - Sistema de archivos y diskpart
- Abre el Explorador. Anota la letra de unidad asignada al pendrive.
- Abre CMD como administrador.
- Ejecuta
diskpart. - Dentro:
list disk, anota el numero del pendrive. select disk N(sustituye N).detail disk. Apunta el resultado.list partition.- Escribe
exitpara salir de diskpart.
clean en diskpart si estas con tu disco principal seleccionado por error. clean borra la tabla de particiones. Verifica con list disk que has seleccionado el pendrive (suele ser el de menos GB y de tipo "Removible").
| Letra asignada en VM | |
| Sistema de archivos actual | |
| Numero de particiones |
2.6 - Transferencia de prueba
Vamos a medir cuanto tarda el pendrive desde la VM:
- En la VM Windows, crea un archivo grande para la prueba. Abre PowerShell:
$f = "C:\test_500MB.bin" fsutil file createnew $f 524288000 Get-Item $f | Select-Object Length, FullName
- Copia ese archivo al pendrive con el Explorador. Cronometra el tiempo.
- Calcula la velocidad media: 500 MB / tiempo (s).
| Controlador USB en VirtualBox | Tiempo (s) | Velocidad calculada (MB/s) |
|---|---|---|
| xHCI (USB 3.0) |
2.7 - Devolver el USB al host
- Antes de quitarlo, en el Explorador clica el icono Quitar hardware con seguridad y expulsa el pendrive.
- Menu Dispositivos → USB en VirtualBox: vuelve a desmarcar el pendrive.
- Comprueba en el host que el pendrive aparece de nuevo.
¿Por que es importante usar "Quitar hardware con seguridad" antes de retirar el pendrive de la VM (o del host)?
Parte 3 - Pendrive en Linux guest (75 min)
3.1 - Pasar el pendrive a la VM Ubuntu
- Asegurate de que el pendrive este conectado al host.
- Arranca la VM Ubuntu.
- Menu Dispositivos → USB y selecciona el pendrive.
- Si Ubuntu tiene escritorio grafico, deberia aparecer una notificacion y montarse automaticamente.
3.2 - lsusb: ver dispositivos USB
- Abre la terminal en Ubuntu (Ctrl+Alt+T).
- Ejecuta
lsusb. Pega abajo la salida:
| Linea correspondiente al pendrive | |
| VID:PID que ves | |
| ¿Coincide con lo que viste en Windows? |
lsusb -v -d 0781:5567 muestra info detallada del dispositivo (descriptores, velocidad, etc.). Pruebalo con tu VID:PID. Es verbose, asi que la salida es larga.
3.3 - Identificar el dispositivo de bloque
lsblk. Anota la salida.- El pendrive suele aparecer como
sdbosdc. Tiene su propia particion:sdb1. - Para ver mas detalles:
sudo fdisk -l /dev/sdb(sustituye sdb por el tuyo).
| Dispositivo de bloque del pendrive | |
| Particion del pendrive | |
| Tamano | |
| Sistema de archivos detectado |
3.4 - dmesg: que paso al conectarlo
- Ejecuta
sudo dmesg | tail -30. - Localiza las lineas que se imprimieron al pasar el pendrive a la VM.
¿Que informacion da dmesg que NO da lsusb?
3.5 - Punto de montaje automatico
findmnt /dev/sdb1(sustituye por tu particion).- Anota el punto de montaje (suele ser
/media/$USER/NOMBRE_USB). ls -la /media/$USER/.
| Punto de montaje automatico | |
| Permisos de la carpeta |
3.6 - Desmontaje y montaje manual
El sistema lo monto automaticamente. Vamos a hacerlo a mano para entender el proceso.
- Desmontalo:
sudo umount /dev/sdb1. - Crea un punto de montaje propio:
sudo mkdir -p /mnt/usb_practica. - Montalo ahi:
sudo mount /dev/sdb1 /mnt/usb_practica. - Comprueba:
ls -la /mnt/usb_practicaydf -h /mnt/usb_practica. - Desmontalo de nuevo:
sudo umount /mnt/usb_practica. - Borra el punto de montaje:
sudo rmdir /mnt/usb_practica.
| ¿Pudiste montarlo manualmente? | |
| Espacio libre en el pendrive (df -h) |
¿Por que para hacer mount/umount hace falta sudo pero el sistema lo monta solo cuando llega el USB sin pedirte contrasena?
3.7 - udevadm monitor (extra)
Para ver los eventos USB en tiempo real:
- Termina cualquier captura activa del pendrive en la VM Linux: menu Dispositivos → USB → quitar tilde.
- En la terminal de Ubuntu, lanza:
udevadm monitor --kernel --udev --subsystem-match=usb. - Sin cerrar el comando, vuelve a pasar el pendrive a la VM (Dispositivos → USB).
- Mira los eventos que se imprimen en la terminal.
- Pulsa Ctrl+C para detener el monitor.
3.8 - Transferencia de prueba en Linux
cp termina antes de que los datos esten realmente en el pendrive. Para medir el tiempo real de transferencia, anadimos sync, que fuerza a vaciar la cache.
- Genera 500 MB en el home:
dd if=/dev/zero of=~/test_500MB.bin bs=1M count=500 status=progress. - Copia al pendrive con sync incluido:
time (cp ~/test_500MB.bin /media/$USER/.../ && sync)(incluye los parentesis). - Apunta el tiempo real (linea "real").
- Calcula MB/s: 500 / segundos.
- Borra el archivo del pendrive cuando termines.
| Controlador USB en VBox | Tiempo (s) | MB/s calculados |
|---|---|---|
| xHCI (USB 3.0) |
Compara la velocidad obtenida en Linux con la que mediste en Windows (Parte 2.6). ¿Hay diferencia? ¿De que orden?
Parte 4 - Filtros USB y captura automatica (45 min)
4.1 - Crear un filtro por nombre
- Apaga la VM Windows (los filtros pueden modificarse en caliente, pero arrancamos limpio).
- Selecciona la VM → Configuracion → USB.
- En el panel derecho, pulsa el icono "+" con un USB y un asterisco. Elige el pendrive de la lista del host.
- VirtualBox crea un filtro con el nombre del dispositivo.
- Acepta y arranca la VM.
4.2 - Probar el filtro
- Con la VM Windows arrancada y el pendrive desconectado del host, conectalo de nuevo.
- Comprueba: ¿aparece automaticamente en la VM Windows? ¿O sigue en el host?
| ¿Funciona la captura automatica con el filtro? | |
| ¿Cuanto tarda en aparecer en la VM (segundos)? |
4.3 - Editar el filtro: hacerlo mas estricto
Un filtro por solo el nombre es muy permisivo. Vamos a ajustarlo:
- Apaga la VM. Configuracion → USB → doble clic en el filtro.
- Borra el campo Producto.
- Rellena solo VID y PID con los valores que apuntaste antes.
- Aplica y arranca la VM. Conecta el pendrive.
¿Que ventaja tiene filtrar por VID:PID en lugar de por nombre?
4.4 - Conflicto entre dos VMs
El mismo dispositivo no puede estar capturado por dos VMs a la vez. Vamos a comprobarlo:
- Crea un filtro identico (VID:PID) tambien en la VM Ubuntu (con la VM apagada).
- Arranca primero la VM Ubuntu. Conecta el pendrive. ¿Donde aparece?
- Ahora arranca tambien la VM Windows con el pendrive ya conectado a Ubuntu.
- Apaga la VM Ubuntu. Apunta donde queda el pendrive.
- Reconectalo (desconecta del host y vuelve a conectar). ¿Va a Ubuntu o Windows?
| Tras arrancar Ubuntu primero, ¿donde se monta? | |
| Con las dos VMs encendidas, ¿que VM gana cuando reconectas? |
Conclusion: cuando dos VMs tienen el mismo filtro y las dos estan encendidas, ¿como decide VirtualBox a quien dar el dispositivo?
4.5 - Eliminar los filtros
- Apaga las dos VMs.
- En cada una: Configuracion → USB → selecciona el filtro → pulsa el "-" para borrarlo.
- Arranca y comprueba que ya no captura automaticamente.
Parte 5 - Compatibilidad cross-OS de sistemas de archivos (45 min)
Ahora vamos a ver que pasa si formateas el pendrive con distintos sistemas de archivos y lo metes en cada VM.
5.1 - Formatear como FAT32 desde Windows
format X: /FS:FAT32 /Q (sustituye X por la letra del pendrive). El proceso es lento en pendrives grandes.
- En la VM Windows con el pendrive capturado, abre Explorador.
- Clic derecho en el pendrive → Formatear.
- Sistema de archivos: FAT32. Formato rapido.
- Si FAT32 NO aparece (pendrive > 32 GB), usa la alternativa: PowerShell admin →
format X: /FS:FAT32 /Q /Y. - Crea un archivo de prueba:
test_win.txtcon texto dentro. - Quita el pendrive con seguridad.
| ¿Aparecio FAT32 en el desplegable del Explorador? | |
| Metodo usado finalmente |
5.2 - Leer el FAT32 desde Linux
- Pasa el pendrive a la VM Ubuntu.
- Comprueba que se monta y que ves
test_win.txt. - Crea un archivo desde Linux:
echo "Hola desde Linux" > /media/$USER/.../test_linux.txt. - Desmonta y devuelve a Windows. ¿Ves los dos archivos?
| ¿Linux lee el FAT32 sin problemas? | |
| ¿Windows ve el archivo creado en Linux? |
5.3 - Probar el limite de FAT32: 4 GB
- En la VM Linux con el pendrive en FAT32, intenta crear un archivo de 5 GB:
dd if=/dev/zero of=/media/$USER/.../big.bin bs=1M count=5000 status=progress
- Mira el error que da.
5.4 - Formatear como exFAT y repetir
exfat) y se monta automaticamente. Solo necesitas las utilidades para formatear y comprobar: sudo apt install exfatprogs. El paquete antiguo exfat-fuse ya no es necesario.
- Borra el archivo de 5 GB (si quedo a medias).
- En Windows VM, formatea el pendrive a exFAT.
- En Ubuntu VM, asegurate de tener las utilidades:
sudo apt install exfatprogs. - Pasa el pendrive a Ubuntu y monta. Comprueba que se ve.
- Repite la prueba de los 5 GB con dd.
| ¿exFAT acepta el archivo de 5 GB? | |
| ¿Ubuntu monta exFAT sin problemas? |
5.5 - Formatear como NTFS y probar
ntfs-3g habia escritura, pero limitada). Desde el kernel 5.15 (Ubuntu 22.04 LTS y posteriores) existe el driver NTFS3 de Paragon en el kernel, que permite lectura y escritura nativas. Lo veras en accion abajo.
- Formatea como NTFS desde Windows.
- Crea un archivo
desde_windows.txtdentro. - Pasa a Ubuntu. Comprueba si lo monta automaticamente.
- Mira que driver se uso:
findmnt /dev/sdb1omount | grep sdb1. ¿Pone "ntfs3" o "fuseblk/ntfs"? - Crea desde Linux:
echo "Hola desde Linux" > /media/$USER/.../desde_linux.txt. - Modifica el archivo creado en Windows:
echo "Editado" >> /media/$USER/.../desde_windows.txt. - Pasalo a Windows y comprueba que ve los cambios.
| ¿Ubuntu lee NTFS? | |
| ¿Ubuntu escribe NTFS? | |
| Driver usado (ntfs3 / fuseblk) |
5.6 - Formatear como ext4 desde Linux
wsl --mount en Windows 11 con WSL2 que permite acceder al pendrive ext4 desde la consola WSL, pero el Explorador no lo monta como una unidad. Para el alumno medio, la respuesta sigue siendo: Windows no lee ext4.
- En Ubuntu VM con el pendrive (desmontado):
sudo mkfs.ext4 /dev/sdb1. - Vuelvelo a montar (desconecta y reconecta para que se monte automatico).
- Crea un archivo de prueba.
- Pasalo a la VM Windows. ¿Que ocurre? ¿Aparece la unidad? ¿Pide formatear?
| ¿Windows lee ext4 nativamente desde el Explorador? | |
| ¿Que mensaje muestra Windows? (formatear / ignorar / vacio) |
5.7 - Tabla resumen
| Sistema | Lee Win | Escribe Win | Lee Ubuntu | Escribe Ubuntu | Limite archivo |
|---|---|---|---|---|---|
| FAT32 | |||||
| exFAT | |||||
| NTFS | |||||
| ext4 |
Si tuvieras un pendrive que vas a usar en Windows, Mac y Ubuntu indistintamente, ¿que sistema de archivos elegirias y por que?
Parte 6 - Diagnostico y casos avanzados (45 min)
6.1 - Caso A: el USB no aparece en el menu Dispositivos → USB
El profesor habra creado este escenario en una VM. Sintoma: conectas un pendrive al host y no aparece en Dispositivos → USB de la VM.
- Comprueba que el host SI ve el dispositivo (Explorador de Windows host o
lsusben host Linux). - En la VM, mira la configuracion: ¿esta marcado "Habilitar controlador USB"? ¿Que controlador esta seleccionado?
- Si el dispositivo es USB 3.0 y el controlador es OHCI (1.1), no podra pasarlo. Cambia a xHCI.
- Si la VM usa EHCI/xHCI pero NO tienes Extension Pack instalado, falla. Comprueba.
| Causa identificada en el caso A | |
| Solucion aplicada |
6.2 - Caso B: el USB aparece pero la VM no lo puede capturar
Sintoma: pulsas en el dispositivo en el menu USB pero al instante "se libera" o sale un error.
- Comprueba si el host esta usando el dispositivo en ese momento (lo tiene montado, hay una transferencia, etc.).
- En el host, "Quitar hardware con seguridad" o
umountantes de capturarlo. - Si tu host es Linux y aparece error "No tiene permisos", verifica que tu usuario esta en
vboxusers.
| Causa identificada en el caso B | |
| Solucion aplicada |
6.3 - Caso C: el rendimiento es ridiculamente bajo
Sintoma: copias 100 MB y tarda mucho.
- Comprueba en VirtualBox que el controlador es xHCI (USB 3.0).
- Comprueba que el puerto fisico del host es USB 3.0 (azul).
- Comprueba en la VM, en Administrador de dispositivos, que el dispositivo se conecta como USB 3.0 y no como USB 2.0.
- Mide la velocidad otra vez con el cambio.
| Configuracion | Velocidad |
|---|---|
| Antes del cambio | |
| Despues |
6.4 - Caso D: la VM no detecta una webcam USB
- Conecta una webcam (real o simulada) y pasala a la VM via USB.
- En la VM Windows, abre la app Camara. ¿La detecta?
- Si no, mira el Administrador de dispositivos: ¿hay un signo amarillo en algun dispositivo?
- En la VM Linux, prueba
lsusbyv4l2-ctl --list-devices(puede requerirsudo apt install v4l-utils).
6.5 - Caso E: el host pierde el USB tras desconectarlo de la VM
- Pasa el pendrive a una VM y luego quitalo del menu USB de VirtualBox.
- Si el host no lo recupera (no aparece en el Explorador del host ni en
lsusb), reconecta fisicamente el pendrive. - Apunta cuanto tarda en aparecer.
| ¿Volvio el USB al host inmediatamente? | |
| ¿Hizo falta reconectarlo fisicamente? |
6.6 - Sintesis: tabla de problemas y soluciones
| Sintoma | Causa probable | Solucion |
|---|---|---|
| USB no aparece en el menu de la VM | ||
| USB aparece pero no se captura | ||
| Velocidad de transferencia muy baja | ||
| Dos VMs se "pelean" por el mismo USB | ||
| Linux no monta el pendrive automaticamente | ||
| Windows no monta un pendrive en ext4 |
Conclusiones y evaluacion
Cuestionario de salida
Vuelve al cuestionario de la parte 0.4 y responde de nuevo, ahora con todo lo que has aprendido. Compara con tus respuestas iniciales.
| Pregunta | Respuesta inicial | Respuesta final |
|---|---|---|
| ¿La VM ve sola un USB conectado al host? | ||
| OHCI vs EHCI vs xHCI | ||
| Para que sirve el Extension Pack | ||
| Comando Linux para listar USB | ||
| Que es VID:PID |
Reflexion final
Imagina que en una empresa virtualizan los puestos con VirtualBox y los empleados llevan pendrives propios. ¿Que politicas de USB recomendarias para evitar problemas de seguridad y compatibilidad?
¿Que parte de la practica te ha resultado mas dificil? ¿Por que?
Autoevaluacion
| Aspecto | Logrado |
|---|---|
| Entiendo USB passthrough y la diferencia OHCI/EHCI/xHCI | |
| Capturo y libero un USB manualmente desde el menu Dispositivos | |
| Configuro filtros USB por VID:PID | |
| En Windows: detecto USB en Administrador de dispositivos, Diskpart, transfiero archivos | |
| En Linux: uso lsusb, lsblk, dmesg, mount/umount manuales y udevadm | |
| Conozco compatibilidades cross-OS de FAT32, exFAT, NTFS y ext4 | |
| Diagnostico problemas USB tipicos (Extension Pack, controlador, permisos, conflictos) |