uevents 和 GFS2¶
在 GFS2 掛載的生命週期中,會生成多個 uevent。本文件解釋了這些事件是什麼以及它們的作用(由 gfs2-utils 中的 gfs_controld 使用)。
GFS2 uevent 列表¶
1. ADD¶
ADD 事件在掛載時發生。它始終是新建立的檔案系統生成的第一個 uevent。如果掛載成功,將跟隨一個 ONLINE uevent。如果掛載不成功,則會跟隨一個 REMOVE uevent。
ADD uevent 具有兩個環境變數:SPECTATOR=[0|1] 和 RDONLY=[0|1],它們分別指定了檔案系統的旁觀者狀態(未分配日誌的只讀掛載)和只讀狀態(已分配日誌)。
2. ONLINE¶
ONLINE uevent 在成功掛載或重新掛載後生成。它具有與 ADD uevent 相同的環境變數。ONLINE uevent 以及用於旁觀者和 RDONLY 的兩個環境變數是相對較新的新增(2.6.32-rc+),舊版核心不會生成它們。
3. CHANGE¶
CHANGE uevent 用於兩個地方。一個是在第一個節點報告檔案系統成功掛載時(FIRSTMOUNT=Done)。gfs_controld 將此用作訊號,表明叢集中的其他節點可以掛載檔案系統了。
另一個 CHANGE uevent 用於通知檔案系統某個日誌的恢復完成情況。它有兩個環境變數:JID=,指定剛恢復的日誌 ID;以及 RECOVERY=[Done|Failed],指示操作的成功(或失敗)。這些 uevent 是為每個恢復的日誌生成的,無論是在初始掛載過程中,還是 gfs_controld 透過 /sys/fs/gfs2/<fsname>/lock_module/recovery 檔案請求特定日誌恢復的結果。
由於 CHANGE uevent 在早期版本的 gfs_controld 中未檢查環境變數以發現狀態就被使用,因此我們不能再向其新增更多功能,否則會有使用者使用舊版使用者工具並破壞其叢集的風險。因此,在新增新的用於成功掛載或重新掛載的 uevent 時,使用了 ONLINE uevent。
4. OFFLINE¶
OFFLINE uevent 僅因檔案系統錯誤而生成,並作為“撤回”機制的一部分使用。目前,它沒有提供任何關於錯誤是什麼的資訊,這是需要修復的。
5. REMOVE¶
REMOVE uevent 在不成功掛載結束時或檔案系統解除安裝結束時生成。所有 REMOVE uevent 之前都至少有一個針對同一檔案系統的 ADD uevent,並且與其他 uevent 不同,它由核心的 kobject 子系統自動生成。
所有 GFS2 uevent 的共同資訊(uevent 環境變數)¶
1. LOCKTABLE=¶
LOCKTABLE 是一個字串,透過掛載命令列 (locktable=) 或 fstab 提供。它用作檔案系統標籤,並提供 lock_dlm 掛載加入叢集所需的資訊。
2. LOCKPROTO=¶
LOCKPROTO 是一個字串,其值取決於掛載命令列或 fstab 中設定的內容。它將是 lock_nolock 或 lock_dlm。未來可能會支援其他鎖管理器。
3. JOURNALID=¶
如果檔案系統正在使用日誌(旁觀者掛載不分配日誌),那麼在所有 GFS2 uevent 中都會提供數字日誌 ID。
4. UUID=¶
在使用最新版本的 gfs2-utils 時,mkfs.gfs2 會將 UUID 寫入檔案系統超級塊。如果存在,此 UUID 將包含在每個與檔案系統相關的 uevent 中。