mag*_*gva 17 udev mount usb-drive
我尝试创建一些 udev 规则来挂载和卸载我的 USB 闪存驱动器;目前的规则非常简单:
ACTION=="add",KERNEL=="sd[b-z]",RUN+="/root/scripts/plug_flash_drive.sh %k"
ACTION=="remove",KERNEL=="sd[b-z]",RUN+="/root/scripts/unplug_flash_drive.sh %k"
Run Code Online (Sandbox Code Playgroud)
plug_flash_drive.sh 也很简单:
device_name=$1
mount_options="umask=000,utf8"
if [ ! -e "/media/$device_name" ]; then
mkdir "/media/$device_name"
fi
sleep 1
/usr/bin/mount "/dev/$device_name" "/media/$device_name" -o "$mount_options"
Run Code Online (Sandbox Code Playgroud)
unplug_flash_drive.sh:
device_name=$1
umount "/dev/$device_name"
rmdir "/media/$device_name"
Run Code Online (Sandbox Code Playgroud)
我做了一些测试,所以我可以确定:
有人知道为什么在 udev 调用时不执行 mount 吗?
28/08/14 编辑:我在脚本末尾添加了“grep -q /proc/mounts && echo success || echo failure”,以检查我的调试日志是否在脚本结束之前实际安装了设备。即使 udev 调用了该脚本,该设备似乎也已安装在该点上。所以现在真正的问题是“当通过 udev 调用时,我的块设备似乎在挂载脚本结束后卸载了”:s
小智 22
systemd-udevd 在它自己的文件系统命名空间中运行,默认情况下,在 udev .rules 中完成的挂载不会传播到主机。为了使您的旧脚本工作,您可以MountFlags=shared
在/usr/lib/systemd/system/systemd-udevd.service
以下位置设置或(更好地)创建和编辑其副本/etc/systemd/system/
有关man 5 systemd.exec
更多信息,请参阅MountFlags
选项。