zoukankan      html  css  js  c++  java
  • linux 实现U盘自动挂载

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

    必要组件

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

    实现

    规则编写

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

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

    脚本编写

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

    插入动作脚本

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

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

    拔出动作脚本

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

    mount_point=$ID_FS_LABEL
    if [ -z $mount_point ];then
        mount_point=${DEVNAME##*/}
    fi
    if [ -n $mount_point ];then
        umount -l /media/$mount_point
        rm -r /media/$mount_point
    fi

    自动执行动作脚本

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

    
    UDISK=$1
    
    #  ---------------main control area ---------------
    while (true)
    do
        # probe mounted disk
        if [ -e "$UDISK" ];then
            echo "Mounted device [$UDISK] found !"
        else
            echo "Device not found [$UDISK] !"
        fi
            echo "Sleep for sometime..."
        sleep 3s
    done

    需要注意的问题

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

      1. 拷贝一份 /usr/lib/systemd/system/systemd-udevd.service/etc/systemd/system/ (推荐)
      2. 编辑/etc/systemd/system/MountFlags 改为 shared
      3. 重启即可。
  • 相关阅读:
    【Eolinker使用】接口测试--如何解决接口重定向
    ExtJS按钮
    Redis-消费模式
    Redis笔记教程
    C++中this指针的用法
    C — 对C语言的认识
    你还在迷茫什么
    2019-2020-1 20199324《Linux内核原理与分析》第四周作业
    2019-2020-1 20199324《Linux内核原理与分析》第三周作业
    2019-2020-1 20199324《Linux内核原理与分析》第二周作业
  • 原文地址:https://www.cnblogs.com/lvdongjie/p/9208577.html
Copyright © 2011-2022 走看看