Installazione e uso di USB/IP sul client
Questo articolo spiega come installare e usare usbip su un client OpenSUSE, caricare il modulo kernel vhci-hcd, connettersi a un server USB/IP, montare un dispositivo remoto e staccarlo in sicurezza. Include comandi, output di esempio, checklist rapida e suggerimenti per risolvere i problemi più comuni.
Scopo e varianti di ricerca
Scopo primario: Come installare e usare USB/IP sul client Varianti correlate: configurare usbip client OpenSUSE, montare USB remoto con usbip, vhci-hcd modprobe, collegare dispositivo USB via rete, dissociare dispositivo USB remoto
1 Requisiti preliminari
- Accesso root sul client.
- Il server USB/IP deve essere raggiungibile in rete (es. 192.168.0.100).
- Pacchetto usbip disponibile nei repository (es. OpenSUSE 11.2).
- Conoscere il BUSID del dispositivo sul server (es. 2-5).
Importante: l’esempio usa OpenSUSE 11.2 come riferimento; su altre distribuzioni i nomi dei pacchetti e i percorsi possono variare.
2 Installazione di usbip sul client
client1:
Per prima cosa installiamo usbip sul client. I passaggi sono gli stessi del server:
yast2 -i usbip
Su OpenSUSE 11.2 usbip si aspetta il file usb.ids in /usr/share/hwdata, ma nella distribuzione di riferimento si trova in /usr/share/usbip/usb.ids — perciò creiamo un collegamento simbolico:
mkdir /usr/share/hwdata
ln -sf /usr/share/usbip/usb.ids /usr/share/hwdata/
3 Caricare il modulo vhci-hcd
Dopo l’installazione carichiamo il modulo kernel vhci-hcd:
modprobe vhci-hcd
Per verificare che il modulo sia stato caricato eseguire:
lsmod | grep vhci_hcd
L’output dovrebbe essere simile a questo esempio:
client1:~ # lsmod | grep vhci_hcd
vhci_hcd 26576 0
usbip_common_mod 25232 1 vhci_hcd
client1:~ #
Per fare in modo che il modulo venga caricato automaticamente all’avvio, aggiungetelo alla variabile MODULES_LOADED_ON_BOOT in /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" [...]
|
Eseguire quindi:
SuSEconfig
Nota: lasciare inalterato il contenuto del blocco di configurazione quando lo incollate nel file di sistema.
4 Collegarsi al server e enumerare i dispositivi USB
Ora connettiamoci al server usbip e otteniamo la lista dei dispositivi disponibili:
usbip -l 192.168.0.100
(192.168.0.100 è l’indirizzo IP del server usbip.)
Dovreste trovare la pen drive SanDisk nell’output (BUSID 2-5):
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:~ #
Per collegare il dispositivo remoto al client, eseguire:
usbip -a 192.168.0.100 2-5
Esempio di output:
client1:~ # usbip -a 192.168.0.100 2-5
8 ports available
port 0 attached
client1:~ #
A questo punto verificate che il dispositivo sia visibile con lsusb:
lsusb
Dovreste vedere il dispositivo USB remoto nell’elenco del client:
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:~ #
A questo punto potete usare il dispositivo remoto come se fosse locale (montarlo, formattarlo, leggere/scrivere, ecc.).
5 Disconnessione di un dispositivo USB remoto
Per staccare un dispositivo remoto dal client, prima troviamo la porta che usa:
usbip --port
Nell’esempio la porta è 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/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:~ #
Usiamo il numero di porta per staccare il dispositivo:
usbip -d 00
Esempio di uscita:
client1:~ # usbip -d 00
8 ports available
port 0 detached
client1:~ #
Sul server, per fare in modo che il dispositivo sia nuovamente gestito dal kernel locale (e non esposto in rete), si usa il BUSID (2-5) con l’opzione –other:
server1:
bind_driver --other 2-5
Esempio di output sul server:
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:~#
Tornando sul client e rieseguendo lsusb il dispositivo non dovrebbe più essere elencato:
client1:~ # lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
client1:~ #
6 Checklist rapida per l’amministratore
- Verificare con ping che il server sia raggiungibile.
- Installare il pacchetto usbip sul client.
- Creare il symlink per usb.ids se necessario.
- Caricare vhci-hcd con modprobe e controllare con lsmod.
- Eseguire usbip -l
per trovare il BUSID. - Collegare con usbip -a
e verificare con lsusb. - Per staccare, usare usbip –port per identificare la porta e poi usbip -d
. - Sul server usare bind_driver –other
per riprendere il controllo del dispositivo.
7 Cosa fare quando qualcosa va storto
- Nessun dispositivo trovato da usbip -l: controllare firewall e che il demone usbip (o lo script server) sia in esecuzione sul server.
- Modulo vhci-hcd non caricato: rieseguire modprobe e verificare i log di kernel (dmesg).
- Dispositivo visibile ma non montabile: controllare che non sia già in uso localmente sul server e che i driver appropriati siano presenti sul client (es. usb-storage).
- Permessi: eseguire i comandi come root o con sudo.
8 Alternative e approcci diversi
- Samba/NFS/FTP: se lo scopo è solo condividere file, il file-sharing di rete è spesso più semplice e robusto.
- iSCSI: per dispositivi di storage più complessi o performance più prevedibili su blocchi.
- Soluzioni commerciali di virtualizzazione USB: offrono interfacce grafiche e gestione centralizzata.
9 Modello mentale e limitazioni
Mental model: usbip crea un canale kernel-to-kernel che trasporta pacchetti USB su TCP/IP; il client vede virtualmente il device come se fosse connesso localmente. Limitazioni comuni: latenza di rete, compatibilità driver, e dispositivi che non tollerano la connessione remota (es. dispositivi con funzioni di alimentazione o sincronizzazione a bassa latenza).
Quando non usare usbip: dispositivi audio in tempo reale o periferiche che richiedono latenza garantita.
10 Glossario rapido (una riga ciascuno)
- BUSID: identificatore del dispositivo USB sul server (es. 2-5).
- vhci-hcd: driver kernel per l’emulazione di host controller USB virtuale sul client.
- bind_driver: comando per associare un dispositivo USB ai driver locali sul server.
11 Note di sicurezza
- Il traffico USB/IP non è cifrato di default. Se attraversa reti non affidabili, valutare tunnel VPN o SSH.
- Limitare l’accesso ai server USB/IP tramite firewall e regole di rete.
12 Comandi rapidi (cheese-cut cheat sheet)
- Installare: yast2 -i usbip
- Caricare modulo: modprobe vhci-hcd
- Elencare dispositivi server: usbip -l
- Allegare dispositivo: usbip -a
- Verificare porte: usbip –port
- Sganciare dispositivo: usbip -d
- Riprendere dispositivo sul server: bind_driver –other
Collegamenti utili
- USB/IP Project: http://usbip.sourceforge.net/
- OpenSUSE: http://www.opensuse.org/
Riepilogo
Seguendo i passi descritti potete installare e usare usbip su un client OpenSUSE, montare dispositivi USB remoti e staccarli in modo controllato. Se operate in reti non fidate, proteggete il traffico USB/IP con VPN o SSH.
Materiali simili

Errore Python oxzep7: come risolvere
Recuperare file dopo aver svuotato il Cestino su Mac

Numeri falsi nelle sintesi AI: come proteggerti

Usare iMessage su Android con AirMessage

Avviare Windows Server 2019 in Modalità Provvisoria
