udev 是Linux kernel 2.6系列的设备管理器,主要管理/dev目录底下的设备节点,监听设备的插拔事件。磁盘自动挂载技术通过对udev规则的设置,让udev收到内核发来的磁盘插拔消息后进行磁盘的自动挂载。具体工程如下:
1.修改udev配置文件(/etc/udev/udev.conf)
udev_root="/dev/"
udev_rules="/etc/udev/rules.d/"
udev_log="err"
2. 配置规则文件(/etc/udev/rules.d)
在rules.d下新建mount.rules规则文件(ubuntu系统在1804之后不再支持 脚本方式,以系统服务方式来执行操作)
KERNEL=="sd[b-z]", NAME="%k", SYMLINK+="usb%m", OPTIONS="last_rule"
ACTION=="add", KERNEL=="sd[b-z][0-9]", SYMLINK+="usb%m", NAME="%k"
ACTION=="add", KERNEL=="sd[b-z][0-9]", RUN+="/bin/mkdir -p /mnt/%k"
ACTION=="add",KERNEL=="sd[b-z][0-9]",SUBSYSTEM=="block",ENV{ID_BUS}=="usb",TAG+="systemd", PROGRAM="/bin/systemd-escape -p %k", ENV{SYSTEMD_WANTS}+="mount.service"
ACTION=="remove", KERNEL=="sd[b-z][0-9]", RUN+="/bin/umount -l /mnt/%k"
ACTION=="remove", KERNEL=="sd[b-z][0-9]", RUN+="/bin/rmdir /mnt/%k", OPTIONS="last_rule"
3.配置系统服务(/etc/systemd/system)
在system下新建mount.service系统服务
[Unit]
Description=mountservice
After=network.target
[Service]
Type=forking
User=root
Group=root
WorkingDirectory=/mnt
ExecStart=/etc/systemd/system/mount.sh start
[Install]
WantedBy=multi-user.target
4.配置挂载脚本(/etc/systemd/system)
在system下新建mount.sh挂载脚本
#!/bin/bash
var2="/mnt/sdb"
for V in $(ls /dev/sd[b-z][0-9])
do
echo $V
var2=$V
echo ${var2:5:4}
/bin/mount $V /mnt/${var2:5:4}
done