Restartovani pripojeneho USB zarizeni v Linuxu

Casto se mi stava, ze softwarove odpojim USB flash a hned po odpojeni si vzpomenu, ze chci jeste nejaky soubor nakopirovat. Nejjednodussi reseni je vytahnou a znovu zastrcit flashku do USB portu. Jenze co delat, kdyz flashka je pripojena do vzdaleneho pocitace?

Nemusi jit hned o flashku, muze jit treba o nereagujici usb modem, nebo jine libovolne zarizeni.

Resenim je poslat USB zarizeni USBDEVFS_RESET. Staci si napsat jednoduchy program, jehoz zdrojak je na stackoverflow:

 

Po kompilaci pomoci sudo gcc usbreset.c -o /usr/local/bin/usbreset

muzeme nastroj otestovat.
Pripojime flashku do USB. Mela by se  sama pripojit:

martin@martin:/tmp$ mount | grep sdd
/dev/sdd1 on /media/martin/VANCL type vfat (rw,nosuid,nodev,uid=1000,gid=1000,shortname=mixed,dmask=0077,utf8=1,showexec,flush,uhelper=udisks2)
martin@martin:/tmp$ lsusb | grep "Flash Drive"
Bus 002 Device 013: ID 1307:0165 Transcend Information, Inc. 2GB/4GB Flash Drive

martin@martin~$ ls /dev/ | grep sdd
sdd
sdd1

Nyni GUI klikatkem (Nautilus) odpojime/odebereme flash disk:
V Nautilu zarizeni uplne zmizi a ve vypisu mountu uz take neni. Jinak je i dal pripojene:
martin@martin:/tmp$ mount | grep sdd
martin@martin:/tmp$ lsusb | grep "Flash Drive"

Bus 002 Device 013: ID 1307:0165 Transcend Information, Inc. 2GB/4GB Flash Drive

martin@martin:~$ ls /dev/ | grep sdd
sdd
Ted nastal cas na nastroj usbreset, je potreba ho spustit pod rootem:
# usbreset /dev/bus/usb/002/013
Resetting USB device /dev/bus/usb/002/013
Reset successful
Jedinym parametrem je cesta k USB zarizeni. Dulezite jsou posledni 2 ciselne hodnoty oddelene lomitkem. Ty vezmeme z vyse uvedenho vystupu lsusb. Po spusteni prikazu se flash disk opet pripoji a v Nautilu se zobrazi jako pripojeny.
Nefunguje to ovsem vzdy, pokud odebereme flashku pomoci udisks –detach, je nutne ji znovu vytahnout a zastric zpet do USB (alespon jsem na jiny zpusob neprisel):
martin@martin:/tmp$ lsusb | grep "Flash Drive"
Bus 002 Device 013: ID 1307:0165 Transcend Information, Inc. 2GB/4GB Flash Drive
martin@martin:/tmp$ udisks --detach /dev/sdd
martin@martin:/tmp$ lsusb | grep "Flash Drive"
martin@martin:~$ ls /dev/ | grep sdd
martin@martin:~$ 
Takze az se priste odpojite flashku u stovky kilometru vzdaleneho serveru, nemusite nikam jezdit. Prikladem muze byt v posledni dobe oblibeny Raspberry Pi hosting, kde jde dat disk pouze do SD a USB.
Vyuziti by mohlo byt i na ruzne 3G modemy a TV karty, pokud se z nejakeho duvodu zblazni a prestanou reagovat.

Pouzite zdroje:

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.