使用 UHUBCTL 打开/关闭外部 USB SSD

使用 UHUBCTL 打开/关闭外部 USB SSD

我需要自动打开/关闭 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-offNautilus 所做的。这里设备实际上已从总线中删除,因此从 /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这是关闭远程设备电源的好方法。

相关内容