我知道这个问题已经得到很多解答,但我找不到一个可以自动实现的答案。我希望当我卸载外部硬盘的最后一个分区(因为它可能有多个分区)时,关闭外部硬盘的电源(),udisksctl power-off
这样我就可以安全地拔下 USB 电缆。
有没有办法可以编写一个 bash 脚本并将其挂接到全局分区卸载事件,这样我就可以检查该设备上安装的分区数量,如果该设备是外部硬盘,我可以发出关闭电源的命令。这可以做到吗?如果可以,怎么做?任何参考文档都可能对我有帮助。
这是在 Ubuntu 19.04 中。
答案1
这是 7 年前的故事。
问题是由于从版本 1 升级到版本 2 时 UDisk 的内部结构发生变化而引起的。LaunchPad
上记录为错误 1067876。我花了很多时间试图找出问题所在,但没有成功。
这是对你的问题的部分回答,但无论如何,这是一个可行的解决方案。
我在装有旋转硬盘和 USB 设备的机器上使用它。
我个人使用以下两种解决方案之一:
对于某些设备,我发现 Caja(MATE DE 文件管理器,Nautilus 2.3x 的分支)仍然具有安全移除驱动器。
单击它会导致硬盘旋转并关闭 USB 闪存/SSD 上的 LED
如果 Caja 上未显示安全删除,则我手动打开 GNOME 磁盘(
gnome-disks
命令),选择所需的驱动器并单击关闭电源在其界面中。然后 HDD 旋转停止并且 LED 熄灭。
编写自动脚本有点困难。您也可以尝试在 github 或其他地方搜索可能存在的解决方案。
答案2
还有一些半答案。
我为我的备份硬盘制作了一个桌面启动器。
cat bin/Backup-Platte-umount.sh
#!/bin/bash
#devicenodes finden
devname=$(findmnt | grep media | awk '{print $2}' | egrep -v 'sda|sdb')
export dev=$(findmnt | grep media | awk '{print $2}' | egrep -v 'sda|sdb' | sed 's/.$//' | head -n1)
#backup-platte umounten
umount $devname && notify-send 'Backup-Platte raus' && udisksctl power-off -b $dev
我会尽力解释。我不太擅长这个。
devname=$(findmnt | grep media | awk '{print $2}' | egrep -v 'sda|sdb')
这将在媒体中搜索挂载文件系统。我的 2 个内部磁盘被过滤掉egrep -v 'sda|sdb'
下一部分导出变量。
export dev=$(findmnt | grep media | awk '{print $2}' | egrep -v 'sda|sdb' | sed 's/.$//' | head -n1
Gives me the pur harddrive node for udisksctl power-off
findmnt | grep media | awk '{print $2}' | egrep -v 'sda|sdb' | sed 's/.$//' | head -n1
/dev/sdc
所以它就起作用了。
bash -x bin/Backup-Platte-umount.sh
++ findmnt
++ grep media
++ awk '{print $2}'
++ egrep -v 'sda|sdb'
+ devname='/dev/sdc1
/dev/sdc3
/dev/sdc2'
++ findmnt
++ grep media
++ awk '{print $2}'
++ egrep -v 'sda|sdb'
++ sed 's/.$//'
++ head -n1
+ export dev=/dev/sdc
+ dev=/dev/sdc
+ umount /dev/sdc1 /dev/sdc3 /dev/sdc2
+ notify-send 'Backup-Platte raus'
+ udisksctl power-off -b /dev/sdc
注意我仅使用 bash 作为 shell 进行测试