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、後臺自動執行卸載設備腳本


二、原理

  使用 udev 高效、動態地管理 Linux 設備文件

  用udev自動掛載usb設備

  CentOS 6.3下Samba服務器的安裝與配置

 

三、配置

注意: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

 

效果如下:

wKiom1W7bBvhzhLJAAPHS5myWSw511.jpg

wKioL1W7bg2SAOuwAAHcSV3dDBE073.jpg


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章