标签:服务器 linux usb自动挂载 udev samba
一、概述
公司最近要我实现USB设备插入Ubuntu后,自动共享到网络上,能像Windows共享一样(如\\192.168.1.10)访问里面的内容,不需要写入权限。当时听完这需求,我这新人表示惊呆了,立刻上网搜相关文档,并跑去问主管,这功能有人实现了不?主管很肯定地说,必须的。网上搜到的技术文档只有插入USB设备自动挂载,自动共享没搜到,这下只好靠自己了。
经过一番折腾总算在Ubuntu14.04桌面版实现了该功能。本文档默认共享5个USB设备,USB1~5;USB设备插入自动共享到「\\主机IP\Share」目录下,拔出时共享目录即时消失;文件系统支持常见的FAT32/NTFS/exFAT格式。
实现过程:
1、插入USB设备,自动挂载(udev规则)
2、挂载后,使用SMB协议共享到网络上,客户端有读取权限(Samba服务器)
3、后台自动执行卸载设备脚本
二、原理
三、配置
(注意:Ubuntu 14.04的Samba安装上后,服务默认开机启动,并且SELinux和防火墙都未影响服务,其他发行版可能需要配置。)
1、安装exFat包,支持exFAT格式的文件系统
root@Ubuntu1:~# apt-get install exfat-utils
2、定义udev规则,实现USB设备自动挂载
root@Ubuntu1:~# cd /etc/udev/rules.d/#udev规则目录 root@Ubuntu1:/etc/udev/rules.d# vim 70-persistent-net.rules#编辑规则文件 KERNEL!="sdb?", GOTO="automount_exit" ACTION=="add", SUBSYSTEM=="block", RUN+="/bin/mkdir /media/usb1", RUN+="/bin/mount -o uid=1000,user,codepage=936,utf8 $root/%k /media/usb1" ACTION=="remove", SUBSYSTEM=="block", RUN+="/bin/umount /media/usb1", RUN+="/bin/rmdir /media/usb1" LABEL="automount_exit" #当检测到sdb的设备,执行创建目录并挂载;设备删除后,卸载并删除目录 KERNEL!="sdc?", GOTO="automount_exit" ACTION=="add", SUBSYSTEM=="block", RUN+="/bin/mkdir /media/usb2", RUN+="/bin/mount -o uid=1000,user,codepage=936,utf8 $root/%k /media/usb2" ACTION=="remove", SUBSYSTEM=="block", RUN+="/bin/umount /media/usb2", RUN+="/bin/rmdir /media/usb2" LABEL="automount_exit" KERNEL!="sdd?", GOTO="automount_exit" ACTION=="add", SUBSYSTEM=="block", RUN+="/bin/mkdir /media/usb3", RUN+="/bin/mount -o uid=1000,user,codepage=936,utf8 $root/%k /media/usb3" ACTION=="remove", SUBSYSTEM=="block", RUN+="/bin/umount /media/usb3", RUN+="/bin/rmdir /media/usb3" LABEL="automount_exit" KERNEL!="sde?", GOTO="automount_exit" ACTION=="add", SUBSYSTEM=="block", RUN+="/bin/mkdir /media/usb4", RUN+="/bin/mount -o uid=1000,user,codepage=936,utf8 $root/%k /media/usb4" ACTION=="remove", SUBSYSTEM=="block", RUN+="/bin/umount /media/usb4", RUN+="/bin/rmdir /media/usb4" LABEL="automount_exit" KERNEL!="sdf?", GOTO="automount_exit" ACTION=="add", SUBSYSTEM=="block", RUN+="/bin/mkdir /media/usb5", RUN+="/bin/mount -o uid=1000,user,codepage=936,utf8 $root/%k /media/usb5" ACTION=="remove", SUBSYSTEM=="block", RUN+="/bin/umount /media/usb5", RUN+="/bin/rmdir /media/usb5" LABEL="automount_exit" root@Ubuntu1:/etc/udev/rules.d# shutdown -r now#重启系统
3、安装Samba
root@Ubuntu1:~# apt-get install samba samba-common
4、编辑Samba配置文件,共享/media目录
root@Ubuntu1:~# vim /etc/samba/smb.conf [Share] comment = Share path = /media#共享路径 browseable = yes guest ok = yes#匿名共享 writeable = yes root@Ubuntu1:/etc/samba# /etc/init.d/smbd reload#重新加载
5、编写脚本,防止系统BUG不自动卸载设备
root@Ubuntu1:~# vim usb.sh #!/bin/bash usb1=/dev/sdb? usb2=/dev/sdc? usb3=/dev/sdd? usb4=/dev/sde? usb5=/dev/sdf?#变量赋值 while true;#无限循环 do if ! [ -e $usb1 ] && ! [ -e $usb2 ] && ! [ -e $usb3 ] && ! [ -e $usb4 ] && ! [ -e $usb5 ] #如果不存在USB1~5的设备文件 then /bin/umount /media/usb* 2>/dev/null /bin/rmdir /media/usb* 2>/dev/null#执行卸载和删除目录操作 else exit fi sleep 1#每秒执行一次 done root@Ubuntu1:~# chmod +x usb.sh#执行权限
6、移动脚本到/Shell目录
root@Ubuntu1:~# mkdir /Shell root@Ubuntu1:~# mv usb.sh /Shell
7、脚本开机自启
root@Ubuntu1:~# vim /etc/rc.local nohup /Shell/usb.sh &#脚本后台执行
四、测试
√ U盘1:金士顿 2G、FAT32
√ U盘2:SanDisk 8G、FAT32
√ U盘3:SanDisk 8G、NTFS
√ U盘4:读卡器 8G、exFAT
√ 移动硬盘:ZALMAN 60G、NTFS
效果如下:
本文出自 “运维菜鸟.log” 博客,请务必保留此出处http://sjy000.blog.51cto.com/8412654/1680704
标签:服务器 linux usb自动挂载 udev samba
原文地址:http://sjy000.blog.51cto.com/8412654/1680704