对于具有多个分区的SD卡,当从USB-SD读取器中卸下uSD或SD卡时,如何从udev中获取至少已安装节点的至少“更改”事件,而无需断开USB电缆的连接从您的PC?
奖金:获取“分区”节点(例如“ / dev / sdh2”)的“添加/删除”事件
在安装分区后,移除卡后,udev不会为分区节点输出任何事件!
创建一个新的udev规则,命名为:/etc/udev/rules.d/98-test.rules 内容:
KERNEL!="sd*" , SUBSYSTEM!="block", GOTO="END"
LABEL="WORK"
ACTION=="add", RUN+="/usr/bin/logger *****Received add event for %k*****"
ACTION=="remove", RUN+="/usr/bin/logger *****Received remove event for %k*****"
ACTION=="change", RUN+="/usr/bin/logger *****Received change event for %k*****"
LABEL="END"
安装ccze(sudo apt install ccze)。这将为您提供漂亮的彩色日志记录。
打开一个终端,运行以下命令:
journalctl -f | ccze -A
结果:
Mar 09 23:01:32 Ev-Turbo kernel: sd 6:0:0:3: [sdh] 30408704 512-byte logical blocks: (15.6 GB/14.5 GiB)
Mar 09 23:01:32 Ev-Turbo kernel: sdh: sdh1 sdh2
Mar 09 23:01:33 Ev-Turbo root[19519]: *****Received change event for sdh*****
Mar 09 23:01:33 Ev-Turbo root[19523]: *****Received change event for sdh*****
Mar 09 23:01:33 Ev-Turbo root[19545]: *****Received add event for sdh2*****
Mar 09 23:01:33 Ev-Turbo root[19552]: *****Received add event for sdh1*****
现在从插槽中取出uSD卡,但不要从计算机上断开USB电缆的连接。观看日志:
Mar 09 23:06:56 Ev-Turbo root[21220]: *****Received change event for sdh*****
Mar 09 23:06:56 Ev-Turbo root[21223]: *****Received remove event for sdh2*****
Mar 09 23:06:56 Ev-Turbo root[21222]: *****Received remove event for sdh1*****
现在,再次插入uSD卡,您将看到:
Mar 09 23:11:21 Ev-Turbo kernel: sd 6:0:0:3: [sdh] 30408704 512-byte logical blocks: (15.6 GB/14.5 GiB)
Mar 09 23:11:21 Ev-Turbo kernel: sdh: sdh1 sdh2
Mar 09 23:11:21 Ev-Turbo root[22652]: *****Received change event for sdh*****
Mar 09 23:11:21 Ev-Turbo root[22653]: *****Received change event for sdh*****
Mar 09 23:11:21 Ev-Turbo root[22679]: *****Received add event for sdh2*****
Mar 09 23:11:21 Ev-Turbo root[22682]: *****Received add event for sdh1*****
现在,尝试将分区之一安装到系统中的某个位置:
sudo mount /dev/sdh2 /media/uSD2
您可以再次检查它是否真正挂载(运行命令:lsblk,mount ...等)
现在,在安装分区后,从插槽中卸下uSD卡。观看日志:
Mar 09 23:12:32 Ev-Turbo root[23049]: *****Received change event for sdh*****
仅此而已...为什么不再有“删除”事件?
1)网络上有关udev / systemd / systemd-udevd和安装脚本的大多数信息已过时。特别是对于systemd v239,许多“已解决/有效”的答案都无法使用(解决问题2周,阅读网络上的大多数解决方案,在Debian 9.7,Linux Mint 18.3,Ubuntu 18.04上进行了测试)>
2)对于212以上的systemd版本,您需要服务文件来安装可移动设备。例: https://serverfault.com/questions/766506/automount-usb-drives-with-systemd
3)特别是对于systemd v239,需要禁用PrivateMounts才能通过systemd单元自动安装。有关详细信息:https://unix.stackexchange.com/questions/464959/udev-rule-to-automount-media-devices-stopped-working-after-systemd-was-updated-t
4)挂载单元文件并不适合所有情况,例如,当您要基于USB主机,端口,伦号挂载到某些特定目录时...但是在某些情况下,这种方法非常简单: https://dev.to/adarshkkumar/mount-a-volume-using-systemd-1h2f