如何在udev规则中挂载USB驱动器?

如何在udev规则中挂载USB驱动器?

我在 udev 中设置了一条规则,在后台运行一个脚本来自动挂载 USB 驱动器。它成功地运行了脚本,但由于某种原因挂载失败了。

规则:

ACTION=="add", KERNEL=="sd[a-z]*", RUN+="/etc/mntUsbChk.sh &"

在此脚本中:

#!/bin/sh

sleep 2

mkdir /mnt/usb

foundUsb=false

if [ -e /dev/sda1 ]; then
 mount /dev/sda1 /mnt/usb
 $foundUsb=true
fi

if [ -e /dev/sdb1 ]; then
  mount /dev/sdb1 /mnt/usb
  $foundUsb=true
fi

if [ -e /dev/sdc1 ]; then
  mount /dev/sdc1 /mnt/usb
  $foundUsb=true
fi

if [ $foundUsb -eq false ]; then
 exit
fi

echo "USB MOUNTED"

[1610.868626]FAT-fs(sdb1):卷未正确卸载。某些数据可能已损坏。请运行 fsck。

编辑:更多详细信息:该脚本肯定正在执行,因为该/mnt/usb文件夹是在我插入 USB 后创建的。

而且,如果我 mount /dev/sda1 /mnt/usb在插入 USB 后在启用规则之前手动输入,它就能很好地安装它。我只是不明白为什么它不能安装在规则 udev 中。

答案1

如果该脚本/mnt/usb已存在,则会失败。不确定这是否是问题的根源,但可以肯定是脚本错误。

mount /mnt/usb

改用:

mount -p /mnt/usb

man mount:

-p,--父母

如果存在则没有错误,根据需要创建父目录

答案2

您无法保证添加时 USB 驱动器将是 sda1、sdb1、sdc1。我认为那里可能需要一些更好的逻辑,但与问题完全无关。

对于该问题,请参阅下面的现有链接: 为什么Linux仅仅因为安装FAT而将其标记为“脏”?

我的理解是,只是从 Windows 机器上拔出 USB,不弹出并不会清除驱动器上的脏位。当脏位被设置时,Linux 会采取最坏的情况。我假设您可以自动运行 fsck 来清除此错误消息上的脏位(如果存在),然后再次进行安装。尽管我不确定调用 umount 或 fsck 是否会清除脏位。

我希望这朝着正确的方向发展。

答案3

尽管没有很好的文档记录,但您不应该mount从 Udev 规则运行。

请参见我对类似问题的回答的替代方案。

相关内容