![使用 UHUBCTL 打开/关闭外部 USB SSD](https://linux22.com/image/230380/%E4%BD%BF%E7%94%A8%20UHUBCTL%20%E6%89%93%E5%BC%80%2F%E5%85%B3%E9%97%AD%E5%A4%96%E9%83%A8%20USB%20SSD.png)
我需要自动打开/关闭 Proxmox VE 8 zimaboard832 (Debian 12 Bookworm) 上的外部 USB 固态硬盘。这是可能的uhubctl?如果是,我怎样才能安全地制作一个打开/关闭 bash 脚本?
答案1
uhubctl
不关闭设备。它会关闭设备所连接的 USB 端口的电源。这具有断开和重新连接外部设备的效果(“端口关闭”导致断开连接,“端口打开”导致重新协商和重新连接)。
所以uhubctl
可能能够做你想做的事...如果USB端口本身能够被控制。并非所有 USB 端口都可以通过这种方式进行编程控制。
现在还可以udiskctl
强制磁盘断开连接。还有eject
命令。
因此,“删除”USB 设备有两种主要方法。使用哪个选项取决于使用什么文件管理器!
第一个是“软弹出”。这就是该eject
命令的作用,也似乎是“pcmanfm”的作用。在这种情况下,eject -t
将导致分区重新出现。这是有效的,因为设备仍然连接到总线(并且仍然显示在 /dev/ 中),因此操作系统可以控制它。根据您的设置是否自动挂载设备,此时删除磁盘可能是安全的。该设备仍然有电。
另一个则更“难”。这就是udiskctl power-off
Nautilus 所做的。这里设备实际上已从总线中删除,因此从 /dev/ 中消失
例如
# /usr/bin/udisksctl power-off -b /dev/sdg
# dmesg | tail -1
[179677.977567] usb 1-2.2: USB disconnect, device number 10
我们可以看到内核已报告 USB 设备已断开连接。lsusb
结果它不再出现。删除此设备是安全的。
最后我们可以尝试控制USB端口本身。
“usb 1-2.2”变得很重要。这意味着 USB 总线 1-2、端口 2。
我们可以uhubctl
通过关闭然后打开来重新启用它:
# /usr/sbin/uhubctl -l 1-2 -p 2 -a off
Current status for hub 1-2 [0bda:5411 Generic 4-Port USB 2.0 Hub, USB 2.10, 4 ports]
Port 2: 0101 power connect []
Sent power off request
New status for hub 1-2 [0bda:5411 Generic 4-Port USB 2.0 Hub, USB 2.10, 4 ports]
Port 2: 0000 off
# uhubctl -l 1-2 -p 2 -a on
Current status for hub 1-2 [0bda:5411 Generic 4-Port USB 2.0 Hub, USB 2.10, 4 ports]
Port 2: 0000 off
Sent power on request
New status for hub 1-2 [0bda:5411 Generic 4-Port USB 2.0 Hub, USB 2.10, 4 ports]
Port 2: 0101 power connect []
而且它又重新出现了!
[179834.775058] usb 1-2.2: new high-speed USB device number 11 using ehci-pci
[179834.888056] usb 1-2.2: New USB device found, idVendor=0781, idProduct=5567, bcdDevice= 1.00
[179834.888063] usb 1-2.2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[179834.888067] usb 1-2.2: Product: Cruzer Blade
[179834.888070] usb 1-2.2: Manufacturer: SanDisk
[179834.888074] usb 1-2.2: SerialNumber: 4C530000260115213093
请注意,并非所有集线器都可以通过这种方式控制。
对于具有“电源控制”功能的集线器来说,uhubctl
这是关闭远程设备电源的好方法。