gentoo linux自動 掛載隨身碟 方法(zt)

tonykorn97發表於2008-04-09
目前一些主流桌面系統(如Gnome,KDE,Xfce)的較新版本都支援自動掛載(mount)隨身碟了. 一個流傳很廣的說法是 HAL(硬體抽象層) 起了自動掛載的作用, 其實這是誤解. 對於2.6核心而言, udev 才是直接從核心接收裝置連線或斷開資訊的主體.
udev 從核心得到資訊後,根據一些簡單規則(注意,是簡單規則), 在 /dev 目錄下建立相應的裝置節點, 並進行某些相關操作. HAL 所做的事情是在 udev 的規則中加上一條(或幾條), 讓 udev 把收到的資訊也傳遞給 HAL. 接下來, HAL 用更為複雜的規則來匹配和描述當前連線著的硬體. 舉一個簡單的例子, udev 知道的是隨身碟已經連線了並且有一個分割槽; 而 HAL 能更進一步知道這個分割槽的卷標名及其它一些資訊.

上面這些都還不能自動掛載隨身碟. Gnome 等桌面系統會啟動一個守護程式(daemon), 透過 D-Bus 從 HAL 那裡得到硬體資訊, 如果發現有隨身碟連線了就由它們來掛載它(實際是呼叫 pmount).

問題是, 如果你不想用Gnome,KDE,Xfce這些桌面系統, 那麼由它們提供的隨身碟自動掛載功能也就失效了,有解決辦法麼?

解決的辦法之一, 便是讓 udev 來幹這件事情!

udev 的主要功能是實時地在 /dev 目錄下建立和刪除裝置節點, 但它也能在建立節點的同時, 執行一個額外地程式. 具體的原理這裡就不詳說了, 有時間請仔細閱讀 Writing udev rules 這篇文章. 寫規則時特別注意 KERNEL, SUBSYSTEM 等這些關鍵字單數和複數(最後有沒有'S')的區別. 複數(比如 KERNELS)表示你想用父裝置的屬性來匹配, 單數(比如 KERNEL)是要匹配裝置本身的屬性.

在 /etc/udev/rules.d 目錄下建立檔案 10_usbkey.rules, 其內容如下

KERNEL=="sda1", SUBSYSTEM=="block", RUN+="/root/usbmount.sh"

然後, 在 /root 目錄中建立檔案 usbmount.sh, 其內容為
QUOTE:
#!/bin/bash

LOG=/var/log/usb-hotplug.log

lap=$(date --rfc-3339=ns)
echo "$lap: $DEVPATH requesting $ACTION" >> $LOG

if [ $ACTION == "add" ]
then
mount -t vfat -o umask=000,noatime,async,codepage=936,iocharset=gb2312
/dev/sda1 /media/usbkey
elif [ $ACTION == "remove" ]
then
umount -l /media/usbkey
fi

並把該檔案屬性設定為可執行, chmod a+x usbmount.sh

注意, 如果你的 linux 上 locale 是 zh_CN.utf-8, 需要把上面的 iocharset=gb2312 改成 iocharset=utf8

最後建立目錄, mkdir /media/usbkey

這是一個非常簡單但可用的例子. 隨身碟插上後自動 mount 到 /media/usbkey , 拔出後自動 umount. 你可以檢視 /var/log/usb-hotplug.log , 裡面會有些簡單的呼叫記錄.

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/312079/viewspace-245857/,如需轉載,請註明出處,否則將追究法律責任。

相關文章