当外部驱动器卸载时我可以自动关闭它吗?

当外部驱动器卸载时我可以自动关闭它吗?

我知道这个问题已经得到很多解答,但我找不到一个可以自动实现的答案。我希望当我卸载外部硬盘的最后一个分区(因为它可能有多个分区)时,关闭外部硬盘的电源(),udisksctl power-off这样我就可以安全地拔下 USB 电缆。

有没有办法可以编写一个 bash 脚本并将其挂接到全局分区卸载事件,这样我就可以检查该设备上安装的分区数量,如果该设备是外部硬盘,我可以发出关闭电源的命令。这可以做到吗?如果可以,怎么做?任何参考文档都可能对我有帮助。

这是在 Ubuntu 19.04 中。

答案1

这是 7 年前的故事。
问题是由于从版本 1 升级到版本 2 时 UDisk 的内部结构发生变化而引起的。LaunchPad
上记录为错误 1067876。我花了很多时间试图找出问题所在,但没有成功。

这是对你的问题的部分回答,但无论如何,这是一个可行的解决方案。
我在装有旋转硬盘和 USB 设备的机器上使用它。

我个人使用以下两种解决方案之一:

  • 对于某些设备,我发现 Caja(MATE DE 文件管理器,Nautilus 2.3x 的分支)仍然具有安全移除驱动器

    在 Caja 中安全移除驱动器

    单击它会导致硬盘旋转并关闭 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 进行测试

相关内容