linux系统u盘自动挂载

在linux系统中插入u盘时,系统会将u盘自动挂载到指定的目录,但是如果我们想要将u盘挂载到我们想要的目录上,就可以先用umount卸载u盘,再用mount挂载到自己想要的目录上,那如果想要在插入u盘的时候就让u盘挂载到我们想要的目录上呢。以下记录一下我本次实现的过程。

方法一:修改fstab

插入两个查看u盘属性的指令
fdisk -l 查看是否还存在u盘
blkid /dev/sda1 查看节点属性
在/etc/fstab中添加已经有的u盘,下次开机就能自动挂载
做法:在/etc/fstab中添加

UUID=XXX(/dev/sda1)  /mount_user  /xfs(/vfat)  defaults  0  0

问题:必须u盘要插这,如果自动挂载的节点不存在,会卡在内核,进不了系统
那针对这个问题,也有一个解决办法

例子:

/dev/sda1   /mount_user   auto  defaults,nofail,x-systemd.device-timeout=1,noatime  0  0

加入这一条指令后,在开机的时候就算不插入u盘,也会进入系统,而且,当你插入u盘后,也会自动挂载到所对应的目录
问题:但是,它知会读取一次,也就是说,当你在拔掉u盘,再插入的时候,就没有反应了。在我后续的了解中得知,导致这个问题的原因是,fstab的机制就是在开机的时候读取一次数据,之后就不做操作了,所以要实现u盘热插拔的问题,需要使用udev的机制。

方法二:使用udev判断u盘的热插拔

所有rules文件(无论在哪个目录下)依lexical order规则(由小到大)优先执行,同名文件,优先权:/etc/ > /run/ >/lib/,具体通过man指令查看
在/etc/udev/rules.d/路径下添加一条规则mount-usb.rules

ACTION!="add",GOTO="exit"
KERNEL=="sd[a-z][0-9]",RUN+="/sbin/mountusb.sh %k"
KERNEL=="sd[a-z]",RUN+="/opt/usb/mountusb.sh %k"
LABEL="exit"
ACTION !="remove",GOTO="exit"
SUBSYSTEM!="block",GOTO="exit"
KERNEL=="sd[a-z][0-9]",RUN+="/sbin/umountusb.sh"
LABEL="exit"

将拔插的脚本放在/sbin 或者对应的目录,具体脚本执行什么就可以自定义了。
在rk3399的buildroot文件系统中,是在/lib/udev/rules.d中的一个脚本,添加了指令,通过查看指令的代码得知,通过修改/etc/下的一个.conf ,就可以修改自动挂载的文件夹,原来自动挂载的文件夹是/media/usb*中。

具体udev 使用方法,参考链接 https://www.corvin.cn/474.html

猜你喜欢

转载自blog.csdn.net/weixin_43069863/article/details/118895707