udev 热插拔及自定义挂载目录

本文介绍如何关闭pcmanfm的移动设备自动挂载,并实现udev自动挂载U盘的示例,适用于所有RK系列Debian系统。。

前言

        Rockchip linaro Debian 系统使用 pcmanfm 作为文件管理器,并实现了U盘、TF卡等存储设备的自动挂载。软件使用设备分区的Label或UUID为名称,在 /media/linaro/ 目录创建挂载目录,当插入的U盘Label不一致时其挂载路径也会随之改变。本文介绍如何关闭pcmanfm的移动设备自动挂载,并实现udev自动挂载U盘的示例。

关闭pcmanfm可移动设备自动挂载

  • 1. 创建 /home/linaro/.config/pcmanfm/LXDE/pcmanfm.conf 文件
touch /home/linaro/.config/pcmanfm/LXDE/pcmanfm.conf
  • 2. 在 pcmanfm.conf 配置文件中添加以下内容
[volume]
mount_on_startup=0
mount_removable=0

设置 mount_on_startup 的值为 0,禁止开机启动时设备自动挂载;设置 mount_removable 的值为 0,禁止可移动设备拔插时自动挂载。

  • 3. 设置配置文件权限
chmod 644 /home/linaro/.config/pcmanfm/LXDE/pcmanfm.conf

重启系统,配置文件生效后,执行 mount -l 可发现U盘等设备已经没有自动挂载。

添加 udev 自动挂载规则

  • 1. 添加U盘自动挂载规则文件

udev 规则位于 /lib/udev/rules.d/ 目录,在该目录下创建规则文件 99-udisk-hotplug.rules,文件内容如下

#限制设备名称
KERNEL!="sd[a-z][0-9]", GOTO="udisk_hotplug_end"
#判断是否为块设备
SUBSYSTEM!="block",GOTO="udisk_hotplug_end"
#获取快设备信息
IMPORT{program}="/sbin/blkid -o udev -p %N"
#仅文件系统类型是非空时执行
ENV{ID_FS_TYPE}=="", GOTO="udisk_hotplug_end"
#当块设备Label非空时将label赋值给label_uuid_name,否则用uuid赋值
ENV{ID_FS_LABEL}!="", ENV{label_uuid_name}="%E{ID_FS_LABEL}"
ENV{ID_FS_LABEL}=="", ENV{label_uuid_name}="%E{ID_FS_UUID}"

#检测到插入/移除设备时,执行脚本文件,并传递设备名称和label_uuid_name
ACTION=="add", RUN+="/etc/udisk-hotplug.sh %k %E{label_uuid_name}"
ACTION=="remove",RUN+="/etc/udisk-hotplug.sh %k %E{label_uuid_name}"

LABEL="udisk_hotplug_end"
  • 2. 添加执行脚本

创建 /etc/udisk-hotplug.sh 文件,文件内容如下:

#!/bin/bash

if [ $# -ne 2 ]; then
        exit 1
fi

#获取设备名称
DEV_NAME=$1

#挂载主目录设置为/udisk
MAJOR_PATH=/udisk
#设置二级目录为获取到的label或uuid名称
MINOR_PATH=$2

if [ $ACTION == "add" ]; then
        mkdir -p $MAJOR_PATH/$MINOR_PATH
        /usr/bin/systemd-mount -o relatime,sync --no-block --collect  /dev/$DEV_NAME $MAJOR_PATH/$MINOR_PATH

        if [[ $? -ne 0 ]]; then
                rmdir $MAJOR_PATH/$MINOR_PATH
        fi
elif [ $ACTION == "remove" ];then
        if [[ -e $MAJOR_PATH/$MINOR_PATH ]]; then
                /usr/bin/systemd-mount --umount $MAJOR_PATH/$MINOR_PATH
                rmdir $MAJOR_PATH/$MINOR_PATH
        fi

fi

可将 MAJOR_PATH 和 MINOR_PATH 修改为自定义挂载路径。

  • 3. udevadm 使用

在不重启系统的情况下,让规则生效

udevadm control --reload

在不热插拔硬件的情况下使用 udevadm test 模拟设备的插入事件

udevadm test --action='add' /sys/class/block/sda1/

U盘挂载验证

当插入U盘时,U盘设备分区/dev/sda1 将自动挂载至 /udisk/KINGSTON 目录。移除U盘时,自动卸载并删除挂载目录。

# mount -l | grep /dev/sda1
/dev/sda1 on /udisk/KINGSTON type vfat (rw,relatime,sync,fmask=0022,dmask=0022,codepage=936,iocharset=utf8,shortname=mixed,errors=remount-ro) [KINGSTON]

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
可以通过udev配置来实现Linux中的热插拔,具体步骤如下: 1. 确认设备节点 首先需要确认设备节点,可以通过以下命令查看: ``` dmesg | tail ``` 在插入设备后,系统会输出设备信息,其中包括设备节点信息。例如,如果插入的是USB设备,通常会以`/dev/sdx`的形式显示。 2. 创建udev规则 在`/etc/udev/rules.d/`目录下创建一个新的规则文件,例如`10-usb.rules`,并在文件中添加以下内容: ``` ACTION=="add", KERNEL=="sd*", RUN+="/path/to/mount_script" ACTION=="remove", KERNEL=="sd*", RUN+="/path/to/unmount_script" ``` 其中,`/path/to/mount_script`和`/path/to/unmount_script`分别为挂载和卸载脚本的路径,可以根据实际情况进行修改。 3. 编写挂载脚本和卸载脚本 在指定的路径下分别创建挂载脚本和卸载脚本,例如`mount_script`和`unmount_script`,并分别添加以下内容: 挂载脚本: ``` #!/bin/bash DEVICE=$1 MOUNT_POINT="/mnt/usb" mkdir -p "${MOUNT_POINT}" mount "${DEVICE}" "${MOUNT_POINT}" ``` 卸载脚本: ``` #!/bin/bash DEVICE=$1 umount "${DEVICE}" ``` 注意,需要给挂载脚本和卸载脚本添加可执行权限: ``` chmod +x /path/to/mount_script chmod +x /path/to/unmount_script ``` 4. 重载udev规则 完成以上步骤后,需要重载udev规则使其生效: ``` sudo udevadm control --reload-rules ``` 现在,当插入/拔出设备时,系统会自动执行指定的脚本进行挂载/卸载操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Industio_触觉智能

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值