/dev/ 目錄中含有代表裝置的虛擬檔案,每一個虛擬檔案代表系統上 的一個裝置,例如一個儲存裝置、USB 裝置或印表機,這些虛擬檔案稱為裝置名稱。
IDE 裝置的裝置名稱以 hd 開頭,而 SCSI 的裝置的裝置名稱以 sd 開頭,前置詞後面接一個字母,以 a 開始來代表磁碟的順序, 例如 /dev/hda 是第一個 IDE 硬碟,/dev/hdb 為第二個 IDE 硬碟,/dev/hdc 為第三個 IDE 磁碟,依此類推。
假如裝置名稱後面有一個號碼,該號碼代表分割區編號,例如 /dev/hda1 代表第一個 IDE 磁碟上的第一個分割區。
假如一個硬碟被實體移動到機器中的另一個位置,或者被移除或初始化失敗,將會導致某些 裝置名稱被變更,很有可能會造成無效的裝置名稱參照。 舉例來說,如 圖形 7-1 所示,當一部系統含有三個 SCSI 硬碟,而第二個 SCSI 硬碟被移除了,/dev/sdc 將會變成 /dev/sdb,這將導致任何對 /dev/sdc 的參照變為無效,而且也會造成對 /dev/sdb 的參照無效,因為它已經 是不同的磁碟了。
每一個硬碟有含有一個獨特的識別標籤,稱為一個 UUID,為了 要解決變更裝置名稱的問題,devlabel 使得您可以將這些 UUIDs 與使用者定義的裝置名稱產生關聯,也就是說將會從使用者定義的裝置名稱建立一個符號連結 到確切的裝置名稱。 假如真正的裝置名稱改變了,該符號連結也會根據它的 UUID 更新為 指向相同的磁碟,因此 IDE 與 SCSI 儲存裝置都可以由它們的使用者定義名稱所參照。
devlabel 也允許自動掛載熱插拔的裝置,例如卸除式的硬碟,以及 如數位相機之記憶卡的 USB 裝置。 假如已設定自動掛載,在插上該裝置後,它將會被掛載 在使用者定義的名稱下。
可以依據裝置名稱、分割區名稱或者是磁碟的 UUID,來新增使用者定義的裝置名稱。
使用下列的語法來為一個儲存裝置新增一個使用者定義的裝置名稱,所指定的裝置可以是 整個裝置或者是裝置上單一的分割區。
devlabel add -d <device> -s <symlink> |
例如要新增 /dev/work 符號連結以代表 /dev/hdb1 分割區,請使用下列指令:
devlabel add -d /dev/hdb1 -s /dev/work |
假如指令執行成功,將會顯示下列的資訊:
Created symlink /dev/work -> /dev/hdb1 Added /dev/work to /etc/sysconfig/devlabel |
如要依據裝置的 UUID 來新增一個裝置名稱,請使用下列的語法:
devlabel add -u <uuid> -s <symlink> |
如要使用 devlabel 來取得一個裝置的 UUID (或者是要找出該裝置 是否有 UUID),請使用下列的指令:
devlabel printid -d <device> |
符號連結的名稱必須是獨特的,假如要新增的符號連結名稱已存在,設定檔案不會被修改, 而且會顯示下列的訊息:
The file /dev/work already exists. Failure. Could not create a symlink. |
如要從 devlabel 的清單中移除一個符號連結,請使用下列的指令:
devlabel remove -s <symlink> |
這項紀錄已從設定檔案中移除,而且該符號連結已經被刪除了。
如要找出 devlabel 符號連結的狀態,請使用下列指令:
devlabel status |
將會傳回如下的輸出:
lrwxrwxrwx 1 root 9 Apr 29 13:20 /dev/work -> /dev/hdb1 lrwxrwxrwx 1 root 9 Apr 29 13:41 /dev/tcf -> /dev/hda1 |
在系統運作中,當一個例如新增或移除硬體的系統事件發生時,一個稱為 hotplug 的程式將會執行因應的動作,舉例來說,當連接一部 USB 硬碟或一個 USB 儲存媒體讀取器到 系統時,hotplug 將會藉由紀錄一個訊息到系統的紀錄檔案 (/var/log/messages),並且載入適當的核心模組以使該裝置能夠運作。
當插入一個 PCI, USB 或 IEEE 1394 (也稱為 FireWire)裝置時,hotplug 程式碼也會重新啟動 devlabel,以使得該卸除式的儲存媒體得到一個 使用者定義的裝置名稱(例如 /dev/usbcard),而且它或許還可以 自動掛載儲存裝置。
在將 USB 媒體讀取器插入電腦的 USB 連接埠後,請以 root 身份執行下列指令 (這裡的 /dev/sda1 是媒體卡的裝置名稱,而 /dev/usbcard 是使用者定義的裝置名稱):
devlabel add -d /dev/sda1 -s /dev/usbcard --automount |
這個指令會為掛載點增加一個紀錄到 /etc/sysconfig/devlabel 並且建立一個從 /dev/usbcard 到 /dev/sda1 的符號連結。 devlabel 的 -- automount 參數表示在 devlabel 重新啟動時,會自動掛載該裝置(假如在 /etc/fstab 檔案中有該裝置的紀錄,而且該裝置確實存在,也就是說有找到含有相同 UUID 的裝置)。
updfstab 是一個用來偵測 IDE 與 SCSI 匯流排上新裝置的程式, 假如該裝置在 /etc/fstab 檔案中不存在,它還會將該裝置的紀錄 新增到檔案中。 它也會新增 USB 裝置的紀錄,因為它們被視為 SCSI 裝置,請參考 updfstab 的 man page,以取得更多資訊。
當新增一個 USB 裝置時,hotplug 會執行 updfstab 程式,該程式會為該儲存裝置(如媒體卡)新增一項紀錄到 /etc/fstab 檔案中 (假如有的話)。 (假如插入一個不含任何卡片的媒體卡讀取器,則不會新增一項紀錄到該檔案中。) 所新增的那行會含有實際的裝置名稱(例如 /dev/sda1)與 kudzu 參數。 kudzu 參數告知 Kudzu [1] 可以移除該行(假如該裝置不存在的話),不過由於 devlabel 指令需要該行的存在,因此必須移除 kudzu 參數,以保留該行在檔案中,而且更改裝置名稱為 devlabel 的裝置名稱(例如 /dev/usbcard),並且建立掛載點(例如 /mnt/usbcard)。
在修改完該行後,應該如下所示:
/dev/usbcard /mnt/usbcard auto noauto,owner 0 0 |
由於 --automount 參數,當 devlabel 重新啟動後,且將 USB 裝置插入USB 卡片讀取器裝置中的儲存媒體會被掛載到
假如插入該 USB 卡片讀取器時,其中不含任何卡片,當您插入卡片後,請以 root 身份執行 devlabel restart 指令以掛載該媒體卡。
[1] | Kudzu 是一個在系統開機時執行的硬體偵測工具,以找出系統上已新增或移除的硬體。 |