USB 存储设备有可能在逻辑上断开连接:该设备仍处于插入状态,但在操作系统中不可见(例如,它未在 下列出/proc/bus/usb
)。也许其他类型的 USB 或其他可移动设备也会发生这种情况。例如,这可能会发生:
- Nautilus 卸载 USB 存储设备后;
- VirtualBox 声明 USB 存储设备后(该设备在连接到来宾中时会从 Linux 主机中消失,如果从来宾中分离则不会自动重新出现)。
驱动程序或硬件中发生了什么,最重要的是,(如何)设备可以在逻辑上重新连接(无需物理地将其拔出并重新插入)?
请注意,这个问题与安装无关。在“逻辑断开”状态下,内核认为 USB 总线上没有任何内容(因此当然也没有条目/dev
)。
答案1
有时可以在插入设备的 USB 总线分支上执行电源循环:
# echo suspend > /sys/bus/usb/devices/1-1/power/level
# echo auto > /sys/bus/usb/devices/1-1/power/level
应1-1
根据您的配置进行调整。lsusb -t
在弹出设备之前,您可以通过运行查看设备插入 USB 树的哪一部分。
您可以在 linux-usb 邮件列表上找到详细信息,这个线程例如。
答案2
udevadm info -a -n /dev/sdb
现在检查内核。例如,如果它连接到 Front UIP 的端口 2,那么它会是 1-1.2,如果它连接到 Front UIP 的端口 1,那么它会是 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
重置设备或其连接的集线器,设备应该会重新出现。这是一个小程序来做到这一点:
http://marc.info/?l=linux-usb-users&m=116827193506484
它适用于我尝试过的大多数 USB 驱动器,但也有例外,例如我的 Kingston DT 101 II 4GB,它在重置后无法执行 INQUIRY 和 READ CAPACITY 命令,并且在重新启动之前仍然无法使用。
如果设备从端口获取电源,并且您的 USB 集线器支持每端口电源控制,则您可以在不拔掉电源插头的情况下重新启动设备。这是一个控制电源的小程序:
http://marc.info/?l=linux-usb-devel&m=113724451205634
不幸的是,几乎没有 USB 集线器支持此功能,而且很难找到支持它的集线器。制造商不做广告。许多集线器也对此撒谎,例如,如果您执行“lsusb -v”,您可以看到“wHubCharacteristic”中广告的“每端口电源切换”,但实际上它不起作用。芯片组可能支持它,但制造商将端口电源引脚直接连接到电源而不是通过芯片组更容易/更便宜。
答案4
以下将断开 USB 设备。
sudo eject /dev/sde
以下将重新连接 USB 设备。
sudo eject -t /dev/sde
以上适用于我的 Linux Mint。