我尝试创建一些 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