Ren*_*Wal 13 usb unmount udev notify-send
用户在未卸载的情况下拔下 U 盘后,反复抱怨 U 盘上的数据丢失。我们在我们的机器上运行 Ubuntu 14.04 LTS。已启用自动安装。
因为我厌倦了在拔出之前记住它们要安全移除,所以我想让 Ubuntu 在拔出安装的 USB 驱动器时显示警报。
我想添加一个udev规则,该规则notify-send在驱动器仍然安装的情况下在移除时运行。如何确定 USB 驱动器在移除时是否已安装?
不幸的是,Micro$oft 实际上做对了这一点:移除 USB...而且你会一直遇到这个问题,直到你:
禁用自动挂载
如果用户必须手动安装,也可以更轻松地训练他们下车。
创建一个 udev 规则,关闭 USB 磁盘上的所有缓存...
我喜欢 Fabby 的方法,但教人们这个坏习惯是件好事(他们并不是一直在受控机器上工作)。这类似于 OSX 功能,如此处所述。
有一个小的区别,您可以使用它来知道它是否是安全删除:
udev 变量在不安全删除中为磁盘节点(而不是分区节点ID_PART_TABLE_TYPE=dos)设置。sdxsdxY
未设置安全删除的地方
通过监控udev事件注意到:
udevadm monitor -u --environment
Run Code Online (Sandbox Code Playgroud)
安全删除
UDEV [8292.380554] change /devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2:1.0/host16/target16:0:0/16:0:0:0/block/sdb (block)
ACTION=change
DEVLINKS=/dev/disk/by-id/usb-ADATA_USB_Flash_Drive_8d90ec535e6663-0:0 /dev/disk/by-path/pci-0000:00:14.0-usb-0:2:1.0-scsi-0:0:0:0
DEVNAME=/dev/sdb
DEVPATH=/devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2:1.0/host16/target16:0:0/16:0:0:0/block/sdb
DEVTYPE=disk
DISK_MEDIA_CHANGE=1
ID_BUS=usb
ID_INSTANCE=0:0
ID_MODEL=USB_Flash_Drive
ID_MODEL_ENC=USB\x20Flash\x20Drive\x20
ID_MODEL_ID=c96a
ID_PATH=pci-0000:00:14.0-usb-0:2:1.0-scsi-0:0:0:0
ID_PATH_TAG=pci-0000_00_14_0-usb-0_2_1_0-scsi-0_0_0_0
ID_REVISION=0.00
ID_SERIAL=ADATA_USB_Flash_Drive_8d90ec535e6663-0:0
ID_SERIAL_SHORT=8d90ec535e6663
ID_TYPE=disk
ID_USB_DRIVER=usb-storage
ID_USB_INTERFACES=:080650:
ID_USB_INTERFACE_NUM=00
ID_VENDOR=ADATA
ID_VENDOR_ENC=ADATA\x20\x20\x20
ID_VENDOR_ID=125f
MAJOR=8
MINOR=16
SEQNUM=2989
SUBSYSTEM=block
TAGS=:systemd:
USEC_INITIALIZED=554873
Run Code Online (Sandbox Code Playgroud)不安全删除
UDEV [8391.320280] remove /devices/pci0000:00/0000:00:14.0/usb1/1-3/1-3:1.0/host17/target17:0:0/17:0:0:0/block/sdb (block)
ACTION=remove
DEVLINKS=/dev/disk/by-id/usb-ADATA_USB_Flash_Drive_8d90ec535e6663-0:0 /dev/disk/by-path/pci-0000:00:14.0-usb-0:3:1.0-scsi-0:0:0:0
DEVNAME=/dev/sdb
DEVPATH=/devices/pci0000:00/0000:00:14.0/usb1/1-3/1-3:1.0/host17/target17:0:0/17:0:0:0/block/sdb
DEVTYPE=disk
ID_BUS=usb
ID_INSTANCE=0:0
ID_MODEL=USB_Flash_Drive
ID_MODEL_ENC=USB\x20Flash\x20Drive\x20
ID_MODEL_ID=c96a
ID_PART_TABLE_TYPE=dos
ID_PATH=pci-0000:00:14.0-usb-0:3:1.0-scsi-0:0:0:0
ID_PATH_TAG=pci-0000_00_14_0-usb-0_3_1_0-scsi-0_0_0_0
ID_REVISION=0.00
ID_SERIAL=ADATA_USB_Flash_Drive_8d90ec535e6663-0:0
ID_SERIAL_SHORT=8d90ec535e6663
ID_TYPE=disk
ID_USB_DRIVER=usb-storage
ID_USB_INTERFACES=:080650:
ID_USB_INTERFACE_NUM=00
ID_VENDOR=ADATA
ID_VENDOR_ENC=ADATA\x20\x20\x20
ID_VENDOR_ID=125f
MAJOR=8
MINOR=16
SEQNUM=3022
SUBSYSTEM=block
TAGS=:systemd:
USEC_INITIALIZED=436355
Run Code Online (Sandbox Code Playgroud)创建 udev 规则(更改useranme)
$ sudo nano /etc/udev/rules.d/90-unsafe-remove-notify.rules
ACTION=="remove", KERNEL=="sd?", ENV{ID_PART_TABLE_TYPE}!="", RUN+="/usr/bin/sudo -u username DISPLAY=:0 notify-send 'Unsafe Remove' '<b><i>Your long message</b></i>' -i /usr/share/icons/gnome/48x48/emotes/face-worried.png -t 10000"
Run Code Online (Sandbox Code Playgroud)重新加载规则
sudo udevadm control --reload-rules
Run Code Online (Sandbox Code Playgroud)另一种方法是,您可以使用连接到 DBUS 的脚本 (python) udisks。它包含您需要的有关分区安装/卸载、磁盘插入/拔出的所有信息...
参考/来源: Gentoo Wiki:Udisks - USB_Thumb_Drive_Example