一、概述
公司最近要我实现USB设备插入Ubuntu后,自动共享到网络上,能像Windows共享一样(如//192.168.1.10)访问里面的内容,不需要写入权限。当时听完这需求,我这新人表示惊呆了,立刻上网搜相关文档,并跑去问主管,这功能有人实现了不?主管很肯定地说,必须的。网上搜到的技术文档只有插入USB设备自动挂载,自动共享没搜到,这下只好靠自己了。
经过一番折腾总算在Ubuntu14.04桌面版实现了该功能,但还不完美,例如:默认只共享出来5个USB设备,USB1~5,拔出后设备还存在。文件系统支持常见的FAT32/NTFS/exFAT格式。好想吐槽,完成后还不知道这奇葩的需求究竟用来做什么...
实现过程:
1、插入USB设备,自动挂载(udev规则)
2、挂载后,使用SMB协议共享到网络上,客户端有读取权限(Samba服务器)
二、原理
使用 udev 高效、动态地管理 Linux 设备文件
用udev自动挂载usb设备
CentOS 6.3下Samba服务器的安装与配置
三、配置
(注意:Ubuntu14.04的Samba安装上后,服务默认开机启动,并且SELinux和防火墙都未影响服务,其他发行版可能需要配置。)
1、安装exFat包,支持exFAT格式的文件系统
root@Ubuntu1:~# sudo 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配置文件
root@Ubuntu1:~# vim /etc/samba/smb.conf [USB1] comment = USB1 path = /media/usb1 #第一个USB挂载路径,对应前面定义的udev规则 browseable = yes #浏览权限 guest ok = yes #匿名共享 writeable = yes #是否可写[USB2] comment = USB2 path = /media/usb2 browseable = yes guest ok = yes writeable = yes[USB3] comment = USB3 path = /media/usb3 browseable = yes guest ok = yes writeable = yes[USB4] comment = USB4 path = /media/usb4 browseable = yes guest ok = yes writeable = yes[USB5] comment = USB5 path = /media/usb5 browseable = yes guest ok = yes writeable = yes
5、重新加载配置文件
root@Ubuntu1:/etc/samba# /etc/init.d/smbd reload
四、测试
√ U盘1:金士顿2G、FAT32
√ U盘2:SanDisk8G、FAT32
√ U盘3:SanDisk8G、NTFS
√ U盘4:读卡器8G、exFAT
√ 移动硬盘:ZALMAN60G、NTFS
效果如下:
五、现存问题
●只共享5个USB设备,USB1~5,拔出后设备还存在
● 共享内容只有读权限,不可写入
● udev规则有时不生效,USB设备拔出后设备不卸载,占用设备号。如插入sdb1,拔出后sdb1依旧存在,再次插入变为了sdc1,可用数量会减少
(可写Shell脚本自动卸载解决)
本文出自 “运维菜鸟.log” 博客,谢绝转载!
新闻热点
疑难解答