Linux如何自动挂载U盘

约定不等于承诺〃 2022-09-22 01:12 362阅读 0赞

某些场景下,服务器可能没有必要的键盘等输入设备、屏幕等输出设备。此时需要在没有人为干预的情况下实现当插入U盘或者硬盘后自动挂载,并执行某些脚本动作。以下是我的实践过程。

必要组件

  • udev,udisks
  • busybox (需要用到blkid)可以直接获取到设备的卷标,这样就可以指定挂载路径名称了。

实现

规则编写

编写udev规则实现U盘插入时候的动作。规则文件写在/etc/udev/rules.d 下。
如上, 通过规则定义U盘插入与拔出的动作即可,动作的具体实现可以在规则中编写,也可以通过指定执行脚本来实现。本文的规则中仅指定执行脚本。
规则如下:

  1. ENV{DEVTYPE}="partition",RUN+="/lib/udev/automount.sh",ENV{REMOVE_CMD}="/lib/udev/autounmount.sh"

脚本编写

将脚本文件写在/lib/udev 下,根据上文规则,应该分别实现插入的动作脚本和拔出的动作脚本。

插入动作脚本

主要在于需要获取到设备的卷标,来确定挂载的路径(即$ID_FS_LABEL)

  1. #!/bin/sh
  2. mount_point=$ID_FS_LABEL
  3. if [ -z $mount_point ];then
  4. mount_point=${DEVNAME##*/}
  5. fi
  6. if [ -n $mount_point ];then
  7. mkdir -p /media/$mount_point
  8. mount -t $ID_FS_TYPE -o gid=100,dmask=000,fmask=111,utf8,flush,rw,noatime,users $DEVNAME /media/$mount_point
  9. fi

拔出动作脚本

在U盘拔出时候,及时删掉挂载的路径

  1. mount_point=$ID_FS_LABEL
  2. if [ -z $mount_point ];then
  3. mount_point=${DEVNAME##*/}
  4. fi
  5. if [ -n $mount_point ];then
  6. umount -l /media/$mount_point
  7. rm -r /media/$mount_point
  8. fi

自动执行动作脚本

这样,当U盘插入时,/media/ 下就会出现于卷标相同的文件夹,并挂载上了U盘。因此,需要实现U盘插入自动执行的话,通过轮询探测/media/ 下相应目录是否存在即可。
如:

  1. UDISK=$1
  2. # ---------------main control area ---------------
  3. while (true)
  4. do
  5. # probe mounted disk
  6. if [ -e "$UDISK" ];then
  7. echo "Mounted device [$UDISK] found !"
  8. else
  9. echo "Device not found [$UDISK] !"
  10. fi
  11. echo "Sleep for sometime..."
  12. sleep 3s
  13. done

需要注意的问题

新版本的udev可能会遇到mount失效的问题,通过查询资料可知,udev的rules运行于独立的文件空间上,与用户的文件空间不同,因此及时挂载上了,用户也无法访问。因此需要将udev的运行方式改为共享。
修改方式如下:

  1. 拷贝一份 /usr/lib/systemd/system/systemd-udevd.service/etc/systemd/system/ (推荐)
  2. 编辑/etc/systemd/system/MountFlags 改为 shared
  3. 重启即可。

发表评论

表情:
评论列表 (有 0 条评论,362人围观)

还没有评论,来说两句吧...

相关阅读

    相关 LINUX下的U挂载

       linux下如果没有图形界面的情况下就要我们自己熟悉命令来挂载U盘,下面给大家详细描述下U盘的挂载过程。 1、 插入U盘 2、 \sudo fdisk –l 查看所

    相关 Linux如何自动挂载U

    某些场景下,服务器可能没有必要的键盘等输入设备、屏幕等输出设备。此时需要在没有人为干预的情况下实现当插入U盘或者硬盘后自动挂载,并执行某些脚本动作。以下是我的实践过程。 必

    相关 linux挂载U

    linux挂载U盘                                               别出USB之后(在字符界面下也有提示,在没进shell的主