关于实现udev/mdev自动挂载与卸载

在网上有很多关于讲mdev的自动挂载基本上都是一个版本,经过测试自动挂载确实可行,但是关于自动卸载mdev似乎不能很好的支持,经过修改已经可以做到与udev的效果相似。不能在挂载的目录中进行热插拔,否则会出现问题,不过此问题在下次插入U盘时不会造成影响,可能对U盘有损坏。

本文介绍了mdev与udev两种方法来实现自动挂载,读者可根据需要任选其一即可。

        首先介绍一下mdev与udev之间的关系:

        mdev是busybox中的一个udev管理程序的一个精简版,他也可以实现设备节点的自动创建和设备的自动挂载,只是在实现的过程中有点差异,在发生热插拔时间的时候,mdev是被hotplug直接调用,这时mdev通过环境变量中的 ACTION 和 DEVPATH,来确定此次热插拔事件的动作以及影响了/sys中的那个目录。接着会看看这个目录中是否有“dev”的属性文件,如果有就利用这些信息为这个设备在/dev 下创建设备节点文件。

 

 

/***********************************************************************************************************************************************************************************/

1.mdev支持

①用busybox制作根文件系统的时候,要选择支持mdev机制

Linux System Utilities  --->   
           [*] mdev      
           [*]   Support /etc/mdev.conf
           [*]     Support command execution at device addition/removal

②在文件系统/etc/init.d/rsC文件中添加如下内容

Vi  /etc/init.d/rcS
        mount -t tmpfs mdev /dev 
        mount -t sysfs sysfs /sys
        mkdir /dev/pts
        mount -t devpts devpts /dev/pts

        echo /sbin/mdev>/proc/sys/kernel/hotplug
        mdev –s

这些语句的添加在busybox的/doc/mdev.txt中可以找到。

 

③添加对热插拔事件的响应,实现U盘和SD卡的自动挂载。

Vi /etc/mdev.conf
       sd[a-z][0-9]      0:0 666        @/etc/mdev/udisk_insert                        

         sd[a-z]                   0:0 666          $/etc/mdev/udisk_remove

红色部分,是一个脚本,脚本内容可以根据我们的需要定制,可以实现挂载,卸载或其他一些功能。

注:@表示是在插入(创建设备结点)后执行后面的脚本,$表示在拔出(删除设备结点)前执行后面的脚本。

如下是自动挂载和卸载的脚本名称及其内容:

#!/bin/sh

if [ -d /sys/block/*/$MDEV ]  ; then

  mkdir -p /media/$MDEV

  mount /dev/$MDEV /media/$MDEV 

fi

根文件系统中的etc/mdev/udisk_remove文件内容:

        #!/bin/sh

        umount -l /media/$MDEV

        rm -rf /media/$MDEV

 

        #!/bin/sh

        umount -l /media/sd*

        rm -rf /media/sd*

修改为红色部分后能够自动挂载

以上两个脚本需要可执行权限:chmod +x  /etc/mdev/udisk_insert

               chmod +x etc/mdev/udisk_remove

/***********************************************************************************************************************************************************************************/

2.udev支持 

        linux传统上使用静态设备创建的方法,在dev下创建了大量的节点,而不管这些节点相应的硬件设备是否存在。采用udev的方法,系统检测到设备才会去创建这些设备对应的节点。

        这里我们简单的说一下udev的工作原理:

        udev是依赖于sysfs的,当系统中添加一个新的设备后,内核检测到后就会产生一个hotplug event并查找/proc/sys/kernel/hotplug去找出管理设备连接的用户空间程序,若udev已经启动,内核会通知udev去检测sysfs中关于这个新设备的信息并创建设备节点。如/dev/vcs,在/sys/class/tty/vcs/dev存放的是”7:0”,既/dev/vcs的主次设备号。并且udev还会根据/etc/udev/rules.d中的规则文件实现一些相应的功能。

下面我们介绍一下如何实现设备节点的自动创建及u盘或sd卡的自动挂载。

因为文件系统中默认是没有对udev进行支持的,所以我们移植一个udev。

1.下载udev源码udev-100.tar.bz2,并解压

网址:http://www.us.kernel.org/pub/linux/utils/kernel/hotplug

2.交叉编译。

修改makefile,具体修改如下:

        cross = arm-linux-

保存退出。

然后执行命令:make 进行编译,然后执行arm-linux-strip udev udevd udevstart udevinfo udevtest,并拷贝这些文件到目标板根文件/bin目录下面。

3.添加udev的支持

下面三种方法功能相同

        (1)并修改etc/init.d/rcs脚本,然后添加如下命令:

        /bin/mount -t sysfs sysfs /sys 

        /bin/mount -t tmpfs tmpfs /dev

        /bin/udevd --daemon

        /bin/udevstart

        (2)如果linuxrc是二进制文件的话 

        rm /linuxrc

        vi /linuxrc

        添加如下内容

        /bin/mount -t sysfs sysfs /sys

        /bin/mount -t tmpfs tmpfs /dev

        /bin/udevd --daemon

        /bin/udevstart

        exec /sbin/init

        (3)修改/etc/fstab为

        #device mount-point type options dump fsck order

        proc /proc proc defaults 0 0

        tmpfs /tmp tmpfs defaults 0 0

        sysfs /sys sysfs defaults 0 0

        tmpfs /dev tmpfs defaults 0 0

        修改/etc/init.d/rcs,添加如下内容

/bin/udevd --daemon

/bin/udevstart

        重新启动系统,文件系统就能够自动创建节点。

 

4.在/etc下创建udev目录

5.在/etc/udev下穿件目录rules.d和文件udev.conf

6.在udev.conf中添加如下内容

# udev.conf

        # the initial syslog(3) priority: "err", "info", "debug" or its

        # numerical equivalent. for runtime debugging, the daemons internal

        # state can be changed with: "udevcontrol log_priority=<value>".

        udev_log="err"

7.在rules.d下创建规则文件

如实现u盘自动挂载

        vim 11-add-usb.rules

添加如下内容

        action!="add",goto="farsight"

        kernel=="sd[a-z][0-9]",run+="/sbin/mount-usb.sh %k"

        label="farsight"

这个文件中action后是说明是什么事件,kernel后是说明是什么设备比如sda1,mmcblk0p1等,run这个设备插入后去执行哪个程序%k是传入这个程序的参数,这里%k=kernel的值也就是sda1等http://www.woaidiannao.com。

在/sbin/下创建mount-usb.sh文件添加如下内容 计算机

        #!/bin/sh

        /bin/mount -t vfat /dev/$1 /tmp

        sync

修改文件权限为其添加可执行的权限。

这样就实现了u盘的自动挂载,下面附上u盘的卸载规则文件和sd卡的文件

usb卸载

11-add-remove.rules

        action !="remove",goto="farsight"

        subsystem!="block",goto="farsight"

        kernel=="sd[a-z][0-9]",run+="/sbin/umount-usb.sh"

        label="farsight"

umount-usb.sh

        #!/bin/sh

        sync

        umount /tmp/

sd卡挂载

12-add-sd.rules

action!="add",goto="farsight"

        kernel=="mmcblk[0-9]p[0-9]",run+="/sbin/mount-sd.sh %k"

        label="farsight"

mount-sd.sh

        #!/bin/sh

        /bin/mount -t vfat /dev/$1 /tmp

        sync

 

sd卸载

12-remove-sd.rules

        action !="remove",goto="farsight"

        subsystem!="block",goto="farsight"

        kernel=="mmcblk*",run+="/sbin/umount-sd.sh"

        label="farsight"

umount-sd.sh

        #!/bin/sh

        sync

        /bin/umount /tmp/

时间: 2024-07-30 15:12:09

关于实现udev/mdev自动挂载与卸载的相关文章

《Ubuntu Linux 从入门到精通》——6.2 挂载与卸载分区

6.2 挂载与卸载分区 学习了Ubuntu的磁盘管理基础知识后,本节讲解挂载及卸载包括磁盘在内的各种常见设备的方法,这些方法主要涉及shell命令中的mount和umount两个命令的使用. 6.2.1 挂载与卸载分区的方法 1.挂载的基础知识 通过对前一节的学习,读者已经认识到在Ubuntu中,所谓分区的概念,其实就是挂载点的含义.在Ubuntu中,可以将所有的设备都看作是一个文件,要使用某个设备或某个文件之前,都必须先将其挂载到系统中.挂载的含义就是把磁盘的内容放到某一个目录下.本小节介绍常

RHEL5如何使用自动挂载工具Autofs挂载文件

        Autofs是自动挂载工具,用于挂载文件系统,在启动Linux系统的时候,Autofs也会自动运行,下面小编将给大家介绍下RHEL5使用Autofs挂载文件的方法. 将磁盘/dev/sdb用autofs挂载到/data/abc目录下. 新增磁盘,然后重启. [root@localhost~]# reboot 实现触发挂载需编辑两个文件.编辑/etc/auto.master文件,可以参考文件中系统默认的触发挂载编辑.首先写上所挂载目录的父目录,即/data 然后写上所要编辑的另一个

Linux下开机自动挂载NTFS分区为可写

  自动挂载对于linux系统来讲就是安装硬盘了,今天我们来为各位介绍在Linux下开机自动挂载NTFS分区为可写技巧文章希望下文对各位有帮助. 升级到 OpenSUSE 13.2 之后,原来配置为可自动挂载并进行写入操作的 Windows NTFS 分区现在不会自动挂载了,在磁盘管理中配置了自动挂载且不勾选"Mount Read-Only"居然也无法直接写入.又折腾了好久才根据坎离枫整理的博文搞明白了. 要在 Windows + Linux 双系统中的 Linux 系统里使用 Win

linux中挂载新硬盘到目录,并开机自动挂载例子

 挂载硬盘对于linux系统来讲是一个比较常见的问题了,下面我们来看看linux中挂载新硬盘到目录,并开机自动挂载例子紧,     今天,在整理图片时,发现根目录硬盘空间已经所剩无几了,而网站和所有相关文件主要放置在根下data目录(/data)里,但/home下是有空间,而又不想把文件放到/home下面去,只有再加一个新硬盘,对以后/data目录的文件管理也比较好. 那么就先关掉主机,再加上新硬盘(其它电脑使用过的500G硬盘),插上后再启动电脑. 接下来,就开始工作了: 1. 查看硬盘信息:

linux中mount/umount命令的基本用法及开机自动挂载方法_Linux

本文介绍了linux中mount/umount命令的基本用法及开机自动挂载,具体方法如下: mount命令格式如下: 格式:mount [-参数] [设备名称] [挂载点] 其中常用的参数有: -a 安装在/etc/fstab文件中类出的所有文件系统. -f 伪装mount,作出检查设备和目录的样子,但并不真正挂载文件系统. -n 不把安装记录在/etc/mtab 文件中. -r 讲文件系统安装为只读. -v 详细显示安装信息. -w 将文件系统安装为可写,为命令默认情况. -t <文件系统类型

Linux自动挂载文件/etc/fstab

Linux自动挂载文件/etc/fstab 关于linux开机之后自动加载挂载的分区,这块,涉及到的文件是/etc/fstab文件 关于这个文件的描述说明如下: 要求: 1)根目录/必须载入,而且要先于其他载入点被载入 2)其他载入点必须为已建立的目录 3)若进行卸载,必须先将工作目录移到载入点及其子目录之外 下面是/etc/fstab的实例 # This file is edited by fstab-sync - see 'man fstab-sync' for details LABEL=

Linux mount挂载和卸载硬盘脚本分享_Linux

Linux 挂载 [root@whp6 ~]# mount /dev/sdb5 /mnt/ [root@whp6 ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/sda3 16G 2.1G 13G 14% / tmpfs 931M 0 931M 0% /dev/shm /dev/sda1 194M 28M 157M 16% /boot /dev/sdb5 2.0G 68M 1.9G 4% /mnt [root@whp6 ~]#

LINUX磁盘分区、格式化、挂载、卸载详细过程_Linux

1.一切皆文件 Linux系统有一个理念:"一切皆文件",所以计算机的硬件在linux中也是以"文件"的形式存在于/dev目录中.  图为CentOS 6.5系统中/dev目录的部分内容.不同的计算机显示的内容大同小异. 比如,光驱对应的文件是/dev/cdrom,CPU对应的文件是/dev/cpu.而硬盘对应的是/dev/sd*.第一块硬盘是/dev/sda,第二块磁盘是/dev/sdb. 但是一个磁盘通常又被分成多个分区,所以在磁盘文件的后面加上分区的序号来对应

Ubuntu12.04自动挂载windows磁盘

好吧,NTFS.目前windows使用最多到文件系统. 出于安全方面考虑,Ubuntu12.04安装来之后就能自动识别到windows到NTFS文件系统磁盘.而且,在主文件夹里面就可以直接点开,老是担心一不小心就将其格式化了. 原本是想解决这个问题到,正所谓船到桥头自然直哈,设置了windows磁盘自动挂载在Ubuntu系统中后,这个问题也随之解决了. 先看如何挂载吧,如图.mount有几个参数.有需要就百科. 为了安全起见,设置C盘不自动挂载.同时,执行 mount -a 命令也是挂载只读,同