小编mag*_*gva的帖子

udev 调用时不执行 mount

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

我做了一些测试,所以我可以确定:

  • 插入时,检测到我的闪存驱动器;在 /dev 中创建了一个文件
  • plug_flash_drive.sh 被 udev 调用
  • 脚本的 mkdir 部分有效
  • 但是,脚本的“mount”部分似乎没有执行,所以我的驱动器没有安装
  • 当我在命令行上调用我的脚本时,它们完美地工作

有人知道为什么在 udev 调用时不执行 mount 吗?

28/08/14 编辑:我在脚本末尾添加了“grep -q /proc/mounts && echo success || echo failure”,以检查我的调试日志是否在脚本结束之前实际安装了设备。即使 udev 调用了该脚本,该设备似乎也安装在该点上。所以现在真正的问题是“当通过 udev 调用时,我的块设备似乎在挂载脚本结束后卸载了”:s

udev mount usb-drive

17
推荐指数
2
解决办法
8673
查看次数

标签 统计

mount ×1

udev ×1

usb-drive ×1