码迷,mamicode.com
首页 > 系统相关 > 详细

Linux自动共享USB设备:udev+Samba

时间:2015-07-11 11:51:53      阅读:246      评论:0      收藏:0      [点我收藏+]

标签:

一、概述

  公司最近要我实现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 2.6 内核里的一个功能,用于管理/dev下的设备文件,位于用户空间,以守护进程的形式运行。udev通过定义一个个udev规则,当有匹配的设备文件时执行定义好的规则

  ● Samba:在Linux上安装,使用SMB/CIFS网络协议共享出本地的文件夹,可让Windows/Linux主机在网络上访问

  ● 使用 udev 高效、动态地管理 Linux 设备文件

  ● 用udev自动挂载usb设备

  ● CentOS 6.3下Samba服务器的安装与配置

 

三、配置

注意:Ubuntu 14.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路径
    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:SanDisk 8G、FAT32

    U盘3:SanDisk 8G、NTFS

  √  U盘4:读卡器 8G、exFAT

  √  移动硬盘:ZALMAN 60G、NTFS

 

效果如下:

技术分享

技术分享

 

五、现存问题

  ● 只共享5个USB设备,USB1~5,拔出后设备还存在

  ● 共享内容只有读权限,不可写入

  ● udev规则有时不生效,USB设备拔出后设备不卸载,占用设备号。如插入sdb1,拔出后sdb1依旧存在,再次插入变为了sdc1,可用数量会减少

  (可写Shell脚本自动卸载解决)

 

Linux自动共享USB设备:udev+Samba

标签:

原文地址:http://www.cnblogs.com/sjy000/p/4638157.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!