一、概述
公司最近要我實現USB設備插入Ubuntu后,自動共享到網絡上,能像Windows共享一樣(如\\192.168.1.10)訪問里面的內容,不需要寫入權限。當時聽完這需求,我這新人表示驚呆了,立刻上網搜相關文檔,並跑去問主管,這功能有人實現了不?主管很肯定地說,必須的。網上搜到的技術文檔只有插入USB設備自動掛載,自動共享沒搜到,這下只好靠自己了。
經過一番折騰總算在Ubuntu14.04桌面版實現了該功能,但還不完美,例如:默認只共享出來5個USB設備,USB1~5,拔出后設備還存在。文件系統支持常見的FAT32/NTFS/exFAT格式。好想吐槽,完成后還不知道這奇葩的需求究竟用來做什么...
實現過程:
1、插入USB設備,自動掛載(udev規則)
2、掛載后,使用SMB協議共享到網絡上,客戶端有讀取權限(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” 博客,謝絕轉載!