A.3. udev Device Manager(裝置管理員)的 Device Mapper 支援

udev 裝置管理員的主要用途就是在 /dev 目錄中提供動態式的節點設定方式。這些節點的建置是以使用者空間中的 udev 應用程式規則來指定的。這些規則會直接在來自於 kernel 的 udev 事件上進行處理,以完成特定裝置的新增、移除,或變更。這為熱插拔支援提供了方便和中央化的機制。
除了建立實際的節點之外,udev 裝置管理員亦可以自己的名稱建立符號連結。這提供使用者視需求選擇自訂化命名,以及選擇 /dev 目錄中之目錄結構的自由。
各個 udev 事件皆包含了有關於被裝置的裝置的基本資訊,例如它的名、它所屬之子系統、裝置類型、所使用的 major 與 minor 號碼,以及事件的類型。除了能存取 /sys 目錄中所找到,並且 udev 規則中亦可存取的所有資訊,使用者亦能根據這項資訊,並條件性地執行規則,利用基本的過濾器。
udev 裝置管理員還提供了中央化的節點權限設定。使用者能輕易地新增一組自訂的規則,以定義任何在處理事件時,所能使用的任何資訊所指定的裝置。
您亦可在 udev 規則中直接新增 program hook。udev 裝置管理員可調用這些程式,以提供處理事件所需的額外處理。並且,程式亦可透過這項處理來匯出環境變數。任何得到的結果,皆可使用於規則中作為補充的資訊來源。
任何使用 udev 函式庫的軟體皆能取得和處理 udev 事件,以及所有資訊,因此處理程序便不僅限於 udev daemon。

A.3.1. udev 與裝置管理員的整合

在 RHEL 6 中,Device Mapper 提供了直接的 udev 整合支援。這可同步化 Device Mapper 以及所有與 Device Mapper 裝置相關的 udev 程序,包括 LVM 裝置。同步化是必要的,因為 udev daemon 中的規則應用程式格式,是與裝置變更來源之程式的平行處理。(例如 dmsetup 和 LVM)。少了這項支援,將造成一項以往使用者嘗試移除一個依然開啟,並由 udev 規則所處理的裝置,而造成了先前變更事件上的問題;這特別是在裝置變更之間的時間非常短的情況下,經常發生。
RHEL 6 發行版提供了一般 Device Mapper 裝置與 LVM 的正式 udev 規則支援。〈表格 A.1, “Device-Mapper 裝置的 udev 規則”〉概述了這些規則,並且這些規則安裝在 /lib/udev/rules.d 中。

表格 A.1. Device-Mapper 裝置的 udev 規則

檔案名稱 描述
10-dm.rules
包含了基本/一般的 Device Mapper 規則,並在 /dev/mapper 中建立了 symlink,它包含了一個 /dev/dm-N target,並且 N 代表一個 kernel 動態指定給裝置的數字(/dev/dm-N 是個節點)。
請注意:/dev/dm-N 節點絕不該使用於 script 中來存取裝置,因為 N 數字是動態式指定的,而會隨著裝置的啟用循序而改變。因此,應使用 /dev/mapper 目錄中的真實名稱。此格式是用來支援建立節點/symlink 時的 udev 需求。
11-dm-lvm.rules
包含了 LVM 裝置所套用的規則,並為卷冊群組的邏輯卷冊建立 symlink。Symlink 會被建立在 /dev/vgname 目錄中,並含有一個 /dev/dm-N 目標。
請注意:若要 Device Mapper 子系統未來所有的規則標準皆能一致,udev 規則應使用 11-dm-subsystem_name.rules 這種格式。任何提供 udev 規則的 libdevmapper 使用者也應遵照此標準。
13-dm-disk.rules 包含了一般可套用至所有 Device Mapper 裝置的規則,並在 /dev/disk/by-id/dev/disk/by-uuid 以及 /dev/disk/by-uuid 目錄中建立符號連結。
95-dm-notify.rules 包含了通知使用 libdevmapper(就如同 LVM 和 dmsetup)時的等待時間的規則。通知會在所有先前規則被套用後才會完成,以確保所有 udev 處理程序皆已完成。之後被通知的程序便會復原。
您可藉由 12-dm-permissions.rules 檔案來新增額外的自訂權限規則。此檔案並非安裝在 /lib/udev/rules 目錄中;它位於 /usr/share/doc/device-mapper-版本 目錄中。12-dm-permissions.rules 檔案是個範本,它包含了有關於如何根據一些相符規則,以設置權限的相關提示;此檔案包含了一些常見情況下的範例。您可編輯此檔案,並手動式地將它放置在 /etc/udev/rules.d 目錄中,如此一來當您進行更新時,這些設定皆能被保留住。
這些規則設置了所有當處理事件時,任何其它規則亦可使用的基本變數。
下列變數設置於 10-dm.rules 中:
  • DM_NAME:Device Mapper 裝置名稱
  • DM_UUID:Device Mapper 裝置 UUID
  • DM_SUSPENDED:Device Mapper 裝置的暫停狀態
  • DM_UDEV_RULES_VSNudev 規則版本(這主要是用來讓所有其它規則檢查,先前所提到的變數是否透過正式的 Device Mapper 規則所設置的)
下列變數設置於 11-dm-lvm.rules 中:
  • DM_UUID:Device Mapper 裝置 UUID
  • DM_VG_NAME:卷冊群組名稱
  • DM_LV_LAYER:LVM 層名
所有的這些變數皆可使用於 12-dm-permissions.rules 檔案中,以為特定 Device Mapper 裝置定義權限,如 12-dm-permissions.rules 檔案中所記載。