Comment reconnecter un périphérique USB déconnecté logiquement?

55

Il est possible qu'un périphérique de stockage USB soit déconnecté de manière logique: le périphérique est toujours branché, mais est invisible du système d'exploitation (par exemple, il n'est pas répertorié sous /proc/bus/usb). Peut-être que cela peut arriver à d'autres types d'USB ou à d'autres périphériques amovibles. Cela peut arriver par exemple:

Que se passe-t-il dans le pilote ou dans le matériel et, plus important encore, (comment) le périphérique peut-il être reconnecté logiquement (sans le brancher et le retirer physiquement)?

Notez que cette question ne concerne pas le montage. Dans l'état «déconnecté logiquement», le noyau estime qu'il n'y a rien sur le bus USB (et donc bien sûr, il n'y a pas d'entrée en dessous /dev).

Gilles, arrête de faire le mal
la source
Prise sans vergogne: réponse pour le noyau 3.x et supérieur
Dmitry Grigoryev

Réponses:

21

Il est parfois possible de faire un cycle d'alimentation sur une branche du bus USB où le périphérique est branché:

# echo suspend > /sys/bus/usb/devices/1-1/power/level
# echo auto > /sys/bus/usb/devices/1-1/power/level

Le 1-1devrait être ajusté à votre configuration. Vous pouvez voir à quelle partie de l'arborescence USB votre périphérique est branché en l'exécutant lsusb -tavant de l'éjecter.

Vous pouvez trouver des informations détaillées sur la liste de diffusion linux-usb, ce fil par exemple.

jon_d
la source
6
"suspendre" ne fonctionne pas sur les noyaux après la version 2.6.36.
alexisdm
En supposant dmesgque l'ID de périphérique correct soit signalé ("usb 9-4: déconnexion USB [...]"), cela ne fonctionne pas sur le dernier Arch Linux. Il n'y a pas de chemin /sys/bus/usb/devices/9-4après.
l0b0
1
1. dmesg: AVERTISSEMENT! puissance / niveau est obsolète; utilisez power / control à la place 2. superuser.com/questions/371068/…
socketpair
En outre, suspendn’est plus pris en charge sur les versions récentes du noyau ....
Gert van den Berg
6

Réinitialisez le périphérique ou le concentrateur auquel il est connecté. Le périphérique devrait réapparaître. Voici un petit programme pour le faire:

http://marc.info/?l=linux-usb-users&m=116827193506484

Cela fonctionne pour la plupart des clés USB que j'ai essayées, mais il existe des exceptions, comme mon Kingston DT 101 II 4 Go, qui échoue après la réinitialisation des commandes INQUIRY et READ CAPACITY et reste inutilisable jusqu'à ce qu'il soit mis hors tension.

Vous pouvez effectuer un cycle d'alimentation du périphérique sans le débrancher s'il est alimenté par le port et si votre concentrateur USB prend en charge le contrôle de l'alimentation par port. Voici un petit programme pour contrôler le pouvoir:

http://marc.info/?l=linux-usb-devel&m=113724451205634

Malheureusement, presque aucun hub USB ne prend en charge cette fonctionnalité, et il est très difficile de trouver celui qui la supporte. Les fabricants ne font pas de publicité. De nombreux hubs mentent également à ce sujet, par exemple, si vous faites "lsusb -v", vous pouvez voir "Commutation d'alimentation par port" annoncé dans "wHubCharacteristic", mais en réalité cela ne fonctionne pas. Le chipset le supporte peut-être, mais il était plus simple et moins cher pour le fabricant de connecter les broches d’alimentation du port directement à l’alimentation au lieu de passer par le chipset.

utilisateur6223
la source
5

J'ai trouvé cette réponse efficace sur mon système Gentoo. N'oubliez pas de réactiver votre appareil s'il s'agit d'un élément important de votre système (souris ou clavier, par exemple).

sudo sh -c 'AUTHFILE="/sys/bus/usb/devices/5-2/authorized" ; echo 0 > "$AUTHFILE" ; sleep 1 ; echo 1 > "$AUTHFILE"'

Pour voir ce que vous désactivez / réactivez:

cat /sys/bus/usb/devices/5-2/product
Avio
la source
Cela semblait faire l'affaire sur mon système moderne Fedora 25. Certaines des autres méthodes ne sont plus possibles.
xenithorb
5
udevadm info -a -n /dev/sdb

Maintenant, vérifiez le noyau. Par exemple, s'il est connecté au port 2 de Front UIP, il serait alors 1-1.2 et s'il était connecté au port 1 de Front UIP, il serait alors 1-1.1.

Pour le port 2: Pour déconnecter l'USB:

echo '1-1.2' | tee /sys/bus/usb/drivers/usb/unbind

Pour connecter une clé USB:

echo '1-1.2' | tee /sys/bus/usb/drivers/usb/bind
Udaya
la source
3

J'ai essayé la plupart des suggestions ci-dessus, mais elles n'ont pas fonctionné pour moi. J'ai trouvé comment réinitialiser un périphérique USB à partir de la ligne de commande: https://askubuntu.com/a/290519

echo $i >/sys/bus/pci/drivers/ehci_hcd/bind

$ivous pouvez utiliser l’ID de périphérique approprié /sys/bus/pci/drivers/ehci_hcd.

Kakanakov
la source
S'il vous plaît poster plus que le lien; inclure des détails afin que les gens n'aient pas à cliquer pour obtenir une réponse.
jasonwryan
-5

Je ne suis pas sûr de bien comprendre votre question, mais sur mon système, si un périphérique USB est branché mais pas monté, je peux le "voir" par

$> fdisk -l

Cela me dit à quel périphérique il est associé (par exemple / dev / sdd1 ou quelque chose), puis je le monte manuellement.

bev
la source
5
Encore une fois: non, la question ne concerne pas un système de fichiers devenant inaccessible (c'est-à-dire non monté), il s'agit d'un périphérique devenant inaccessible (le noyau ne voit pas un périphérique, donc bien sûr, il n'y a pas d'entrée /dev).
Gilles, arrête de faire le mal