Linux自動共享USB設備:udev+Samba


一、概述

  公司最近要我實現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服務器的安裝與配置

 

三、配置

注意: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掛載路徑,對應前面定義的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: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腳本自動卸載解決)

 

本文出自 “運維菜鳥.log” 博客,謝絕轉載!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM