嵌入式linux挂载usb文件系统,支持热插拔

2019-07-12 14:19发布

发布的linux版本默认是支持usb文件系统挂在的。 挂u盘之前,运行命令cat /proc/partitions,看看现在系统中有哪些分区。插上u盘以后,再次运行上述命令,看看多出来什么分区(通常是sda1或者 sdb1).  1、插入U盘   2、输入 fdisk -l /dev/sda 查看输出结果,比如我的是这样的:        # fdisk -l /dev/sda        Disk /dev/sda: 131 MB, 131104768 bytes       3 heads, 32 sectors/track, 2667 cylinders       Units = cylinders of 96 * 512 = 49152 bytes     Device Boot      Start         End      Blocks   Id System      /dev/sdb1   *           1        2668      128016    6 FAT16   3、看了上面的输出就知道U盘所在的设备了,比如我的就是/dev/sdb1,接着便是挂载了,假设我将U盘挂载到/mnt/usb目录(没有的话,新建)中,就是 mount -t msdos /dev/sdb1 /mnt/usb ;如果是fat16就使用下面的命令 mount -t msdos /dev/sdb1 /mnt/usb; 如果是fat32  mount -t vfat /dev/sdb1 /mnt/usb -o iocharset=utf8; 如果是ext2格式,就用命令:  mount -t ext2 /dev/sda1 /mnt/usb   4、打开/mnt/usb 就可以看到你的U盘里的东西了! cd   /mnt/usb  
不过如果在插入U盘以后如果再次拔掉U盘,通过命令fdisk -l查看之后会出现和上次不一样(开机后第一次是sda1,再次插拔是sdb1,再次插拔是sdc1)。为了支持热插拔,笔者写了个简单的shell脚本: if [ -r "/mnt/usb" ] #创建usb挂在目录
then
echo "/mnt/usb file exist"
else
mkdir /mnt/usb
echo "creat directory /mnt/usb"
fi


fdisk -l > file_info.txt     #通过命令查看当前U盘所在的盘符,并重定向到file_info.txt文件


line_info=$(sed -n 7p file_info.txt)   #获取file_info文件的第七行(根据环境不同,所在的行号不一样,我的是第七行)


echo "line_info = $line_info"


mount_info=$(echo $line_info | cut -c 1-9)  #获取第七行的1-9这几个字符为usb的设备文件节点(如:/dev/sda1这九个字符)


echo "mount_info = $mount_info"


if [ -r /mnt/usb/nextph_sep -o -r /mnt/usb/photo -o -r /mnt/usb/bodypart.db -o -r /mnt/usb/nextph_sep -o -r /mnt/usb/apollo.sh -o -r /mnt/usb/chinese.qm -o -r /mnt/usb/english.qm ]   #如果在/mnt/usb目录下有我需要的文件,证明已经挂在成功
then
echo "usb has been mounted before"
else 
mount -t vfat $mount_info /mnt/usb   #挂在usb
if [ $? = 0 ];then  #挂在成功
echo "mount usb success"
else
echo "mount usb failed"
exit 1
fi
fi