Как восстановить логически отключенное USB-устройство?

55

Запоминающее устройство USB может быть логически отключено: устройство все еще подключено, но невидимо в операционной системе (например, оно не указано в списке /proc/bus/usb). Может быть, это может произойти и с другими видами USB или других съемных устройств. Это может произойти, например:

Что происходит в драйвере или в оборудовании, и, что наиболее важно, (как) можно логически переподключить устройство (без его физического подключения и включения)?

Обратите внимание, что этот вопрос не о монтаже. В состоянии «логически отключено» ядро ​​считает, что на шине USB ничего нет (и поэтому, конечно, там нет входа /dev).

Жиль "ТАК - перестань быть злым"
источник
Бесстыдный плагин: ответ работает для ядра 3.x и выше
Дмитрий Григорьев

Ответы:

21

Иногда можно выполнить цикл питания на ветви шины USB, где подключено устройство:

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

1-1Должно быть отрегулировано в конфигурацию. Вы можете увидеть, к какой части дерева USB подключено ваше устройство, запустив его lsusb -tперед извлечением.

Вы можете найти подробную информацию в списке рассылки linux-usb, например , в этой ветке .

jon_d
источник
6
«suspend» не работает на ядрах после 2.6.36.
alexisdm
Предполагая, что dmesgсообщает правильный идентификатор устройства («usb 9-4: USB отключить [...]»), это не работает в последней версии Arch Linux. /sys/bus/usb/devices/9-4Впоследствии пути нет .
l0b0
1
1. dmesg: ВНИМАНИЕ! мощность / уровень не рекомендуется; вместо этого используйте power / control 2. superuser.com/questions/371068/…
socketpair
Также suspendбольше не поддерживается в последних версиях ядра ....
Герт ван ден Берг
6

Перезагрузите устройство или концентратор, к которому оно подключено, и устройство должно появиться снова. Вот небольшая программа для этого:

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

Он работает для большинства USB-накопителей, которые я пробовал, но есть исключения, такие как мой Kingston DT 101 II 4 ГБ, который не выполняет команды INQUIRY и READ CAPACITY после сброса и остается непригодным для включения и выключения питания.

Вы можете выключить и снова включить устройство, если оно получает питание от порта, а концентратор USB поддерживает управление питанием для каждого порта. Вот небольшая программа для управления питанием:

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

К сожалению, почти нет USB-концентраторов, поддерживающих эту функцию, и очень трудно найти тот, который поддерживает ее. Производители не афишируют это. Многие хабы также лгут об этом, например, если вы делаете «lsusb -v», вы можете видеть «Коммутация питания на порт», объявленную в «wHubCharacteristic», но в действительности это не работает. Чипсет может поддерживать его, но для производителя было проще / дешевле подключить выводы питания порта непосредственно к источнику питания, а не проходить через чипсет.

user6223
источник
5

Я нашел, что этот ответ отлично работает на моей системе Gentoo. Также не забудьте включить устройство, если оно является важной частью вашей системы (например, мышь или клавиатура).

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

Чтобы увидеть, что вы отключаете / снова включаете:

cat /sys/bus/usb/devices/5-2/product
Avio
источник
Это, похоже, помогло моей современной системе Fedora 25. Некоторые другие методы больше не возможны.
xenithorb
5
udevadm info -a -n /dev/sdb

Теперь проверьте ядро. Например, если он подключен к порту 2 Front UIP, то это будет 1-1.2, а если он подключен к порту 1 Front UIP, то будет 1-1.1.

Для порта 2: для отключения USB:

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

Для подключения USB:

echo '1-1.2' | tee /sys/bus/usb/drivers/usb/bind
Удайя
источник
3

Я перепробовал большинство вышеперечисленных предложений, но они не сработали для меня. Я нашел способ перезагрузки USB-устройства из командной строки: https://askubuntu.com/a/290519

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

где $iвы можете использовать соответствующий идентификатор устройства с /sys/bus/pci/drivers/ehci_hcd.

Kakanakov
источник
Пожалуйста, отправьте больше, чем ссылка; включите некоторые детали, чтобы людям не пришлось нажимать, чтобы получить ответ.
jasonwryan
-5

Я не уверен, что правильно понимаю ваш вопрос, но в моей системе, если USB-устройство подключено, но не смонтировано, я могу «увидеть его» с помощью

$> fdisk -l

Это говорит мне, с каким устройством это связано (т.е. / dev / sdd1 или что-то), затем я вручную монтирую его.

Гай
источник
5
Опять же: нет, вопрос не в том, что файловая система становится недоступной (то есть размонтированной), а в том, что устройство становится недоступным (ядро не видит устройство, поэтому, конечно, под ним нет записи /dev).
Жиль "ТАК - перестань быть злым"