我拥有 Seagate Free Agent 外置硬盘已有 4-5 年了。插入并完成文件传输后,我会点击菜单“安全移除”。然后它会正常关闭,停止内部磁盘的旋转。触摸时我能感觉到它。此外,电源灯也会熄灭。
最近我买了一个新的外置硬盘,WD Elements。如果我对此硬盘发出“安全移除”命令,它只会被卸载,但不会自行关闭电源,而且磁盘继续旋转,触摸时我能感觉到。我还尝试了 Ubuntu 附带的“磁盘”应用程序中的“关闭驱动器电源”按钮。同样,它只是被卸载了。
我希望 WD Elements 硬盘能够正常关闭,然后再手动拔下电源。我认为在硬盘停止运行之前强行拔下电源可能会缩短其使用寿命。
还有其他命令或程序可以帮助我做到这一点吗?
答案1
您需要一个包含实用程序的附加包来实际关闭 WD,因为 WD 不支持开箱即用的 Linux:
sudo apt-get install usdisks2
sudo udisksctl power-off --block-device /dev/XdY
其中X
和Y
是与您的磁盘相对应的字母。
答案2
到目前为止,我还没有找到文件管理器中“安全弹出”的简单替代方法,所以这是我在这里使用命令行的理由。
首先,您需要找到外部硬盘驱动器的设备 ID 或块 ID。然后,您可以使用udisks
或udisksctl
卸载并实际关闭设备。我已经回答过相关问题前段时间刚开始使用 ubuntu 的时候,建议大家也参考一下。基本上,我使用的udisks --unmount /dev/sdb1 && udisks --detach /dev/sdb
sdb1 是挂载点,sdb 是实际磁盘。
您可以使用lsblk
并按挂载点和大小来识别它;另一方面,您可以使用udisksctl status
。例如,我现在连接了一个 Sandisk Cruiser USB 驱动器。命令的输出如下:
如您所见,两个报告都显示我的 USB 驱动器被识别为 /dev/sdc。每次您插入 USB 设备时,它都会被识别为不同的字母,sdb、sdc、sdf 等等,而 sda 始终是您的硬盘驱动器。
因此,就我而言,我会使用 或 Fabby 建议的方法弹出 USB udisks --unmount /dev/sdc1 && udisks --detach /dev/sdc
。使用我使用的单行命令,我注意到设备 ID 被保留了下来,也就是说,如果我弹出 USB 并重新连接,它仍然会显示设备sdc
名称。
提示:您可以使用udisksctl status | grep -i wd
它仅显示外部硬盘驱动器的信息。
现在,这是我纯粹为了好玩而做的事情,但你会发现它很有用,并可以适应你自己的需求。如果我们可以编写一个脚本来为我们进行安全弹出,会怎么样?
我们需要让 shell 知道外部硬盘或 usb 的块 ID。此命令的输出是什么:udisksctl status | grep -i sandisk | xargs echo
?输出内容如下:SanDisk Cruzer Glide 1.27 2005425573077FA0AA67 sdd
,或者换句话说,是有关 usb 的信息,以空格分隔,设备 ID 是最后一个参数,或者说是第 6 个参数。在这里,我们可以使用 cut 命令来提取它,如下所示:udisksctl status | grep -i sandisk | xargs echo | cut -d' ' -f6
当然,对于你来说,你必须使用udisksctl status | grep -i wd | xargs echo
并计算你的块 id 是哪个元素,然后使用适当的数字cut -d' ' -fx
接下来,我整理了脚本 remove-usb.sh。它在这里:
#!/bin/sh
DEVICE=$( udisksctl status | grep -i sandisk | xargs echo | cut -d' ' -f6 )
udisks --unmount /dev/$(echo $DEVICE)1 && udisks --detach /dev/$DEVICE
接下来,将其放在我的 /home/user/bin 文件夹中,chmod +x /home/user/bin/remove-usb.sh。不要忘记将 bin 文件夹添加到你的路径。现在您还可以创建一个。桌面文件或者使脚本在文件管理器中可执行
以下是实际的脚本
答案3
下面的 shell 脚本可以帮我完成这项工作。
#!/bin/sh
DEVICE=$(udisksctl status | grep -i "WD Elements" | xargs echo | cut -d' ' -f6)
udisks --unmount /dev/$(echo $DEVICE)1
sudo udisksctl power-off --block-device /dev/$DEVICE
它实际上是@Serg 和@Fabby 的帖子中想法的结合。