关于udev 自动挂载记录

例子参考博客文章: LINUX下 Udev详解

首先在新建此文件在/etc/udev/rules.d/目录下新建010.udev.rules,填入以下内容:

  ACTION=="add", KERNEL=="sd[a-z][0-9]", RUN+="/bin/mkdir -p /mnt/usb%n"
  ACTION=="add", KERNEL=="sd[a-z][0-9]", RUN+="/bin/mount -t auto /dev/%k /mnt/usb%n -o rw,noauto,sync,dirsync,noexec,nodev,noatime"
  ACTION=="remove", KERNEL=="sd[a-z][0-9]", RUN+="/bin/umount -l /mnt/usb%n"
  ACTION=="remove", KERNEL=="sd[a-z][0-9]", RUN+="/bin/rmdir /mnt/usb%n"

%k 代表该设备在内核里的名称,比如:"sda1"

%n 设备的内核号码,例如:sda1 的内核号码是 1

# 编辑好此文件,已完成udev规则填写,可能还不能自动挂载,以下是本人遇到的一些情况。

若自动挂载出问题:

  # 可以进行插拔U盘观察/var/log/syslog文件的输出,可以看到udev的输出,来进行原因分析。

1、原因一:禁用系统自动挂载,由于我的是ubuntu 20.04 LTS

    解决方法一(参考:禁用 Ubuntu 自动挂载功能

       $ gsettings set org.gnome.desktop.media-handling automount false

    解决方法二

       参考(未经测试):【工具】ubuntu18.04取消自动挂载

2、原因二:This is a systemd feature. The original udev command has been replaced by systemd-udevd

解决方法(参考:Udev rule to mount disk does not work):
  # sudo systemctl edit systemd-udevd
  

  [Service]   MountFlags=shared

   # 如果是 Ubuntu 20.04, 把 MountFlags=shared 改为 PrivateMounts=no

其他:

  获取未挂载分区的文件系统类型方法

  # /bin/lsblk -f | /bin/grep sdc2 | /usr/bin/cut -d' '  -f 2

   把sdc2替换你想查看的分区

  LINUX下 Udev详解这篇博客提到用以下方式挂载 vfat格式的文件系统,PROGRAM执行的命令结果会返回到RESULT, RESULT=="vfat" 进行对比,若RESULT等于vfat,则返回true,继续执行RUM后面的命令。

ACTION=="add", KERNEL=="sd[a-z][0-9]", PROGRAM=="/lib/udev/vol_id -t %N", RESULT=="vfat", RUN+="/bin/mount -t vfat -o rw,noauto,sync,dirsync,noexec,nodev,noatime,dmask=000,fmask=111 /dev/%k /media/usbhd-%k", OPTIONS="last_rule"
可是我的ubuntu没有/lib/udev/vol_id命令, 自己尝试把PROGRAM的值改为PROGRAM=“/bin/lsblk -f | /bin/grep sdc2 | /usr/bin/cut -d' '  -f 2”, 但是还是不起作用,不知道什么原因,若各位大佬知道的话,希望能告诉我
 
原文地址:https://www.cnblogs.com/sealin/p/14272748.html