Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

全球檔案系統 2

Red Hat Enterprise Linux 6

Red Hat 全球檔案系統 2

版 7

摘要

本書提供了有關於配置與維護 Red Hat Enterprise Linux 6 中,Red Hat GFS2(Red Hat Global File System 2,Red Hat 全球檔案系統 2)的相關資訊。

簡介

本書提供了有關於配置與維護 Red Hat Enterprise Linux(簡稱 RHEL)6 中,Red Hat Global File System 2(全球檔案系統 2,簡稱 GFS2)的相關資訊,它包含在 Resilient Storage 外掛程式中。

1. 閱讀對象

這本書的使用對象為熟悉以下項目的 Linux 系統管理者:
  • Linux 系統管理步驟,包括核心設定
  • 安裝、設定共享的網路儲存裝置,例如光纖通道的 SAN(區域儲存網路)

3. 我們需要您的意見!

如果您發現本指南中有謬誤之處,或任何能改善本文件的方法,我們竭誠歡迎您的意見。請至 http://bugzilla.redhat.com/ 使用 Bugzilla,並針對於 Red Hat Enterprise Linux 6 產品和 doc-Global_File_System_2 元件提交您的意見。當提交錯誤報告時,請記得提供指南的識別元:
rh-gfs2(EN)-6 (2014-10-8T15:15)
如果您有任何改善本文件的建議,請盡可能地詳述內容。如果您發現了錯誤,請告知我們章節與其附近的文字,如此一來我們便能更輕易地找到錯誤。

章 1. GFS2 總覽

Red Hat GFS2 檔案系統包含在 Resilient Storage 外掛程式中。它是一種原生性的檔案系統,直接與 Linux 核心檔案系統介面(VFS 層)連繫。當實作為叢集檔案系統時,GFS2 會使用分散式 metadata 與多重日誌。Red Hat 僅支援使用如實作於 High Availability 外掛程式中的 GFS2 檔案系統。

注意

儘管 GFS2 檔案系統可實作於獨立系統中,或是作為叢集配置的一部分,不過在 RHEL 6 發行版中,Red Hat 不支援使用 GFS2 來作為單節點的檔案系統。Red Hat 支援幾種優化於單獨節點的高效能單節點檔案系統,因此一般擁有比叢集檔案系統還要低的負載量。Red Hat 建議只有一個單獨節點需要掛載檔案系統時,使用這些檔案系統來代替 GFS2。
Red Hat 將繼續支援單節點 GFS2 檔案系統,以掛載叢集檔案系統的 snapshot(比方說用於備份)。

注意

Red Hat 不支援在超過 16 個節點的情況下使用 GFS2 來進行叢集檔案系統建置。
GFS2 根基於 64 位元架構,因此理論上可支援到 8 EB 的檔案系統。然而,目前在 64 位元系統上,GFS2 檔案系統所能支援的最大大小為 100 TB;32 位元則為 16 TB。如果您的系統需要使用更大的 GFS2 檔案系統空間,請聯絡 Red Hat 的業務代表。
在決定檔案系統的大小時,您也應考量復原上的需求。在容量非常大的檔案系統上執行 fsck.gfs2 指令,會花上很長一段時間,並耗費大量的記憶體。除此之外,如果磁碟或磁碟子系統失效,復原時間會受限於您備份媒介的速度。欲取得 fsck.gfs2 指令所需記憶體數量的相關資訊,請參閱〈節 4.11, “修復檔案系統”〉。
當 Red Hat GFS2 節點配置於叢集中時,GFS2 節點可藉由 High Availability 外掛程式之「配置與管理工具」來進行配置與管理。接下來,Red Hat GFS2 會為叢集中的 GFS2 節點提供資料共享,並在 GFS2 節點之間提供單一、一致的檔案系統名稱空間。這能讓不同節點上的程序以同樣方式,共享 GFS2 的檔案,就像在同一節點上的程序可共享本機檔案系統上的檔案一般,無任何不同之處。欲取得更多有關於 High Availability 外掛程式上的相關資訊,請參閱《配置與管理 Red Hat 叢集》。
雖然 GFS2 檔案系統可能會使用於 LVM 之外,Red Hat 僅支援建立於 CLVM 邏輯卷冊上的 GFS2 檔案系統。CLVM 包含在 Resilient Storage 外掛程式中。它是個 LVM 的叢集全域實作,由 CLVM daemon clvmd 啟動,它能管理叢集中的 LVM 邏輯卷冊。此 daemon 能讓您透過使用 LVM2 管理叢集中的邏輯卷冊,讓叢集中的所有節點共享邏輯卷冊。欲取得更多有關於 LVM 卷冊管理程式上的相關資訊,請參閱《邏輯卷冊管理程式管理》。
gfs2.ko 核心模組實作了 GFS2 檔案系統,會由 GFS2 叢集節點所載入。

注意

將 GFS2 檔案系統配置為叢集檔案系統時,您必須確認叢集中的所有節點皆能存取共享儲存裝置。非對稱的叢集配置(某些節點可存取共享儲存裝置,某些節點則無法存取)不受到支援。這並不需要所有節點實際地掛載 GFS2 檔案系統。
本章提供了一些基本、簡述的資訊,作為幫助您了解 GFS2 的背景。其中包括以下幾節:

1.1. 新功能與功能上的改變

此部份列出了 GFS2 檔案系統的新功能和功能上的改變,以及包含在 RHEL 6 初始發行版及之後版本中的 GFS2 文件。

1.1.1. RHEL 6.0 的新功能與變更功能

RHEL 6.0 包含了以下文件與功能更新及變更。
  • 在 RHEL 6.0 發行版上,Red Hat 不支援使用 GFS2 來作為單節點檔案系統。
  • 在 RHEL 6.0 發行版上,用來將檔案系統由 GFS 升級至 GFS2 的 gfs2_convert 指令已改善。欲取得這項指令上的相關資訊,請參閱〈附錄 B, 將 GFS 檔案系統轉換為 GFS2〉。
  • RHEL 6.0 發行版支援 discardnodiscardbarriernobarrierquota_quantumstatfs_quantum,以及 statfs_percent 掛載選項。欲取得更多有關於掛載 GFS2 檔案系統上的相關資訊,請參閱〈節 4.2, “掛載檔案系統”〉。
  • 本文件的 RHEL 6 版本包含了新的部份,〈節 2.9, “GFS2 節點鎖定”〉。此部份詳述了部份的 GFS2 檔案系統內部資訊。

1.1.2. RHEL 6.1 的新功能與變更功能

RHEL 6.1 包含了以下文件與功能更新及變更。

1.1.3. RHEL 6.2 的新功能與變更功能

RHEL 6.2 包含了下列文件與功能更新及改變。

1.1.4. RHEL 6.3 的新功能與變更功能

在 RHEL 6.3 發行版中,此文件包含了新的章節〈章 2, GFS2 配置和操作上的考量〉。此章節提供了有關於優化 GFS2 效能上的建議,包括建立、使用和維護 GFS2 檔案系統上的建議。
此外,文件中還包含了些微的說明與修正。

1.1.5. RHEL 6.4 的新功能與變更功能

RHEL 6.4 版本中,〈章 2, GFS2 配置和操作上的考量〉已經更新,釐清一些內容。

1.1.6. RHEL 6.6 的新功能與變更功能

在 RHEL 6.6 發行版中,此文件包含了新的章節〈章 6, 配置 Pacemaker 叢集中的 GFS2 檔案系統〉。此章節提供了設定 Pacemaker 叢集(其中包括 GFS2 檔案系統)的所需步驟。
此外,文件中還包含了些微的說明與修正。

1.2. 設定 GFS2 之前

在您安裝、設定 GFS2 之前,請留意您 GFS2 檔案系統的以下特性:
GFS2 節點
決定哪些節點需要掛載 GFS2 檔案系統。
檔案系統的數目
決定一開始要建立幾個 GFS2 檔案系統。(您可在稍後增加更多檔案系統。)
檔案系統名稱
為每個檔案系統決定一組獨特的名稱。這組名稱在叢集上的所有 lock_dlm 檔案系統中,必須是獨特的。各個檔案系統名稱的格式皆必須為參數變數。比方說,本書在某些範例程序中使用了檔案系統名稱 mydata1mydata2
日誌
決定您 GFS2 檔案系統的日誌數量。每個掛載了 GFS2 檔案系統的節點,皆需要一份日誌。GFS2 能讓您在稍後更多伺服器掛載檔案系統時,再動態新增日誌。欲取得更多有關於新增日誌至 GFS2 檔案系統的相關資訊,請參閱〈節 4.7, “新增日誌至檔案系統”〉。
儲存裝置與分割區
決定用來建立檔案系統中的邏輯卷冊(透過 CLVM)所需之儲存裝置與分割區。

注意

從超過一個節點同時對一個目錄發出多個建立、刪除的需求時,會對 GFS2 造成效能上的負荷。如果這成為您電腦的效能問題,請盡可能的從一個節點發出建立、刪除的需求。
欲取得更多有關於建立、使用和維護 GFS2 檔案系統上的相關建議,請參閱〈章 2, GFS2 配置和操作上的考量〉。

1.3. 安裝 GFS2

除了 Red Hat High Availability 外掛程式的所需套件外,您必須為 GFS2 安裝 gfs2-utils 套件,為 CLVM(Clustered Logical Volume Manager,叢集化的邏輯卷冊管理員)安裝 lvm2-cluster 套件。lvm2-clustergfs2-utils 套件都屬於 ResilientStorage 頻道,安裝這些套件之前必須先啟用此頻道。
您可以使用以下 yum install 指令來安裝 Red Hat 高可用性嵌入程式之軟體套件:
# yum install rgmanager lvm2-cluster gfs2-utils
欲知 Red Hat High Availability 外掛程式與叢集管理的一般資訊,請參閱《叢集管理》。

1.4. GFS 與 GFS2 的差別

本節列出了從 GFS 到 GFS2 的變更與改進之處。
若要從 GFS 遷移至 GFS2,您需要使用 gfs2_convert 工具程式將 GFS 檔案系統轉換為 GFS2。欲取得更多有關於 gfs2_convert 工具程式上的相關資訊,請參閱〈附錄 B, 將 GFS 檔案系統轉換為 GFS2〉。

1.4.1. GFS2 指令名稱

大致來說,GFS2 的功能與 GFS 相似。然而,檔案系統指令的名稱所指定的為 GFS2 而非 GFS。表格 1.1, “GFS 與 GFS2 指令” 顯示了相等的 GFS 與 GFS2 指令和功能。

表格 1.1. GFS 與 GFS2 指令

GFS 指令GFS2 指令描述
mountmount掛載檔案系統。系統可偵測出檔案系統類型為 GFS 或 GFS2。欲取得更多有關於 GFS2 掛載選項上的相關資訊,請參閱 gfs2_mount(8) man page。
umountumount卸載檔案系統。
fsck
gfs_fsck
fsck
fsck.gfs2
檢查並修復未掛載的檔案系統。
gfs_growgfs2_grow增大已掛載檔案系統的空間。
gfs_jaddgfs2_jadd新增日誌至已掛載的檔案系統。
gfs_mkfs
mkfs -t gfs
mkfs.gfs2
mkfs -t gfs2
在儲存裝置上建立檔案系統。
gfs_quotagfs2_quota管理已掛載之檔案系統的配額。自 RHEL 6.1 發行版起,GFS2 便支援了標準的 Linux 配額設備。欲取得更多有關於 GFS2 中的配額管理上的相關資訊,請參閱〈節 4.5, “GFS2 配額管理”〉。
gfs_tool
tunegfs2
掛載參數
dmsetup suspend
配置、調整或蒐集有關於檔案系統的相關資訊。tunegfs2 指令由 RHEL 6.2 發行版起便已受到支援,並且同時還有一項 gfs2_tool 指令可供使用。
gfs_editgfs2_edit顯示、列印、或編輯檔案系統的內部結構。gfs2_edit 指令可以用在 GFS 與 GFS2 檔案系統上。
gfs_tool setflag jdata/inherit_jdatachattr +j(建議使用)在檔案或目錄上啟用紀錄。
setfacl/getfaclsetfacl/getfacl為檔案或目錄設置或取得檔案存取控制清單。
setfattr/getfattrsetfattr/getfattr設置或取得檔案的延伸屬性。
欲取得 GFS2 檔案系統指令的完整支援選項,請參閱這些指令的 man page。

1.4.2. GFS 與 GFS2 的其他不同之處

本節概述了〈節 1.4.1, “GFS2 指令名稱”〉中未詳述的 GFS 與 GFS2 的其它不同之處。

1.4.2.1. 本文相關的路徑名稱

GFS2 檔案系統並不提供與內容相依(context-dependent)的路徑名稱,這讓您能夠建立符號連結,指向不同的檔案或目錄。要在 GFS2 中使用這項功能,您可使用 mount 指令的 bind 選項。欲取得更多有關於 GFS2 中的 bind 掛載,以及內容相依的路徑名稱上的相關資訊,請參閱〈節 4.12, “Bind 掛載與本文相依的路徑名稱”〉。

1.4.2.2. gfs2.ko 模組

GFS 檔案系統的核心模組是 gfs.ko。GFS2 檔案系統的核心模組是 gfs2.ko

1.4.2.3. 啟用 GFS2 的強化配額功能

在 GFS2 檔案系統中,預設上是停用配額的,若要使用的話,必須將其明確啟用。欲取得啟用與停用配額使用的相關資訊,請參閱〈節 4.5, “GFS2 配額管理”〉。

1.4.2.4. 資料日誌

GFS2 檔案系統支援 chattr 指令,以設定或清除檔案或目錄的 j 旗標。設定檔案的 +j 旗標可以啟用該檔案的日誌功能。設定目錄的 +j 旗標表示「繼承 jdata」,亦即接下來該目錄中建立的檔案與目錄都會使用日誌功能。要啟用或停用檔案的日誌功能,使用 chattr 是比較適合的方法。

1.4.2.5. 動態新增日誌

在 GFS 檔案系統中,日誌是個內嵌於檔案系統之外的 metadata,因此在新增日誌之前,必須先延伸包含了檔案系統的邏輯卷冊大小。這表示對於 GFS2 檔案系統來說,當其它伺服器掛載檔案系統時,您可動態新增日誌,只要用來新增日誌的檔案系統上含有足夠空間即可。欲取得更多有關於新增日誌至 GFS2 檔案系統上的相關資訊,請參閱〈節 4.7, “新增日誌至檔案系統”〉。

1.4.2.6. 移除 atime_quantum 參數

GFS2 檔案系統並不支援 atime_quantum 這調整選項。GFS 檔案系統中的這個選項是用來決定 atime 更新多久會發生一次。GFS2 支援的是 relatimenoatime 掛載選項,前者可以用來達成 GFS atime_quantum 參數類似的功能。

1.4.2.7. 掛載指令的「data=」選項

掛載 GFS2 檔案系統時,您可以指定 mount 指令的 data=ordereddata=writeback 選項。當 data=ordered 被設置了之後,經過一項交易所被修改的用戶資料會在該交易被載入磁碟中之前被 flush 至磁碟中。這可避免用戶在當機後在檔案中看見未初始化區塊。當設為 data=writeback 模式後,任何時候只要用戶資料被標示不完整(dirty)的話,該用戶資料便會被寫入磁碟中;這無法提供和 ordered 模式相同的一致性保證,不過它對於某些工作來說速度會較快。預設值為 ordered 模式。

1.4.2.8. gfs2_tool 指令

GFS2 的 gfs2_tool 指令支援的多種選項,與 GFS 的 gfs_tool 指令不同:
  • gfs2_tool 指令支援 journals 參數,它會印出關於目前所配置之日誌的相關資訊,包括檔案系統包含了多少日誌。
  • gfs2_tool 指令並不支援 counters 旗標,這旗標是 gfs_tool 指令用來顯示 GFS 統計資料用的。
  • gfs2_tool 指令並不支援 inherit_jdata 旗標。要將一個目錄設為「繼承 jdata」,您可以在每個資料夾設定 jdata 旗標,或您可以使用 chattr 指令來設定該目錄的 +j 旗標。使用 chattr 指令來啟用或停用檔案的日誌功能,是建議的作法。

注意

由 RHEL 6.2 發行版起,GFS2 已支援了 tunegfs2 指令,該指令取代了 gfs2_tool 指令的部分功能。欲取得更多相關資訊,請參閱 tunegfs2(8) man page。gfs2_tool 指令的 settunegettune 功能已被 mount 指令的指令列選項取代,並能允許它們視需求以 fstab 檔案來設置。

1.4.2.9. gfs2_edit 指令

gfs2_edit 指令支援了各種不同的 GFS2 選項,多過於 gfs_edit 指令對於 GFS 的支援。欲取得更多有關於各版本指令所支援之特定選項上的相關資訊,請參閱 gfs2_editgfs_edit 的 man page。

1.4.3. GFS2 的效能改進

GFS2 檔案系統有許多功能,與 GFS 檔案系統的使用者介面中所看到的相同;但 GFS2 提供了更佳的檔案系統效能。
GFS2 檔案系統提供了改善的檔案系統效能,茲列如下:
  • 提高了在單獨目錄中進行高負載工作時的效能
  • 同步 I/O 操作的速度更快
  • 讀取快取時更迅速(沒有鎖定的負荷)
  • 用預先分配的檔案,提供更快的直接 I/O 存取(假設 I/O 大小夠大的話,例如 4M 的區塊)
  • I/O 速度更快
  • df 指令的執行變得較快,因為 statfs 調用的速度已增快。
  • 與 GFS 相較之下,經改善的 atime 模式減少了 atime 所產生的寫入 I/O 作業數量。
GFS2 檔案系統透過以下方式提供了更為廣泛的主流支援:
  • GFS2 是 Linux 上游核心的一部分(整合至 2.6.19)。
  • GFS2 支援下列功能。
    • 延伸檔案的屬性(xattr
    • lsattr() 和 chattr() 屬性設定(透過標準的 ioctl() 調用)
    • 精確至奈秒的時間戳記
GFS2 檔案系統對檔案系統的內部效率,提供了以下改進。
  • GFS2 使用了較少的 kernel 記憶體。
  • GFS2 不需要 metadata 產生數字。
    分配 GFS2 metadata 並不需要讀取的動作。在多日誌中情形下複製 metadata 區塊,會在鎖定解除之前,從日誌撤銷區塊的方式來管理。
  • GFS2 使用更簡單的紀錄管理程式,這程式並不了解失去連結的 inode 或配額的變動。
  • gfs2_growgfs2_jadd 指令使用鎖定技術,避免多個執行事例同時執行。
  • 針對於 creat() 和 mkdir() 之類的調用,ACL 代碼已簡化。
  • 失去連結的 inode、配額的改變、以及 statfs 的改變已經復原,不需要重新掛載日誌。

章 2. GFS2 配置和操作上的考量

Global File System 2(GFS2)檔案系統能允許叢集中多部電腦(節點)共同分享相同的儲存裝置。為了讓節點協作並維持節點上的資料一致性,節點針對檔案系統資源採用了叢集全域的鎖定結構描述。此鎖定結構描述使用了例如 TCP/IP 的通訊協定,以交換鎖定資訊。
您可藉由依照詳述於本章節中的建議來改善效能,這包括了建立、使用和維護 GFS2 檔案系統上的相關建議。

重要

請確認您的 Red Hat High Availability 外掛程式建置滿足您的需求並且受到支援。請詢問經授權的 Red Hat 客服人員,以在進行建置前驗證您的配置。

2.1. 格式化考量

此部分提供了有關於如何格式化 GFS2 檔案系統,以優化效能上的相關建議。

2.1.1. 檔案系統大小:建議較小的檔案系統大小

GFS2 乃基於 64 位元架構,並且理論上能與 8 EB 檔案系統相容。然而,64 位元硬體目前所支援的最大 GFS2 檔案系統大小為 100 TB,而目前 32 位元硬體所支援的最大 GFS2 檔案系統大小為 16 TB。
請注意,儘管您可使用大型的 GFS2 檔案系統,不過這並不代表我們建議您使用。GFS2 的基本規則乃愈小愈好:擁有 10 個 1TB 的檔案系統優於單一個 10TB 的檔案系統。
以下為幾項您應將 GFS2 檔案系統維持較小尺寸的理由:
  • 備份各個檔案系統的所需時間較少。
  • 使用 fsck.gfs2 指令來檢查檔案系統時,所需的時間將會較少。
  • 使用 fsck.gfs2 指令來檢查檔案系統時,所需的記憶體將會較少。
此外,維護較少的資源群組亦代表較佳的效能。
當然,若您的 GFS2 檔案系統過小,您可能會遇上空間不足的問題,並且這即可能會衍生出其它問題。您應在決定大小之前,考慮用途。

2.1.2. 區塊大小:建議使用預設區塊大小(4K)

由 RHEL 6 發行版起,mkfs.gfs2 指令將會嘗試根據裝置拓撲來估計最佳的區塊大小為何。一般來講,4K 區塊為建議的區塊大小,因為 4K 乃 Linux 的預設(記憶體)分頁大小。GFS2 與其它檔案系統不同,它使用 4K 的 kernel 緩衝區來進行大部份的作業。若您的區塊大小為 4K,kernel 便可進行較少的工作以操縱緩衝區。
建議您使用預設的區塊大小,這將會帶來最佳的效能。您僅在需要為許多非常小的檔案提供高效率的儲存裝置時,才可能需要使用不同的區塊大小。

2.1.3. 日誌數量:掛載的節點各一個

在欲掛載 GFS2 檔案系統的叢集上,檔案系統需要叢集中的每個節點皆包含一個日誌。比方說,若您擁有一個包含 16 個節點的叢集,不過您僅需要掛載其中兩個節點的檔案系統的話,那麼您將只需要擁有兩個日誌。若您需要掛載第三個節點的檔案系統,您僅需要透過 gfs2_jadd 指令來新增日誌即可。當使用 GFS2 時,您可視需求隨時新增日誌。

2.1.4. 日誌大小:預設值(128MB)一般已足夠

當您執行 mkfs.gfs2 指令來建立 GFS2 檔案系統時,您可指定日誌的大小。若您不指定大小,它將會使用預設值的 128MB,並且對於大部份應用程式來說應已足夠。
有些系統管理員可能會覺得 128MB 過多,並將日誌大小縮減為最小的 8MB,或是較為保守的 32MB。儘管這可能不會遇上問題,但卻可能會嚴重影響效能。GFS2 和許多日誌檔案系統相同,每當它寫入 metadata 時,metadata 在存放之前皆會被提交至日誌中。這可確保若系統當機或斷電,當日誌自動在掛載時重新啟用時,您將能取回所有的 metadata。然而,要填滿 8MB 的日誌無需太多檔案系統動作,並且當日誌填滿時,效能便會因為 GFS2 必須等待寫入儲存裝置而受到影響。
一般建議您使用預設的 128MB 日誌大小。若您的檔案系統非常小(比方說 5GB),使用 128MB 的日誌可能不太實際。若您的檔案系統較大並且擁有空間的話,使用 256MB 的日誌大小可能能夠改善效能。

2.1.5. 資源群組的大小與數量

當您使用 mkfs.gfs2 指令建立 GFS2 檔案系統時,系統會將儲存空間分成一致的大小區塊,稱為資源群組。系統會預測最佳資源群組的大小(從 32MB 到 2GB)。您可以使用 mkfs.gfs2 指令的 -r 選項來覆寫預設值。
您的最佳資源群組大小取決於您將如何使用檔案系統。請考慮它的使用量將會多大,並且它是否會嚴重分散。
請實驗看看,那一種群組大小的效能最好。建議您在建置 GFS2 之前,先使用測試的叢集環境來作實驗。
若您的檔案系統擁有太多資源群組(並且每個資源群組皆過小),區塊分配可能會花上太多時間由上百(或上萬)個資源群組中尋找可用區塊。檔案系統愈滿,搜尋的資源群組就會愈多,並且它們每個皆需要叢集全域的鎖定。這將會造成效能變得緩慢。
然而,如果您的檔案系統的資源群組太少(每個群組的空間過大),那麼分配區塊時可能會競用同樣的資源群組鎖,進而影響效能。舉例來說,如果您有 10GB 的檔案系統,切成五塊後每塊是 2GB,那麼跟切成 320 塊 32MB 的空間比起來,叢集中的節點會更常競用這五組資源組。如果因為每次分配區塊時,找到可用區塊之前需要檢查多組資源組,那麼情況會更為惡化。GFS2 會試著用兩種方式減緩這問題。
  • 首先,當資源群組已完全滿時,它將會記得此情況並且嘗試避免未來檢查它(直到從中釋出區塊)。若您從未刪除檔案,競用情況會較輕。然而,若您的應用程式在一個大部份已滿的檔案系統上,持續刪除區塊並分配新的區塊,競用情況將會較嚴重,並大幅影響效能。
  • 其次,當新的區塊新增至現有檔案(例如使用附加方式)時,GFS2 會試著把新的區塊與放在一起,使其以檔案方式成為同樣的資源群組。這樣會增進效能:在傳統硬碟上,區塊聚集在一起,搜尋時間較短。
最壞情況是集中式目錄,其中所有節點會建立檔案,因為所有節點會不斷競用鎖定同樣的資源群組。

2.2. 重組檔案系統

Red Hat Enterprise Linux 6.4 改善了重組 GFS2 檔案系統的功能。有了 RHEL 6.4,同步寫入功能可以降低檔案的離散程度,進而提供更佳效能。
在 RHEL 裡,GFS2 沒有磁碟重組工具,但您可以使用檔案重組工具找出各個檔案,將其複製為暫存檔案,然後重新命名暫存檔案並取代原有檔案。(只要循序寫入,這步驟可以在 RHEL 6.4 之前的版本中完成。)

2.3. 區塊配置問題

此部分提供了有關於在 GFS2 檔案系統中進行區塊配置上的相關問題之概要。儘管只寫入資料的應用程式,一般不會在乎區塊如何配置或配置在哪,理解區塊分配如何運作,可協助您優化效能。

2.3.1. 在檔案系統中保留可用空間

當 GFS2 檔案系統已將近滿出,區塊分配程式將會開始在尋找可分配區塊的可用空間上,發生困難。因此,分配程式所提供的區塊可能會擠入資源群組末端,或擠在數個較小的部分中,並提高檔案分散發生的可能性。此檔案分散可能會造成問題。此外,當 GFS2 將近滿出時,GFS2 區塊分配程式將會花上較多時間在資源群組之間進行搜尋,並且可能會造成鎖定競用(檔案系統空間若足夠則可能不會發生此問題)。這亦可能會造成效能上的問題。
鑑於這些理由,建議您的檔案系統儲存量不要超過 85%;不過這數字可能會隨著工作量而有所不同。

2.3.2. 盡可能讓各節點分配自己的檔案

基於 distributed lock manager(DLM,分散式鎖定管理員)的運作方式,若所有檔案皆由單一節點所分配,並且其它節點需要新增區塊至這些檔案的話,將會發生更多競用情況。
在 GFS(版本 1)中,所有鎖定皆由中央鎖定管理程式所管理的,其工作就是控制整個叢集中的鎖定。此 grand unified lock manager(GULM,大一統鎖定管理員)含有問題,因為它有單點失效的問題。GFS2 的替換鎖定結構描述(亦即 DLM)在叢集間分散了鎖定。若叢集中任何節點失效的話,其鎖定將會由其它節點還原。
當使用 DLM 時,第一個鎖定資源(例如檔案)的節點將會成為該節點的「lock master」。其它節點可能會鎖定該資源,不過它們必須向 lock master 取得權限。各節點皆清楚 lock 的 lock master 為何,並且亦知 lock 租借給了哪個節點。將 lock 鎖定在 master 節點上,會比鎖定在一個需要停下並向 lock master 要求權限的節點上要來得快速。
如同許多檔案系統,GFS2 分配程式會嘗試將區塊相近地保留在相同的檔案中,以減少磁頭的移動以及開機效能。一個將區塊分配至檔案的節點,在使用新的區塊時,可能會需要使用和鎖定相同的資源群組(除非該資源群組中所有的區塊皆已使用中)。若包含檔案的資源群組的 lock master 分配其資料區塊的話,檔案系統的執行速度將會較快(也就是說,讓一開始開啟檔案的節點進行所有新區塊的寫入,速度會較快)。

2.3.3. 盡可能預先分配

若檔案已預先分配,便可避免區塊分配,並且檔案系統將可更有效率地執行。較新版本的 GFS2 包含了 fallocate(1) 系統調用,並且您可使用它來預先分配資料區塊。

2.4. 叢集考量

當判斷您系統將會包含的節點數量時,請注意必須在高可用性與效能之間進行捨取。若有大量節點,要使工作量依照比例進行將會變得非常困難。基於此原因,Red Hat 並不支援使用 GFS2 於超過 16 個節點的檔案系統建置。
建置叢集檔案系統無法取代單節點建置。建議您測試新安裝 8 至 12 個禮拜以測試系統與其效能。在這段時間內,任何效能或功能上的問題皆可解決,並且任何問題皆可詢問 Red Hat 支援團隊。
同時建議考慮建置叢集的客戶,在進行建置前先請 Red Hat 支援團隊檢查其配置,以避免任何日後可能發生的支援問題。

2.5. 使用上的考量

此部分提供了有關於 GFS2 使用上的一般建議。

2.5.1. 掛載選項:noatime 與 nodiratime

一般建議使用者以 noatimenodiratime 引數來掛載 GFS2 檔案系統。這能讓 GFS2 在每次進行存取時,花較少的時間更新磁碟 inode。

2.5.2. DLM 調整選項:增加 DLM 表格大小

DLM 使用了數個表格來管理、協調,並在叢集節點之間傳送鎖定資訊。增加 DLM 表格的大小可能會增加效能。在 RHEL 6.1 及更新版本中,這些表格的預設大小已增加,而您可藉由下列指令來手動式增加其大小:
echo 1024 > /sys/kernel/config/dlm/cluster/lkbtbl_size
echo 1024 > /sys/kernel/config/dlm/cluster/rsbtbl_size
echo 1024 > /sys/kernel/config/dlm/cluster/dirtbl_size
這些指令無法在重開機後還能維持其效用,因此您必須將它們加入至其中一項開機 script 中,並且在掛載任何 GFS2 檔案系統時,您必須先執行它們,否則變更將會被忽略。
欲取得更詳細的 GFS2 節點鎖定相關資訊,請參閱〈節 2.9, “GFS2 節點鎖定”〉。

2.5.3. VFS 調整選項:研究與實驗

GFS2 與所有 Linux 檔案系統相同,它位於一個名為虛擬檔案系統(VFS)的階層上。您可透過 sysctl(8) 指令調整 VFS 階層,以改善 GFS2 的基礎效能。比方說,dirty_background_ratiovfs_cache_pressure 的值可根據您的情況而調整。若要取得目前的值,請使用下列指令:
sysctl -n vm.dirty_background_ratio
sysctl -n vm.vfs_cache_pressure
下列指令可調整值:
sysctl -w vm.dirty_background_ratio=20
sysctl -w vm.vfs_cache_pressure=500
您可藉由編輯 /etc/sysctl.conf 檔案來永久性地更改這些參數的值。
若要找出使用於您情況的最佳值,請研究各種 VFS 選項並在建置入完整生產環境之前,在測試叢集上進行實驗。

2.5.4. SELinux:避免在 GFS2 上使用 SELinux

在大部分基於安全性理由的情況下,SELinux 皆為高度建議使用的安全性機制,然而它不支援搭配 GFS2 使用。SELinux 使用了所有檔案系統物件的延伸屬性來儲存資訊。讀取、寫入,以及維護這些延伸屬性是可能的,不過這卻也會使 GFS2 的速度大幅下降。在 GFS2 檔案系統上,您必須關閉 SELinux。

2.5.5. 在 GFS2 上設定 NFS

基於 GFS2 鎖定子系統與其叢集特性上的複雜性,在 GFS2 上設定 NFS 必須經過嚴謹和小心的配置。此部分詳述了您在 GFS2 檔案系統上配置 NFS 服務時,所需注意的一些潛在問題。

警告

如果 GFS2 檔案系統上有 NFS 的匯出目錄,同時 NFS 用戶端應用程式使用了 POSIX 鎖定功能,那麼您就必須使用 localflocks 選項掛載檔案系統。這樣作是為了強迫 POSIX 鎖定功能從每台伺服器轉到本地端:也就是說,非叢集、各自獨立。(如果 GFS2 試圖從 NFS 實作 POSIX 鎖定功能到叢集中的節點,會出現多種問題。)對於 NFS 用戶端的應用程式,本地化的 POSIX 鎖定意味著如果兩個用戶端是從不同伺服器掛載的,那麼這兩個用戶端可以同步持有一樣的鎖。如果所有掛載 NFS 的用戶端皆來自同一台伺服器,那麼從不同伺服器獨立授予同樣鎖定功能的問題,就不會出現。若您不確定是否應以 localflocks 選項來掛載您的檔案系統,建議不要使用此選項;在叢集環境中,讓鎖定運作會是較安全的做法。
除了鎖定上的考量之外,您在 GFS2 檔案系統上配置一項 NFS 服務時,應考慮到下列情況。
  • Red Hat 僅支援使用 NFSv3 的 Red Hat High Availability 外掛程式配置,並將鎖定設為含有下列特性的 active/passive 配置:
    • 後端檔案系統乃一個在 2 至 16 個節點的叢集上執行的 GFS2 檔案系統。
    • NFSv3 伺服器被定義為一項一次由單個叢集節點匯出整個 GFS2 檔案系統的服務。
    • NFS 伺服器可以從一個失效的節點上轉移到另一個節點(active/passive 配置)。
    • 除非」透過 NFS 伺服器,否則不能存取 GFS2 檔案系統。這包括本地的 GFS2 檔案系統,以及透過 Samba 或叢集化的 Samba 來存取。
    • 系統上沒有 NFS 配額支援。
    這項配置可以提供檔案系統的 HA,並降低系統的停機時間,因為節點失效而導致 NFS 伺服器轉移到另一個節點時,不會執行 fsck 指令。
  • 在 GFS2 上執行 NFS 時,fsid= 乃必要的 NFS 選項。
  • 如果叢集出了問題(例如叢集數目不足,隔離功能又失效),叢集化的邏輯卷冊與 GFS2 檔案系統就會暫時無法存取,直到叢集數目足夠為止。建置備援系統時,請將這問題考慮進去,判斷簡易的備援方案(例如本步驟所提到的方式)是否適用於您的系統。

2.5.6. GFS2 上的 Samba(SMB 或是 Windows)檔案服務

由 RHEL 6.2 發行版起,您可由 GFS2 檔案系統藉由 CTDB 使用 Samba(SMB 或 Windows)檔案服務,它允許 active/active 配置。欲取得叢集 Samba 配置上的相關資訊,請參閱《叢集管理》文件。
尚不支援從 Samba 外部同步存取 Samba 共享目錄。目前 GFS2 叢集租賃尚未受到支援,因為這將使得 Samba 檔案服務速度變慢。

2.6. 檔案系統備份

不管檔案系統多大,定期備份 GFS2 檔案系統以備不時之需,是非常重要的。使用 RAID、multipath、鏡射、snapshot、及其它冗餘功能,會讓許多系統管理者感到安心,但這些都還不夠安全。
建立備份時可能會發生問題,因為備份一或多個節點的程序一般包含了讀取序列中的整個檔案系統。若這是透過單一節點來進行的,該節點會將所有資訊保留在快取中,直到叢集中其它節點請求鎖定。若在叢集進行作業中執行這類型的備份程式,將會負面影響效能。
當備份完成後刪除掉快取,可減少其它節點重新取得其叢集鎖定/快取擁有權上的所需時間。然而這並不理想,因為在備份程序開始進行之前,其它節點必須停止其快取中的資料。您可在備份完成後,透過下列指令來刪除快取:
echo -n 3 > /proc/sys/vm/drop_caches
若叢集中的所有節點皆備份自己的檔案,速度將會較快,如此一來工作便會分佈在各個節點上。您可藉由在節點專屬的目錄上,透過一個使用了 rsync 指令的 script 來完成這項工作。
製作GFS2 備份的最佳方式,就是在 SAN 上建立硬體 snapshot、將此 snapshot 提供給另一部系統,並將它備份於這部系統上。備份系統應以 -o lockproto=lock_nolock 來掛載 snapshot,因為它不會位於叢集中。

2.7. 硬體考量

在建置 GFS2 檔案系統時,您應將下列硬體考量納入考慮。
  • 使用品質較高的儲存裝置選項
    GFS2 可運作於較便宜的共享儲存裝置上(例如 iSCSI 或是 FCoE),不過若您購買快取能力與品質較佳的儲存裝置,效能將會更加改善。Red Hat 使用了 SAN 儲存裝置以及光纖頻道連線,來進行大部份的品質、健全性,以及效能測試。一般定律乃建置已經過測試的項目。
  • 進行建置前先測試網路設備
    較高品質、速度較快的網路設備能使叢集通訊和 GFS2 執行速度變得更快、更可信賴。然而,您無需購買最貴的硬體。某些最高價的網路切換器,反而無法正常傳送 multicast 封包,此乃用來傳送 fcntl locks(flocks)的封包。有時較便宜的消費型網路切換器,反而較快並且更可信賴。強烈建議您在將設備建置入完整生產環境中之前,請先詳細測試您的設備。

2.8. 效能問題:檢查 Red Hat 客戶入口網站

欲知如何透過 High Availability 外掛和 Red Hat GFS2 來建置及升級 RHEL 叢集上的最佳方式,請參閱 Red Hat 客戶端入口網站上的〈Red Hat Enterprise Linux 叢集、High Availability,以及 GFS 的最佳建置實務〉一文(英文)。

2.9. GFS2 節點鎖定

若要藉由 GFS2 檔案系統取得最佳效能,您必須理解其作業上的基本理論。一個單獨節點檔案系統會與 cache 並排實作,這是為了在使用時常請求的資料時,排除磁碟存取所造成的延遲。在 Linux 中,分頁快取(先前為緩衝快取)提供了這項快取功能。
當使用 GFS2 時,各個節點皆擁有自己的分頁快取,並可能包含了一部分的磁碟資料。GFS2 使用了一種稱為 glocks(發音為 gee-locks)的機制,以維護節點之間的快取整合性。glock 子系統提供了透過使用 distributed lock manager(DLM)實作的快取管理功能,作為基礎的通訊層。
glocks 基於各 inode 為快取提供了保護,因此各個 inode 皆有一個 lock,用於快取層的控制。若該 glock 授予於共享模式(DLM 鎖定模式:PR)中,那麼該 glock 下的資料將能同時快取入一個或更多個節點中,如此一來,所有節點皆能擁有資料的本機存取權限。
若 glock 是以 exclusive 模式授予(DLM 鎖定模式:EX)的話,那麼便只有單獨節點能夠快取該 glock 下的資料。此模式使用於所有會修改資料的作業上(例如 write 系統呼叫)。
若有另一節點請求無法即刻授予的一個 glock,DLM 便會傳送一則訊息給目前持有阻擋新請求的 glock 的節點,以要求它們釋放這些鎖定。釋放 glock 的程序可能會相當地長(大部分檔案系統作業的標準)。釋放共享的 glock 僅需使 cache 無效化,這項程序的所需時間不長,並與快取的資料數量成正比例。
若要釋放專用 glock,您需要進行一項 log flush,並將任何受到變更的資料寫回磁碟中,接著便如釋放共享 glock 一般地進行無效化。
單節點檔案系統與 GFS2 之間的差別就是,單節點檔案系統含有單獨快取區,而 GFS2 在各個節點上皆含有各別的快取區。在這兩種情況下,存取已快取資料的延遲會是相似的,不過若有一節點先前已快取了某項資料,GFS2 存取此未快取資料的延遲會較長。

注意

基於 GFS2 的快取實作方式,下列情況將能提供最佳的效能:
  • 在所有節點上使用唯讀的 inode。
  • 只由單節點寫入或修改 inode。
請注意,在建立或刪除檔案時,在目錄中插入和移除項目將會被視為寫入目錄 inode。
您可偶而忽略此規則。不過太常忽略此規則會造成嚴重的效能流失。
若您將一個檔案 mmap() 於 GFS2 上為讀/寫映射,不過卻只讀取它,這只會被視為是讀取。不過在 GFS 上,這會被視為是寫入,因此在 GFS2 上,mmap() I/O 的延展性會較高。
若您不設置 noatime mount 參數,那麼讀取也會成為寫入以更新檔案時間戳。建議所有 GFS2 使用者應以 noatime 進行掛載,除非有特別需要使用 atime 的需求。

2.9.1. Posix 的鎖定問題

使用 Posix 鎖定功能時,請考量以下幾點:
  • 使用 Flock 的處理速度會快過使用 Posix 鎖定。
  • 在 GFS2 中使用 Posix 鎖定功能的程式,應避免使用 GETLK 函數,因為在叢集環境中,程序 ID 可能會與節點上的程序 ID 不同。

2.9.2. GFS2 的效能調整

一般來講,您可改變麻煩的應用程式所儲存其資料的方式,以達到較佳的效能。
較麻煩的典型應用程式為郵件伺服器。這些應用程式一般會有個 spool 目錄包含著各個使用者的檔案(mbox),或一個使用者一個目錄地包含了每條訊息的檔案(maildir)。當請求抵達了 IMAP,較佳的方式是給予各個使用者特定節點的相似性。如此一來,他們檢視和刪除郵件訊息的請求,便會在該單獨節點上處理。若該節點失效的話,則此 session 能在不同的節點上重新啟動。
當郵件透過 SMTP 到達時,各別的節點便能被設為就預設值,會將特定使用者的郵件傳送至特定的節點。若預設的節點未啟動,那麼訊息能由收取方的節點直接儲存至使用者的郵件 spool 中。再次提醒您,此設計是為了能在正常情況下,將特定檔案集快取入一個單獨節點上,並能在節點失效時允許直接的存取。
此設定能最佳化 GFS2 分頁快取的使用,並使應用程式不會偵測到節點失效,無論是 imapsmtp
備份通常屬於另一棘手範圍。相同地,建議您直接由快取某組特定 inode 的節點備份各個節點的工作集。若您有個會定時執行的備份 script,不過它似乎會與在 GFS2 上執行的應用程式同時發生並造成回應時間上的延遲,那麼叢集可能便未能有效率地使用分頁快取。
顯然地,若您能夠停下應用程式以進行備份,那便不會有這項問題了。另外,若備份只由一個節點執行,當它完成大部分將會快取在該節點上的檔案系統時,由其它節點進行存取將會有效能上的差異。這可透過執行下列指令來在備份完成後,將備份節點上的 VFS 分頁快取釋放,以盡可能地避免這項問題:
echo -n 3 >/proc/sys/vm/drop_caches
然而,這並非用來確認各個節點上的工作集是否為共享、在叢集上大部分唯讀,或由某個單獨節點大量存取的最佳方法。

2.9.3. 以 GFS2 Lock Dump 進行 GFS2 效能上的疑難排解

若您的叢集效能因為未足夠使用 GFS2 快取而降低,您可能會遇上較長的 I/O 等待時間。您可使用 GFS2 的鎖定傾印資訊來判斷問題發生的原因。
此部分提供了 GFS2 鎖定傾印的總覽。欲取得更多有關於 GFS2 鎖定傾印上的完整詳述,請參閱〈附錄 C, GFS2 tracepoint 和 debugfs glock 檔案〉。
GFS2 鎖定傾印資訊可由 debugfs 檔案取得,此檔案可藉由下列路徑名稱找到,假設 debugfs 掛載於 /sys/kernel/debug/ 上:
/sys/kernel/debug/gfs2/fsname/glocks
該檔案的內容為一系列的行列。各行皆以 G: 為起始,代表一個 glock;之後以單空格作為縮排的幾行則代表檔案中剛提過的 glock 相關資訊項目。
debugfs 檔案的最佳使用方式就是當應用程式發生問題時,使用 cat 指令來取得一份檔案的完整內容(若您擁有大量記憶體和許多快取的 inode,這可能會花上一段時間),之後再查看其回報資料。

注意

建立兩份 debugfs 檔案可能會有幫助,其中一份時間晚上幾秒或幾分鐘。透過比較兩項與相同 glock 號碼相聯之 trace 中的 holder 資訊,您可發現工作負載是否有增加(即代表緩慢)或是它是否卡住(這是項錯誤,並且應即刻聯絡 Red Hat 支援團隊)。
debugfs 檔案中以 H: 起始的幾行(預留位置)代表已授予或等待授予的鎖定請求。預留位置行上的旗標欄位 f: 顯示的是:'W' 旗標代表等待請求,'H' 旗標代表已授予的請求。含有大量等待請求的 glocks 可能就是那些會發生特定競用情況的 glock。
表格 2.1, “Glock 旗標” 顯示了不同 glock 旗標的意義,並且 表格 2.2, “Glock holder 旗標” 根據 glock holder 旗標在 glock dump 現的順序,顯示了不同 glock holder 旗標的意義。

表格 2.1. Glock 旗標

旗標名稱意義
bBlocking(阻絕)設定「已鎖定」(locked)旗標時視為有效,表示來自 DLM 的需求之運作可能會被阻絕。降級操作與「嘗試」(try)鎖定時,這旗標會被清除。這旗標的用途是允許蒐集 DLM 回應時間的統計資料,與其它節點降級鎖定所花的時間無關。
dPending demote(尚未解決的降階)延後的(遠端)降階請求
DDemote(降階)降階請求(本機或遠端)
fLog flush(日誌清除)釋放此 glock 前,必須先提交日誌
FFrozen(凍結)來自於遠端節點的回應已被忽略 — 正在進行復原。這旗標與檔案系統凍結無關,而是使用了不同的機制,但僅用於復原。
iInvalidate in progress(正在進行無效化)正在無效化此 glock 下的分頁
IInitial(初始)當 DLM 鎖定與此 glock 相聯時,進行設置
lLocked(已鎖定)glock 正在改變狀態
LLRUglock 在 LRU 清單上時,進行設置
oObject(物件)glock 與物件相關連時,進行設置(亦即 inode 為類型 2 的 glock;資源群組為類型 3 的 glock)
pDemote in progress(正在降階)glock 正在回應一項降階請求
qQueued(已排程)holder 已經排程至 glock 進行設置,並在取得 glock、但沒有更多 holder 時清除。用於計算 glock 的最短 hold 時間的演算法則中。
rReply pending(正在處理回應)來自於遠端節點的回應正等待處理
yDirty(已變更)釋放此 glock 前,資料必須 flush 至磁碟

表格 2.2. Glock holder 旗標

旗標名稱意義
aAsync(非同步)不等待 glock 結果(之後會輪詢結果)
AAny(任何)接受任何相容的鎖定模式
cNo Cache(無快取)當釋放之後,即刻降階 DLM 鎖定
eNo expire(無期限)忽略之後的鎖定取消請求
Eexact(完全符合)鎖定模式必須完全符合
FFirst(第一)當 holder 為第一個被授予此 glock 時進行設置
HHolder顯示請求的鎖定已授予
pPriority(優先權)將 holder 加入佇列的開頭
tTry(嘗試)「try」鎖定
TTry 1CB一個傳送 callback 的「try」鎖定
WWait(等待)當等待請求完成時進行設置
當辨識了造成問題的 glock 之後,下個步驟就是找出它與哪個 inode 相聯。請參閱 glock 的號碼(G: 行上的 n:)。格式為「類型/號碼」,並且若「類型」為 2,那麼 glock 便是個 inode glock,並且「號碼」便為 inode 號碼。若要追蹤 inode,您可執行 find -inum 號碼,「號碼」代表 inode 號碼,由 glock 檔案中的十六進位格式轉換為小數點數字。

注意

若您在一個遇上鎖定競用的檔案系統上執行 find,您可能會使情況變得更糟。建議您當尋找競用中的 inode,執行 find 之前,停下應用程式。
表格 2.3, “Glock 類型” 顯示了不同 glock 類型的意義。

表格 2.3. Glock 類型

輸入號碼鎖定類型使用
1Trans交易鎖定
2InodeInode metadata 和資料
3Rgrp資源群組 metadata
4Metasuperblock
5IopenInode 最後偵測
6Flockflock(2) syscall
8Quota配額作業
9Journal日誌互斥
若辨識到的 glock 為不同的類型,那麼它很可能是類型 3(資源群組)。若您在正常負載的情況下,看見了大量程序正在等待其它類型的 glock ,請聯絡 Red Hat 支援團隊。
若您看見了一些等待中的請求佇列於資源群組鎖定上,這可能基於幾種不同原因。其中一個原因就是,在檔案系統中,節點數量與資源群組數量相較之下過大。另一個原因就是檔案系統可能快要滿出(平均的可用區塊搜尋時間會較長)。這兩種情況皆能透過新增更多儲存裝置,並使用 gfs2_grow 指令擴展檔案系統,以得到改善。

章 3. 開始

本章詳述了 GFS2 的初始設定,包含以下幾節:

3.1. 先決工作

在設定 Red Hat GFS2 之前,您應完成下列工作:
  • 請確認您記下了 GFS2 節點的主要特性(請參閱〈節 1.2, “設定 GFS2 之前”〉)。
  • 請確認 GFS2 節點上的時鐘已經同步。建議您使用您 RHEL 發行版的網路時間協定(NTP)軟體。

    注意

    GFS2 節點的系統時鐘之時間差異,必須維持在幾分鐘之內,以避免不必要地更新 inode 時間戳記。不必要地更新 inode 時間戳記會對叢集的效能,產生嚴重的影響。
  • 若要在叢集環境中使用 GFS2,您必須配置您的系統使其使用叢集邏輯卷冊管理程式(CLVM),此乃 LVM 邏輯卷冊管理程式的叢集延伸。若要使用 CLVM,就必須執行包括 clvmd daemon 的 Red Hat Cluster Suite 軟體。欲取得 CLVM 使用上的相關資訊,請參閱《LVM 管理》。欲取得安裝和管理 Red Hat Cluster Suite 上的相關資訊,請參閱《叢集管理》。

3.2. 起始設定工作

最開始的 GFS2 設定包含了以下工作:
  1. 設定邏輯卷冊。
  2. 製作 GFS2 檔案系統。
  3. 掛載檔案系統。
遵循以下步驟,設定初始階段的 GFS2。
  1. 使用 LVM,為每一個 Red Hat GFS2 檔案系統建立邏輯卷冊。

    注意

    您可以使用 Red Hat Cluster Suite 的 init.d 程序檔,來自動啟動或停用邏輯卷冊。欲知更多關於 init.d 程序檔的詳情,請參閱《設定與管理 Red Hat 叢集》。
  2. 在步驟 1 建立的邏輯卷冊上建立 GFS2 檔案系統。為各個檔案系統選擇一組獨特的名稱。欲取得更多有關於建立 GFS2 檔案系統的相關資訊,請參閱〈節 4.1, “製作檔案系統”〉。
    您可以使用以下其中一種格式,建立叢集的 GFS2 檔案系統:
    mkfs.gfs2 -p lock_dlm -t ClusterName:FSName -j NumberJournals BlockDevice
    mkfs -t gfs2 -p lock_dlm -t LockTableName -j NumberJournals BlockDevice
    欲取得更多有關於建立 GFS2 檔案系統的相關資訊,請參閱〈節 4.1, “製作檔案系統”〉。
  3. 在每個節點上,掛載 GFS2 檔案系統。欲取得更多掛載 GFS2 檔案系統的相關資訊,請參閱〈節 4.2, “掛載檔案系統”〉。
    指令用法:
    mount BlockDevice MountPoint
    mount -o acl BlockDevice MountPoint
    -o acl 掛載選項可用來操作檔案的 ACL(Access Control List,存取控制清單)。如果檔案系統在掛載時,沒有使用 -o acl 掛載選項,使用者可檢視 ACL(利用 getfacl 指令);但卻無法(透過 setfacl 指令)設定 ACL。

    注意

    您可以使用 Red Hat Hight Availability 外掛程式的 init.d 程序,來自動掛載、卸載 GFS2 檔案系統。

章 4. 管理 GFS2

本章詳述了管理 GFS2 的工作與指令,包含以下幾節:

4.1. 製作檔案系統

您可使用 mkfs.gfs2 指令來建立 GFS2 檔案系統,或使用 mkfs 指令並指定 -t gfs2 選項。檔案系統會建立在已啟用的 LVM 卷冊上。如欲執行 mkfs.gfs2 指令,您需要以下資訊:
  • 鎖定協定(Lock protocol)或模組名稱(叢集的鎖定協定為 lock_dlm
  • 叢集名稱(當以叢集設定的一部分來執行時)
  • 日誌數量(各個可能掛載檔案系統的節點都需要一份日誌)
當您建立 GFS2 檔案系統時,您可以直接使用 mkfs.gfs2 指令,或使用 mkfs 指令加上 -t 選項來指定 gfs2 這個檔案系統類型,之後則是 gfs2 檔案系統的選項。

注意

當您透過了 mkfs.gfs2 指令建立 GFS2 檔案系統後,您將無法縮減檔案系統的大小。然而,您可透過 gfs2_grow 指令增加既有檔案系統的大小,如〈節 4.6, “擴充檔案系統”〉中所述。

4.1.1. 用法

建立叢集的 GFS2 檔案系統時,可使用以下一種格式:
mkfs.gfs2 -p LockProtoName -t LockTableName -j NumberJournals BlockDevice
mkfs -t gfs2 -p LockProtoName -t LockTableName -j NumberJournals BlockDevice
建立本地 GFS2 檔案系統時,可使用下列格式:

注意

在 Red Hat Enterprise Linux 6 發行版上,Red Hat 不支援使用 GFS2 來作為一個單節點檔案系統。
mkfs.gfs2 -p LockProtoName -j NumberJournals BlockDevice
mkfs -t gfs2 -p LockProtoName -j NumberJournals BlockDevice

警告

請確認您熟悉對於 LockProtoNameLockTableName 參數的用法。錯誤使用 LockProtoNameLockTableName 參數可能會造成檔案系統或鎖定空間(lock space)損毀。
LockProtoName
可指定欲使用的鎖定協定的名稱。叢集的鎖定協定為 lock_dlm
LockTableName
此參數會被指定於叢集環境中的 GFS2 檔案系統上。如下所示,它有兩個部份並以冒號區隔開來(無空格):ClusterName:FSName
  • ClusterName,GFS2 檔案系統所被建立於的叢集名稱。
  • FSName,檔案系統名稱,能長達 1 至 16 個字元。叢集上所有的 lock_dlm 的名稱都必須是獨特的,並且各個本地節點上的所有檔案系統的名稱(lock_dlmlock_nolock)也必須都是獨特的。
Number
指定 mkfs.gfs2 指令所建立的日誌數量。每個掛載檔案系統的節點皆必須要有一份日誌。若使用 GFS2 檔案系統的話,您之後能夠在不擴大檔案系統的情況下新增更多日誌,如〈節 4.7, “新增日誌至檔案系統”〉中所述。
BlockDevice
指定邏輯或實體卷冊。

4.1.2. 範例

在這些範例中,因為是叢集檔案系統,因此 lock_dlm 會是檔案系統所使用的鎖定協定。叢集名稱為 alpha,並且檔案系統名稱為 mydata1。檔案系統包含著八份日誌並且建立於 /dev/vg01/lvol0 上。
mkfs.gfs2 -p lock_dlm -t alpha:mydata1 -j 8 /dev/vg01/lvol0
mkfs -t gfs2 -p lock_dlm -t alpha:mydata1 -j 8 /dev/vg01/lvol0
在這些範例中,第二個檔案系統 lock_dlm 會被建立,它可被用在叢集 alpha 中。檔案系統名稱為 mydata2。檔案系統包含著八份日誌並且建立在 /dev/vg01/lvol1 上。
mkfs.gfs2 -p lock_dlm -t alpha:mydata2 -j 8 /dev/vg01/lvol1
mkfs -t gfs2 -p lock_dlm -t alpha:mydata2 -j 8 /dev/vg01/lvol1

4.1.3. 完整選項

表格 4.1, “指令選項:mkfs.gfs2 描述了 mkfs.gfs2 指令的選項(旗標與參數)。

表格 4.1. 指令選項:mkfs.gfs2

旗標參數描述
-cMegabytes將各個日誌的磁碟配額變更檔案的初始大小設為 Megabytes
-D 啟用除錯輸出。
-h 說明。顯示可用的選項。
-JMegaBytes以 MB 為單位來指定日誌的大小。預設日誌大小為 128 MB。最小大小為 8 MB。跟較小的日誌比起來,較大的日誌會使用更多記憶體,不過卻能改善效能。
-jNumber可指定 mkfs.gfs2 指令所建立的日誌數量。各個掛載檔案系統的節點都必須要有一個日誌。對於 GFS2 檔案系統來說,您之後能夠在不擴大檔案系統的情況下新增額外日誌。
-O 避免 mkfs.gfs2 指令在寫入檔案系統之前要求確認。
-pLockProtoName
可指定欲使用的鎖定協定的名稱。被辨識的鎖定協定包含:
lock_dlm — 叢集檔案系統所需的標準鎖定模組。
lock_nolock — 當 GFS2 作為本地檔案系統(只有一個節點)時會被使用。
-q 靜默。不顯示任何東西。
-rMegaBytes以 MB 為單位,指定資源群組的大小。最小的資源群組大小為 32 MB。最大的資源群組大小為 2048 MB。較大的資源群組大小可增強大型檔案系統上的效能。若未指定此選項的話,mkfs.gfs2 便會根據檔案系統的大小來選擇資源群組的大小:一般平均大小的檔案系統會擁有 256 MB 的資源群組,並且較大的檔案系統將會擁有較大的資源群組,以達到較佳的效能。
-tLockTableName
當您使用 lock_dlm 協定時可指定鎖定表格欄位的唯一識別碼(unique identifier);lock_nolock 協定不使用這個參數。
此參數含有如下兩個以冒號區隔開(無空格)的部份:ClusterName:FSName
ClusterName 為即將建立 GFS2 檔案系統的叢集名稱;只有此叢集的成員擁有此檔案系統的使用權限。叢集名稱會透過「叢集配置工具」設置於 /etc/cluster/cluster.conf 檔案中,並顯示在 Red Hat Cluster Suite 叢集管理 GUI 中的「叢集狀態工具」上。
FSName,檔案系統的名稱,可長達 1 至 16 個字元,並且名稱必須和叢集中所有的檔案系統不同。
-uMegaBytes可指定各個日誌的未連結標籤檔案的初始大小。
-V 顯示指令版本資訊。

4.2. 掛載檔案系統

在掛載 GFS2 檔案系統之前,該檔案系統必須是存在的(請參閱〈節 4.1, “製作檔案系統”〉),檔案系統所位於的卷冊也必須被啟用,並且支援的叢集與鎖定系統也必須被啟動(請參閱《配置並管理 Red Hat Cluster》)。當滿足了這些需求之後,您便可將 GFS2 檔案系統視為 Linux 檔案系統來掛載。

注意

在叢集管理員(cman)尚未啟動前,就掛載 GFS2 檔案系統,會產生以下錯誤訊息:
[root@gfs-a24c-01 ~]# mount -t gfs2 -o noatime /dev/mapper/mpathap1 /mnt
gfs_controld join connect error: Connection refused
error mounting lockproto lock_dlm
若要操縱檔案的 ACL(Access Control List,存取控制清單),您必須使用 -o acl 掛載選項來掛載檔案系統。若檔案系統掛載時沒有使用 -o acl 掛載選項的話,用戶雖可檢視 ACL(透過 getfacl 指令),不過卻無法設定 ACL(透過 setfacl 指令)。

4.2.1. 用法

不使用 ACL 操作來進行掛載
mount BlockDevice MountPoint
使用 ACL 操作來進行掛載
mount -o acl BlockDevice MountPoint
-o acl
用來允許操縱檔案 ACL 的 GFS2 專屬選項。
BlockDevice
可指定 GFS2 檔案系統所駐留的區塊裝置。
MountPoint
可指定 GFS2 檔案系統應被掛載的目錄。

4.2.2. 範例

在此範例中,/dev/vg01/lvol0 上的 GFS2 檔案系統會被掛載於 /mygfs2 目錄上。
mount /dev/vg01/lvol0 /mygfs2

4.2.3. 完整使用方法

mount BlockDevice MountPoint -o option
-o option 引數包含 GFS2 專屬的選項(請參閱 表格 4.2, “GFS2 專屬的掛載選項”)或是可接受的標準 Linux mount -o 選項,或是這兩者的組合。多重的 option 參數會以逗號區隔開來,並且無空格。

注意

mount 指令是一項 Linux 系統指令。除了使用描述於此部份中的 GFS2 專屬選項,您亦可使用其它的標準 mount 指令選項(例如 -r)。如欲取得更多有關於其它 Linux mount 指令選項的相關資訊,請查看 Linux 的 mount man page。
表格 4.2, “GFS2 專屬的掛載選項” 描述了可在掛載時被傳送至 GFS2 的可用 GFS2 專屬 -o option 值。

注意

此表格包含了僅使用於本機檔案系統的選項之詳述。然而請注意,在 RHEL 6 發行版上,Red Hat 並不支援使用 GFS2 來作為單節點檔案系統。Red Hat 將繼續支援單節點 GFS2 檔案系統,以用來掛載叢集檔案系統的 snapshot(比方說,用於備份)。

表格 4.2. GFS2 專屬的掛載選項

選項描述
acl允許操縱檔案的 ACL。如果檔案系統在掛載時沒有使用 acl 掛載選項的話,用戶雖能檢視 ACL(透過 getfacl 指令),不過卻不允許針對於這些 ACL 進行設定(透過 setfacl 指令)。
data=[ordered|writeback]當設置了 data=ordered 之後,經過一項交易所被修改的用戶資料,會在該交易被載入磁碟中之前被 flush 至磁碟中。這可避免用戶在當機後,在檔案中看見未初始化的區塊。當設置了 data=writeback 模式之後,任何時候只要用戶資料被標示不完整(dirty)的話,該用戶資料便會被寫入磁碟中;這無法提供和 ordered 模式相同的一致性保證,不過它對於某些工作來說速度會較快。預設值為 ordered 模式。
ignore_local_fs
注意:當 GFS2 檔案系統被共享時,就「不該」使用此選項。
強制 GFS2 將檔案系統視為 multihost 的檔案系統。就預設值,若使用 lock_nolock 的話,localflocks 旗標會自動地被開啟。
localflocks
注意:當 GFS2 檔案系統被共享時,請勿使用此選項。
命令 GFS2 來讓 VFS(虛擬檔案系統)層級進行所有的 flock 和 fcntl。localflocks 旗標會自動地被 lock_nolock 開啟。
lockproto=LockModuleName允許用戶指定檔案系統要使用哪個鎖定協定。若未指定 LockModuleName 的話,那麼鎖定協定名稱便會由檔案系統的 superblock 讀取。
locktable=LockTableName允許用戶指定檔案系統要使用哪個鎖定表格。
quota=[off/account/on]開啟或關閉檔案系統的配額。將配額設為 account 狀態可讓檔案系統正確地維護各個 UID/GID 使用量上的數據;限制(limit)和警告(warning)值會被忽略掉。預設值為 off
errors=panic|withdraw當指定了 errors=panic 時,檔案系統錯誤將會造成 kernel panic。預設特性(與指定 errors=withdraw 相同)是系統會由檔案系統撤回,並使其無法在下次重新啟動時被存取;在某些情況下,系統可能會繼續運作。欲取得 GFS2 撤回功能上的相關資訊,請參閱〈節 4.14, “GFS2 撤出功能”〉。
discard/nodiscard使 GFS2 為已被釋出的區塊產生「discard」I/O 請求。這可使用於適當的硬體,以實作精簡佈建與相似的配置。
barrier/nobarrier使 GFS2 在 flush 日誌時傳送 I/O 障礙。預設值為 on。若基礎裝置不支援 I/O barrier,此選項便會自動地關閉。建議您任何時候皆搭配使用 GFS2 與 I/O barrier,除非區塊裝置被設計為不會失去它的寫入快取內容(比方說,若區塊裝置是在 UPS 上,或是沒有寫入快取的話)。
quota_quantum=secs設置遭到更改的配額資訊在被寫入配額檔案之前,滯留在一個節點上的秒數。建議您如此設置此參數。此數值為大於零的整數秒數。預設值為 60 秒。較短暫的設定會造成較快的 lazy quota 資訊更新速度,並較能避免某些使用者超出他們的配額。較長的時間設定則會使與配額相關的檔案系統作業變得較快,且更有效率。
statfs_quantum=secs建議您將 statfs_quantum 設為 0 以設置 statfs 的較慢版本。預設值為 30 秒,這設置了statfs 的變更會被同步至 master statfs 檔案之前的最長時間。您可進行調整,以允許較快、精確度較低的 statfs 值,或是較慢,但較為精確的數值。當此選項被設為 0 時,statfs 總是會回報真實的值。
statfs_percent=value於本機上,在 statfs 資訊被同步回 master statfs 檔案之前,儘管時間尚未過期,提供最大變更百分比的界限。若 statfs_quantum 的設定為 0 的話,那麼此設定便會被忽略。

4.3. 卸載檔案系統

GFS2 檔案系統可像任何 Linux 檔案系統一樣地被卸載 — 透過使用 umount 指令。

注意

umount 指令是一項 Linux 系統指令。有關於這項指令的相關資訊位於 Linux 的 umount 指令 man page 中。

4.3.1. 用法

umount MountPoint
MountPoint
指得是 GFS2 檔案系統目前被掛載的目錄。

4.4. 掛載 GFS2 檔案系統時的特殊考量

當系統關閉並卸載檔案系統時,系統將不會偵測到手動式(而非自動地透過 fstab 檔案)掛載的 GFS2 檔案系統。基於如此,GFS2 script 將不會卸載 GFS2 檔案系統。當 GFS2 關機 script 執行後,標準關機程序便會終止所有剩下的使用者程序,包括叢集架構,並嘗試卸載檔案系統。在無叢集架構的情況下,這項卸載將會失效,並且系統將會停擺。
若要避免系統在卸載 GFS2 檔案系統時運作停擺,您應進行下列動作之一:
  • 總是使用 fstab 檔案中的項目來掛載 GFS2 檔案系統。
  • 若 GFS2 檔案系統透過了 mount 指令手動式掛載的話,請確認在重新啟動或關閉系統前,透過 umount 指令將其手動式卸載。
若您的檔案系統在這些情況下關閉時進行卸載的話,請重新啟動硬體。資料不太可能會遺失,因為檔案系統在進行關機程序時已同步化。

4.5. GFS2 配額管理

檔案系統配額可被用來限制用戶或群組可使用的檔案系統空間。用戶或群組在設置了配額限制之前將不會有任何配額限制。當 GFS2 檔案系統以 quota=onquota=account 選項掛載時,GFS2 會在沒有空間限制的情況下,持續追蹤每個使用者與群組所使用的空間。儘管沒有設下限制,GFS2 還是會追蹤各個用戶和群組所使用掉的空間。GFS2 會以交易性的方式來更新配額資訊,如此一來系統當機的情況下便無須重建配額使用量。
若要避免效能降低,GFS2 節點只會週期性地將更新同步至配額檔案。「fuzzy」(模糊)的配額計算能讓用戶或群組使用稍微超出限制的空間。若要避免此情況發生,GFS2 可動態減少同步化時間並利用「hard」(硬性)配額限制。

注意

RHEL 6.1 釋出時,GFS2 支援標準的 Linux 空間配額機制。為了要使用此功能,請安裝 quota RPM 套件。這是管理 GFS2 配額的建議方式,也該用於所有使用配額限制的新 GFS2 系統上。本節描述如何使用這些機制,管理 GFS2 空間配額。
在較早的 RHEL 系統上,GFS2 需要 gfs2_quota 指令來管理配額。欲知更多使用 gfs2_quota 指令的資訊,請參閱〈附錄 A, 使用 gfs2_quota 指令管理 GFS2 磁碟配額〉。

4.5.1. 配置磁碟配額

要採用磁碟配額,請使用以下步驟:
  1. 以強制模式(enforcement)或帳目模式(accounting)設定配額。
  2. 使用目前的區塊使用資訊,來初始化配額資料庫檔案。
  3. 指定配額政策。(在帳目模式中,這些政策並非強制的。)
以下小節會詳細討論每一個步驟。

4.5.1.1. 使用強制模式或帳目模式來設定配額

在 GFS2 檔案系統中,配額制度的預設值是停用的。若要啟用檔案系統的配額實施,請透過 quota=on 選項來掛載檔案系統。
您可在不實施限制和警告值的情況下,追蹤磁碟使用量和維護所有使用者和群組的配額計算。若要這麼作,請透過指定 quota=account 選項來掛載檔案系統。
4.5.1.1.1. 用法
若要掛載已啟用配額功能的檔案系統,請以 quota=on 選項來掛載檔案系統。
mount -o quota=on BlockDevice MountPoint
若要在掛載檔案系統時保持配額的帳目模式(即使並未強制使用配額限制功能),請在掛載檔案系統時指定 quota=account 選項。
mount -o quota=account BlockDevice MountPoint
若要在掛載檔案系統時停用配額,請透過指定 quota=off 選項來掛載檔案系統。這是預設的設定。
mount -o quota=off BlockDevice MountPoint
quota={on|off|account}
on - 指定掛載檔案系統時,啟用配額功能。
off - 指定掛載檔案系統時,停用配額功能。
account - 指定用戶和群組使用量數據由檔案系統所維護,即使沒有強制設置配額限制亦然。
BlockDevice
可指定 GFS2 檔案系統所駐留的區塊裝置。
MountPoint
可指定 GFS2 檔案系統應被掛載的目錄。
4.5.1.1.2. 範例
在此範例中,/dev/vg01/lvol0 上的 GFS2 檔案系統會被掛載於 /mygfs2 目錄上,並且會啟用配額功能。
mount -o quota=on /dev/vg01/lvol0 /mygfs2
在此範例中,/dev/vg01/lvol0 上的 GFS2 檔案系統會被掛載於 /mygfs2 目錄上,並且配額計算會被啟用,但不強制。
mount -o quota=account /dev/vg01/lvol0 /mygfs2

4.5.1.2. 建立配額資料庫檔案

在每個啟用配額的檔案系統都掛載了之後,系統就有處理磁碟配額的能力。然而,檔案系統本身還沒有支援配額的能力。下一步是執行 quotacheck 指令。
quotacheck 指令會檢視已啟用配額功能的檔案系統,並在每個檔案系統上建立現有磁碟使用量的表格。這表格會給作業系統更新磁碟使用量之用。除此之外,檔案系統的磁碟配額檔也會更新。
要在檔案系統上建立配額檔案,請使用 quotacheck 指令的 -u-g 選項;在第一次為使用者與使用群組設定配額時,您必須指定這兩個選項。舉例來說,如果配額用在 /home 檔案系統裡,請在 /home 目錄裡建立這些檔案:
quotacheck -ug /home

4.5.1.3. 針對使用者指定配額

最後一步是使用 edquota 指令來指定磁碟配額。請注意,如果您已經以配額計算方式掛載了檔案系統(使用 quota=account 選項),那麼配額功能就不會是強制使用的。
要為使用者配置配額,請以 root 身份開啟命令列,執行以下指令:
edquota username
請為每個使用者進行這項步驟。舉例來說,如果在 /etc/fstab 裡啟用了 /home 分割區(在以下的例子裡,是 /dev/VolGroup00/LogVol02)的磁碟配額功能,並執行了 edquota testuser 指令,那麼系統的預設值會顯示以下資訊:
Disk quotas for user testuser (uid 501):   
Filesystem                blocks     soft     hard    inodes   soft   hard
/dev/VolGroup00/LogVol02  440436        0        0

注意

edquota 會使用 EDITOR 環境變數所定義的文字編輯器。要改變文字編輯器,請從 ~/.bash_profile 檔案中,將 EDITOR 變數設定為您想要使用的編輯器之完整路徑。
第一欄是啟用了配額功能的檔案系統名稱。第二欄顯示了使用者目前使用的區塊數目。接下來兩個欄位是用來設定使用者對於此檔案系統的軟性與硬性限制。
軟性限制定義了可以使用的磁碟空間之最大數量。
硬性限制是使用者或群組可以使用的最大磁碟空間。一旦超過這個限制,就不能進一步使用磁碟空間。
GFS2 檔案系統不會為 inode 維護配額,因此這些欄位並不適用於 GFS2 檔案系統,而會留白。
任何設為 0 的值表示未設定限制。在文書編輯器裡,請變更您想要改變的限制,例如:
Disk quotas for user testuser (uid 501):   
Filesystem                blocks     soft     hard    inodes   soft   hard
/dev/VolGroup00/LogVol02  440436   500000   550000
要檢查使用者的磁碟配額是否已經設定,請使用此指令:
quota testuser

4.5.1.4. 針對群組指定磁碟配額

您也可以針對群組指定配額。請注意如果您在檔案系統上使用了配額計算功能(亦即指定了 account=on 選項),那麼就不會強迫使用配額功能。
要為 devel 群組設定群組配額功能(設定前此群組就必須存在),請使用以下指令:
edquota -g devel
這個指令會在文書編輯器裡,顯示此群組的現有配額:
Disk quotas for group devel (gid 505):   
Filesystem                blocks    soft     hard    inodes   soft   hard
/dev/VolGroup00/LogVol02  440400       0        0
GFS2 檔案系統不會為 inode 維護配額,因此這些欄位並不適用於 GFS2 檔案系統,而會留白。請修改這些限制,然後儲存檔案。
要檢查是否設定了群組配額,請執行以下指令:
quota -g devel

4.5.2. 管理磁碟配額

設定好磁碟配額之後,您還需要時時維護 — 大部分工作是監控配額是否超過限制,並確定配額設定正確。
當然,如果使用者不斷地超過空間限制,或一直超過軟性限制,那麼系統管理者有幾種選擇,根據使用者類型以及對其工作的衝擊,進行調整。管理工作可以是幫助使用者節省使用空間,或增加使用者的磁碟配額。
您可以利用 repquota 工具程式,建立磁碟使用報告。舉例來說,repquota /home 會產生以下結果:
*** Report for user quotas on device /dev/mapper/VolGroup00-LogVol02 
Block grace time: 7days; Inode grace time: 7days
			Block limits			File limits		
User		used	soft	hard	grace	used	soft	hard	grace 
---------------------------------------------------------------------- 
root      --      36       0       0              4     0     0 
kristin   --     540       0       0            125     0     0 
testuser  --  440400  500000  550000          37418     0     0
要檢視所有(-a 選項)已啟用磁碟配額的檔案系統之報告,請使用以下指令:
repquota -a
這份報告雖然簡單易讀,但還是有需要解釋的地方。顯示於每個使用者後面的 -- 讓您立即得知是否超過了區塊限制。如果超過了區塊的軟性限制,+ 會出現在第一個 - 的地方。第二個 - 表示 inode 的限制,但 GFS2 檔案系統並不支援 inode 限制,因此這個欄位永遠是 -。GFS2 檔案系統不支援寬限期,所以 grace 欄位會是空白的。
請注意,不管底下的檔案系統為何,repquota 指令並不支援 NFS。

4.5.3. 保持配額的正確性

如果您停用了磁碟配額功能一陣子之後,再啟用了檔案系統的配額功能,請執行 quotacheck 指令,以建立、檢查、並修護配額檔案。除此之外,如果您覺得配額檔案不正確的話,也請執行 quotacheck;系統當機時,檔案系統沒有正確地卸載,就可能發生這種情況。
欲知關於 quotacheck 指令的詳細資料,請參閱 quotacheck 的 man page。

注意

當所有節點上的檔案系統相對上較少存取到的時候,請執行 quotacheck,因為磁碟動作可能會影響到配額值的運算結果。

4.5.4. 使用 quotasync 指令來同步配額

GFS2 會將所有配額資訊儲存入它自己在磁碟上的內部檔案。GFS2 節點不會為每次寫入的檔案更新這個配額檔案;預設上它會每 60 秒更新配額檔案一次。這是為了要避免寫至配額檔案的節點之間的競用,因為這會造成效能降低。
當用戶或群組接近配額限制時,GFS2 便會動態減少配置檔案更新之間的時間,以避免超過限制。配額同步化之間的正常時間是個可調整的參數 quota_quantum。如 表格 4.2, “GFS2 專屬的掛載選項” 中所述,您可透過 quota_quantum= 掛載選項,來修改預設值的 60 秒。每當掛載檔案系統時,各節點上皆必須設置 quota_quantum 參數。對於 quota_quantum 參數所進行的變更,無法在卸載後保持有效。您可透過 mount -o remount 來更新 quota_quantum 的值。
您可使用 quotasync 指令,在 GFS2 所進行的自動更新時,從節點同步至磁碟上的配額檔案。

4.5.4.1. 用法

同步化配額資訊
quotasync [-ug] -a|mntpnt...
u
同步使用者配額檔案。
g
同步群組配額檔案。
a
同步所有啟用配額、並支援同步功能的檔案系統。當不使用 -a 時,請指定檔案系統的掛載點。
mntpnt
指定動作所適用於的 GFS2 檔案系統。
調整同步化之間的時間
mount -o quota_quantum=secs,remount BlockDevice MountPoint
MountPoint
指定動作所適用於的 GFS2 檔案系統。
secs
指定 GFS2 的一般配額檔案同步化之間的新時間週期。較小的值可能會增加競用並使效能降低。

4.5.4.2. 範例

這範例會從所執行的節點,同步 /mnt/mygfs2 檔案系統上所有已快取的配額檔案。
# quotasync -ug /mnt/mygfs2
在此範例中,當要將 /mnt/mygfs2 檔案系統重新掛載於 /dev/volgroup/logical_volume 邏輯卷冊上時,正常配額檔案更新之間的預設時間間隔,已更改為一小時(3,600 秒)。
# mount -o quota_quantum=3600,remount /dev/volgroup/logical_volume /mnt/mygfs2

4.5.5. 參考資料

欲知更多磁碟配額的資訊,請參閱以下指令的 man page:
  • quotacheck
  • edquota
  • repquota
  • quota

4.6. 擴充檔案系統

當檔案系統所存於的裝置被擴充之後,gfs2_grow 指令可被用來擴充 GFS2 檔案系統。在一個現存的 GFS2 檔案系統上執行 gfs2_grow 指令可將目前檔案系統和裝置之間的所有可用空間填入新初始化的 GFS2 檔案系統延伸。當這項填入作業完成後,檔案系統的資源指數(resource index)便會被更新。接著,叢集中所有的節點便能使用被新增的額外儲存空間。
gfs2_grow 指令必須在已掛載的檔案系統上執行,不過它只需要在叢集中的一個節點上執行。所有其它節點都會察覺到擴充已發生,並自動地開始使用新的空間。

注意

當您透過了 mkfs.gfs2 指令建立 GFS2 檔案系統後,您將無法縮減檔案系統的大小。

4.6.1. 用法

gfs2_grow MountPoint
MountPoint
指定動作所適用於的 GFS2 檔案系統。

4.6.2. 註解

在執行 gfs2_grow 指令之前:
  • 備份檔案系統上的重要資料。
  • 透過執行 df MountPoint 指令來判斷欲擴充的檔案系統所使用的卷冊。
  • 以 LVM 來擴展基礎的叢集卷冊。欲取得管理 LVM 卷冊上的相關資訊,請參閱《LVM 管理》。
執行了 gfs2_grow 指令後,請執行 df 指令來檢查新的空間在檔案系統中是否已可使用。

4.6.3. 範例

在此範例中,/mygfs2fs 目錄上的檔案系統將會被擴充。
[root@dash-01 ~]# gfs2_grow /mygfs2fs
FS: Mount Point: /mygfs2fs
FS: Device:      /dev/mapper/gfs2testvg-gfs2testlv
FS: Size:        524288 (0x80000)
FS: RG size:     65533 (0xfffd)
DEV: Size:       655360 (0xa0000)
The file system grew by 512MB.
gfs2_grow complete.

4.6.4. 完整使用方法

gfs2_grow [Options] {MountPoint | Device} [MountPoint | Device]
MountPoint
指定 GFS2 檔案系統所掛載於的目錄。
Device
指定檔案系統的裝置節點。
表格 4.3, “當擴充檔案系統時可使用的 GFS2 專屬選項” 詳述了擴充 GFS2 檔案系統時可使用的 GFS2 專屬選項。

表格 4.3. 當擴充檔案系統時可使用的 GFS2 專屬選項

選項描述
-h說明。顯示簡短的使用方法訊息。
-q靜默。降低詳細度。
-r MegaBytes指定新資源群組的大小。預設大小為 256MB。
-T測試。進行所有計算,不過不會將任何資料寫入磁碟,並且不會擴充檔案系統。
-V顯示指令版本資訊。

4.7. 新增日誌至檔案系統

gfs2_jadd 指令可用來將日誌新增至 GFS2 檔案系統上。您可在任何時候,在不擴充基本邏輯卷冊的情況下,動態地將日誌新增至一個 GFS2 檔案系統上。gfs2_jadd 指令必須在已掛載的檔案系統上執行,不過它只需要在叢集中的一個節點上執行即可。所有其它節點皆能偵測到擴充已發生。

注意

若 GFS2 檔案系統被填滿,gfs2_jadd 便會失效,儘管包含了該檔案系統的邏輯卷冊已擴充,並且大於檔案系統。這是因為在 GFS2 檔案系統中,日誌為純檔案而非內嵌的 metadata。因此,純粹將基礎邏輯卷冊擴展,並無法為日誌提供額外空間。
在將日誌新增至 GFS 檔案系統之前,您可使用 gfs2_tooljournals 選項來找出 GFS2 檔案系統目前包含了多少日誌。下列範例顯示了掛載於 /mnt/gfs2 的檔案系統中的日誌數量與大小。
[root@roth-01 ../cluster/gfs2]# gfs2_tool journals /mnt/gfs2
journal2 - 128MB
journal1 - 128MB
journal0 - 128MB
3 journal(s) found.

4.7.1. 用法

gfs2_jadd -j Number MountPoint
Number
指定了欲新增的日誌數量。
MountPoint
指定 GFS2 檔案系統所掛載於的目錄。

4.7.2. 範例

在此範例中,有一個日誌會被新增至位於 /mygfs2 目錄上的檔案系統。
gfs2_jadd -j1 /mygfs2
在此範例中,有兩個日誌會被新增至位於 /mygfs2 目錄上的檔案系統。
gfs2_jadd -j2 /mygfs2

4.7.3. 完整使用方法

gfs2_jadd [Options] {MountPoint | Device} [MountPoint | Device]
MountPoint
指定 GFS2 檔案系統所掛載於的目錄。
Device
指定檔案系統的裝置節點。
表格 4.4, “新增日誌時可使用的 GFS2 專屬選項” 詳述了新增日誌至 GFS2 檔案系統時,可使用的 GFS2 專屬選項。

表格 4.4. 新增日誌時可使用的 GFS2 專屬選項

旗標參數描述
-h 說明。顯示簡短的使用方法訊息。
-JMegaBytes以 MB 為單位來指定新的日誌。預設的日誌大小為 128MB。最小大小為 32MB。若要將不同大小的日誌新增至檔案系統,您必須針對於各個不同大小的日誌執行 gfs2_jadd 指令。指定的大小會被四捨五入,並成為檔案系統被建立時所指定的日誌區段大小的倍數。
-jNumber指定 gfs2_jadd 指令所新增的新日誌數量。預設值為 1。
-q 靜默。降低詳細度。
-V 顯示指令版本資訊。

4.8. 資料日誌

一般來說,GFS2 只會將 metadata 紀錄至日誌裡。檔案內容則會由核心的定期同步功能寫入,然後清除系統緩衝區。對一個檔案使用 fsync() 呼叫會立即將檔案的資料寫入磁碟中。當所有資料安全地寫入磁碟之後,這呼叫會回傳。
資料日誌會導致 fsync() 時間降低,尤其是小型的檔案,這是因為除了 metadata 之外,檔案資料也會被紀錄到日誌中。當檔案大小增加時,所需時間便會變長。當開啟了資料日誌時,寫入中型和大型檔案的速度會慢上許多。
依賴 fsync() 來同步檔案資料的應用程式,會因為使用資料日誌功能,而改善效能。資料日誌可以在任何已標示旗標的目錄(及其子目錄)中,自動啟用。長度為零的現有檔案,也可以啟用或停用資料日誌功能。
啟用目錄的資料日誌功能會將目錄設定為「繼承 jdata」,這表示在該目錄中建立的所有檔案與目錄皆會被紀錄。您可透過 chattr 指令,啟用或停用一個檔案或目錄上的資料日誌功能。
下列指令可啟用 /mnt/gfs2/gfs2_dir/newfile 檔案上的資料日誌,並檢查旗標是否已正確設置。
[root@roth-01 ~]# chattr +j /mnt/gfs2/gfs2_dir/newfile
[root@roth-01 ~]# lsattr /mnt/gfs2/gfs2_dir
---------j--- /mnt/gfs2/gfs2_dir/newfile
以下指令停用 /mnt/gfs2/gfs2_dir/newfile 檔案的資料日誌,並檢查旗標是否已經正確設定。
[root@roth-01 ~]# chattr -j /mnt/gfs2/gfs2_dir/newfile
[root@roth-01 ~]# lsattr /mnt/gfs2/gfs2_dir
------------- /mnt/gfs2/gfs2_dir/newfile
您亦可使用 chattr 指令來設定目錄上的 j 旗標。當您為目錄設定此旗標時,所有在此目錄中建立的檔案與目錄皆會啟用日誌功能。以下指令集會在 gfs2_dir 目錄上設置 j 旗標,然後檢查該旗標是否設定正確。之後,這項指令會在 /mnt/gfs2/gfs2_dir 目錄中建立一個新檔案,稱為 newfile,然後檢查該檔案的 j 旗標是否設定正確。因為該目錄已設定了 j 旗標,因此 newfile 的日誌功能也會被啟用。
[root@roth-01 ~]# chattr -j /mnt/gfs2/gfs2_dir
[root@roth-01 ~]# lsattr /mnt/gfs2
---------j--- /mnt/gfs2/gfs2_dir
[root@roth-01 ~]# touch /mnt/gfs2/gfs2_dir/newfile
[root@roth-01 ~]# lsattr /mnt/gfs2/gfs2_dir
---------j--- /mnt/gfs2/gfs2_dir/newfile

4.9. 配置 atime 更新

每個檔案與目錄的 inode 都有三個與其相關的時間戳記:
  • ctime — 前一次 inode 狀態改變的時間
  • mtime — 上一次檔案(或目錄)資料被修改的時間
  • atime — 上一次檔案(或目錄)資料被存取的時間
如果 atime 更新已經啟用(因為啟用這些更新是 GFS2 與其他 Linux 檔案系統的預設值),那麼每次檔案被讀取時,inode 就需要被更新。
因為少數應用程式會使用 atime 所提供的資訊,所以這些更新會導致許多不需要的寫入量,以及檔案鎖定量。這些都會降低效能,因此關掉或降低 atime 更新,是比較建議的作法。
您可以使用以下兩種方式,降低 atime 更新所造成的影響:
  • 使用 relatime(相對 atime)來掛載,如果之前的 atime 更新比 mtimectime 更新來得舊,就會進行更新。
  • 使用 noatime 來掛載,這會停用該檔案系統的 atime 更新。

4.9.1. 以 relatime 來掛載

relatime(相對 atime)Linux 掛載選項可以在掛載檔案系統時使用。這選項會指定如果之前的 atime 更新比 mtimectime 更新來得舊,那麼 atime 就會更新。

4.9.1.1. 用法

mount  BlockDevice MountPoint -o relatime
BlockDevice
可指定 GFS2 檔案系統所駐留的區塊裝置。
MountPoint
可指定 GFS2 檔案系統應被掛載的目錄。

4.9.1.2. 範例

在這範例中,GFS2 檔案系統位於 /dev/vg01/lvol0 上,並掛載於 /mygfs2 目錄。atime 更新只會在之前的 atime 更新比 mtimectime 更新要來得舊時發生。
mount /dev/vg01/lvol0 /mygfs2 -o relatime

4.9.2. 以 noatime 來掛載

noatime Linux 掛載選項可以用在掛載檔案系統時,它會停用該檔案系統的 atime 更新。

4.9.2.1. 用法

mount BlockDevice MountPoint -o noatime
BlockDevice
可指定 GFS2 檔案系統所駐留的區塊裝置。
MountPoint
可指定 GFS2 檔案系統應被掛載的目錄。

4.9.2.2. 範例

在這範例中,GFS2 檔案系統位於 /dev/vg01/lvol0 上,掛載於 /mygfs2 目錄上,並關閉 atime 更新。
mount /dev/vg01/lvol0 /mygfs2 -o noatime

4.10. 暫停檔案系統的動作

您可以使用 dmsetup suspend 指令來暫停檔案系統的寫入活動。暫停寫入活動讓您擷取硬體裝置的靜態快照。dmsetup resume 指令可停止這項暫停動作。

4.10.1. 用法

開始暫停功能
dmsetup suspend MountPoint
結束暫停功能
dmsetup resume MountPoint
MountPoint
指定檔案系統。

4.10.2. 範例

這範例會暫停 /mygfs2 檔案系統的寫入動作。
# dmsetup suspend /mygfs2
以下範例停止對 /mygfs2 檔案系統的暫停動作。
# dmsetup resume /mygfs2

4.11. 修復檔案系統

檔案系統已經掛載的節點失效時,檔案系統的日誌有助於快速復原。然而,如果儲存裝置失去電力或離線,那麼檔案系統就有可能損毀。(日誌功能無法從儲存子系統的失效中復原。)這類型的損毀發生時,您可以使用 fsck.gfs2 指令來修復 GFS2 檔案系統。

重要

fsck.gfs2 指令只能在不被任何節點掛載的檔案系統上執行。

重要

您不應該在開機時透過 fsck.gfs2 指令來檢查 GFS2 檔案系統。fsck.gfs2 指令無法在開機時判斷檔案系統是否已由另一節點所掛載。您只應該在系統啟動後,手動式執行 fsck.gfs2 指令。
若要確保 fsck.gfs2 指令在開機時不會執行於某個 GFS2 檔案系統上,請修改 /etc/fstab 檔案,以使 GFS2 檔案系統掛載點的最後兩欄顯示「0 0」,而非「1 1」(或任何其它數字),如同以下範例:
/dev/VG12/lv_svr_home   /svr_home       gfs2     defaults,noatime,nodiratime,noquota     0 0

注意

如果您之前用過 GFS 檔案系統上的 gfs_fsck 指令,請注意 fsck.gfs2 指令跟 gfs_fsck 的早期版本有所不同,茲列如下:
  • 執行 fsck.gfs2 時按下 Ctrl+C 會干擾程序,並顯示一則提示詢問您是否希望退出指令,略過目前剩下的傳送,或繼續進行處理。
  • 您可使用 -v 旗標來增加顯示資訊的詳細等級。使用第二個 -v 旗標可進一步增加此等級。
  • 您可使用 -q 旗標來降低顯示資訊的詳細等級。使用第二個 -q 旗標可進一步降低此等級。
  • -n 選項會以唯讀模式開啟檔案系統,並對所有詢問回答「no」。這選項提供了寫入指令以顯露錯誤的方式,而不用實際讓 fsck.gfs2 指令生效。
有關於其它指令選項,請參閱 fsck.gfs2 的 man page。
跟作業系統與 kernel 所使用的記憶體相比,執行 fsck.gfs2 指令需要更多的系統記憶體。GFS2 檔案系統中的各個記憶體區塊本身需要大約 5 bit 的額外記憶體,或 5/8 byte。因此,若要估計執行 fsck.gfs2 指令需要使用多少 byte 的檔案系統記憶體,請查出檔案系統包含了多少區塊,並將其數量乘以 5/8。
比方說,若要找出在一個 16TB 和 4K 區塊大小的 GFS2 檔案系統上執行 fsck.gfs2 指令,大約需要多少記憶體,首先請透過將 16TB 除以 4K 來查出檔案系統中包含了多少記憶體區塊:
 17,592,186,044,416 / 4,096 = 4,294,967,296
因為此檔案系統包含了 4,294,967,296 個區塊,請將此數字乘以 5/8 以判斷出所需記憶體的 byte 數量為何:
4,294,967,296 * 5/8 = 2,684,354,560
此檔案系統需要大約 2.6GB 的可用記憶體,以執行 fsck.gfs2 指令。請注意,若區塊大小為 1K,執行 fsck.gfs2 指令便需要四倍的記憶體數量,或大約 11GB。

4.11.1. 用法

fsck.gfs2 -y BlockDevice
-y
-y 旗標會對所有問題回答 yes。指定 -y 旗標後,fsck.gfs2 指令做出任何改變之前,不會提示您。
BlockDevice
可指定 GFS2 檔案系統所駐留的區塊裝置。

4.11.2. 範例

在這範例中,位於 /dev/testvol/testlv 區塊裝置的 GFS2 檔案系統會被修復。所有對於修復的問題,都會自動回答 yes
[root@dash-01 ~]# fsck.gfs2 -y /dev/testvg/testlv
Initializing fsck
Validating Resource Group index.
Level 1 RG check.
(level 1 passed)
Clearing journals (this may take a while)...
Journals cleared.
Starting pass1
Pass1 complete
Starting pass1b
Pass1b complete
Starting pass1c
Pass1c complete
Starting pass2
Pass2 complete
Starting pass3
Pass3 complete
Starting pass4
Pass4 complete
Starting pass5
Pass5 complete
Writing changes to disk
fsck.gfs2 complete

4.12. Bind 掛載與本文相依的路徑名稱

GFS2 檔案系統並不提供與本文相依(context-dependent)的路徑名稱,這讓您可以建立符號連結,指向不同的檔案或目錄。要在 GFS2 中使用這功能,您可以使用 mount 指令的 bind 選項。
mount 指令的 bind 選項能讓您重新掛載檔案層級的不同部份,同時又可以在原先的位置中取用。這指令的格式如下。
mount --bind olddir newdir
執行這個指令後,olddir 目錄的內容會在兩個地方出現:olddirnewdir。您也可以使用這選項讓一個檔案出現在兩個地方。
舉例來說,執行以下指令後,/root/tmp 的內容會與之前掛載的 /var/log 目錄相同。
[root@menscryfa ~]# cd ~root
[root@menscryfa ~]# mkdir ./tmp
[root@menscryfa ~]# mount --bind /var/log /root/tmp
您也可以使用 /etc/fstab 檔案,在掛載的時候達成一樣的效果。以下 /etc/fstab 條目會讓 /root/tmp 的目錄內容與 /var/log 目錄的相同。
/var/log                /root/tmp               none    bind            0 0
掛載了檔案系統之後,您可以使用 mount 指令,看看該檔案系統是否已經被掛載,如以下範例所示。
[root@menscryfa ~]# mount | grep /tmp
/var/log on /root/tmp type none (rw,bind)
有了支援與本文相關的路徑名稱之後,您可以定義 /bin 目錄作為與本文相關的路徑名稱,這可以解析以下路徑之一,端視系統架構而定。
/usr/i386-bin
/usr/x86_64-bin
/usr/ppc64-bin
您可以建立一個空的 /bin 目錄,備份這同樣的功能。然後,使用一個程序檔或 /etc/fstab,透過 mount -bind 指令把每一個架構目錄掛載到 /bin 目錄下。舉例來說,您可以用以下指令作為程序檔。
mount --bind /usr/i386-bin /bin
否則您可以使用以下條目,放入 /etc/fstab 檔案中。
/usr/1386-bin             /bin               none    bind            0 0
bind 掛載可以提供比本文相關的路徑名稱更大的彈性,因為您可以根據任何自訂的定義(例如檔案系統 %fill 的值)來掛載不同的目錄。與本文相關的路徑名稱所能提供的其實更為受限。然而請注意,您需要自行撰寫程序檔,根據像 %fill 的值來掛載。

警告

當您使用 bind 選項來掛載檔案系統,同時原有的檔案系統是以 rw 選項掛載,那麼新的檔案系統也會以 rw 選項掛載,即使您使用了 ro 選項亦然;ro 旗標會自動被忽略。在這種情形下,新的檔案系統在 /proc/mounts 目錄中會被標示為 ro,產生誤導。

4.13. Bind 掛載與檔案系統掛載順序

當您使用了 mount 指令的 bind 選項時,您必須確認檔案系統的掛載順序是否正確。在下列範例中,在 /tmp 目錄上執行 bind 掛載之前,/var/log 目錄必須先被掛載:
# mount --bind /var/log /tmp
檔案系統的掛載順序如下:
  • 一般來說,檔案系統的掛載順序是以出現在 fstab 檔案中的檔案系統順序而定。此順序的例外為透過 _netdev 旗標掛載的檔案系統,或是擁有自己的 init script 的檔案系統。
  • 擁有自己的 init script 的檔案系統會在初始化程序後續進行時,掛載於 fstab 檔案中的檔案系統後。
  • 透過 _netdev 旗標掛載的檔案系統,會在系統上的網路啟用時掛載。
若您的配置需要您建立 bind mount,以掛載 GFS2 檔案系統,您的 fstab 檔案的順序可如下編排:
  1. bind 掛載時,需要掛載的本機檔案系統。
  2. bind 掛載要使用 GFS2 檔案系統的目錄。
  3. 掛載 GFS2 檔案系統。
若您的配置需要您將本機目錄或檔案系統 bind 掛載至 GFS2 檔案系統上,在 fstab 檔案中,按照正確順序列出檔案系統將無法正確掛載檔案系統,因為在執行 GFS2 init script 之前,GFS2 檔案系統不會被掛載。在此情況下,您應編寫一則 init script 以啟動 bind 掛載,如此一來,在 GFS2 檔案系統被掛載之前,bind 掛載將不會進行。
下列 script 為自訂 init script 的範本。此 script 會將兩個目錄 bind 掛載至 GFS2 檔案系統的兩個目錄上。在此範例中,/mnt/gfs2a 上有個既有的 GFS2 掛載點,這會在 GFS2 init script 執行時,叢集啟動之後掛載。
在此範例 script 中,chkconfig 陳述式的值代表:
  • 345 代表 script 所會啟動於的 run level
  • 29 為啟動優先權,在此情況下代表 script 將會在 GFS2 init script 執行後,於開機時執行,並且啟動優先權為 26。
  • 73 為停止優先權,在此情況下代表 script 將會在關機時,在關閉優先權為 74 的 GFS2 script 之前關閉。
啟動和停用值代表您可藉由執行一項 service startservice stop 指令,以手動式地進行顯示的動作。比方說,若是 script 名為 fredwilma,您可執行 service fredwilma start
此 script 應被放置於 /etc/init.d 目錄中,並且權限與該目錄中的其它 script 相同。接著您便可執行一項 chkconfig on 指令以將 script 連接至顯示的 run level。比方說,若 script 名為 fredwilma,那麼您便可執行 chkconfig fredwilma on

#!/bin/bash
#
# chkconfig: 345 29 73
# description: mount/unmount my custom bind mounts onto a gfs2 subdirectory
#
#
### BEGIN INIT INFO
# Provides: 
### END INIT INFO

. /etc/init.d/functions
case "$1" in
  start)
	# In this example, fred and wilma want their home directories
	# bind-mounted over the gfs2 directory /mnt/gfs2a, which has
	# been mounted as /mnt/gfs2a
	mkdir -p /mnt/gfs2a/home/fred &> /dev/null
	mkdir -p /mnt/gfs2a/home/wilma &> /dev/null
	/bin/mount --bind /mnt/gfs2a/home/fred /home/fred
	/bin/mount --bind /mnt/gfs2a/home/wilma /home/wilma
        ;;

  stop)
	/bin/umount /mnt/gfs2a/home/fred
	/bin/umount /mnt/gfs2a/home/wilma
        ;;

  status)
        ;;

  restart)
        $0 stop
        $0 start
        ;;

  reload)
        $0 start
        ;;
  *)
        echo $"Usage: $0 {start|stop|restart|reload|status}"
        exit 1
esac

exit 0

4.14. GFS2 撤出功能

GFS2「撤出」(withdraw)功能是一項在叢集中的 GFS2 檔案系統資料整合功能。若 GFS2 kernel 模組在進行了一項 I/O 作業後,偵測到了 GFS2 檔案系統中有不一致的情況,叢集便無法使用該檔案系統。I/O 作業將會停下,並且系統會等待之後的 I/O 作業因錯誤而停下,以避免造成更多的損害。當此情況發生時,您可手動式停下任何其它服務或應用程式,在這之後,您便能重新開機並重新掛載 GFS2 檔案系統,以重新執行日誌。若問題並未解決,您可卸載叢集中所有節點的檔案系統,並透過 fsck.gfs2 指令執行檔案系統復原。GFS 撤出功能的問題與會造成另一節點隔離該節點的 kernel panic 相較之下,比較沒這麼嚴重。
若您的系統啟用了 gfs2 開機 script,並且 GFS2 檔案系統包含在 /etc/fstab 檔案中的話,當您重新開機時,GFS2 檔案系統將會被重新掛載。若基於檔案系統損毀而發生了 GFS2 檔案系統撤出,建議您在重新掛載檔案系統之前,執行 fsck.gfs2 指令。在此情況下,若要避免您的檔案系統在開機時重新掛載,您可執行下列程序:
  1. 透過下列指令暫時性地停用受影響之節點上的開機 script:
    # chkconfig gfs2 off
  2. 重新啟動受影響的節點,啟用叢集軟體。GFS2 檔案系統將不會被掛載。
  3. 將檔案系統由叢集中的所有節點上卸載。
  4. 由單一節點的檔案系統上執行 fsck.gfs2 可確保檔案系統未損毀。
  5. 藉由執行下列指令,以在受影響的節點上重新啟用開機 script:
    # chkconfig gfs2 on
  6. 將叢集中所有節點上的 GFS2 檔案系統重新掛載。
另一個會造成 GFS2 撤出的不一致範例,是不正確的區塊計算。當 GFS kernel 由檔案系統中刪除掉了某個檔案時,它會系統性地移除所有與該檔案相聯的資料和 metadata 區塊。當完成後,它便會檢查區塊計算。若是區塊計算非 1 的話(代表只剩下磁碟 inode 本身),這表示檔案系統不一致,因為區塊計算與找到的區塊清單不符。
您可藉由指定 -o errors=panic 選項掛載檔案系統,以置換 GFS2 撤出功能。當指定了此選項時,任何原本會造成系統撤出的錯誤皆會使系統進入 panic 狀態。這將會停止節點的叢集通訊,並使節點被隔離。
就內部來說,GFS2 會透過 kernel 發送訊息到 gfs_controld daemon 要求撤出。gfs_controld daemon 會執行 dmsetup 程式,將 device mapper 目標的錯誤放到檔案系統下方,以避免更進一步存取區塊裝置。然後它會告訴 kernel 這項動作已經完成。這是支援 GFS2 需求的原因,好在 GFS2 下使用 CLVM 裝置;否則的話,就不可能插入 device mapper 目標。
device mapper 錯誤目標的緣由,是要確保接下來的所有 I/O 運作都會導致 I/O 錯誤,讓檔案系統按照順序卸載。因此,發生撤出事件時,您會看到系統日誌中,從 device mapper 裝置傳來的多個錯誤訊息,這是正常現象。
偶爾 dmsetup 程式無法插入錯誤目標,而導致無法撤出的現象。如果撤出時記憶體不足,同時因為撤出事件發生在前而無法回收記憶體,那麼就會發生這個問題。
發生撤出事件並不一定表示 GFS2 發生錯誤。有時候撤出功能可以透過底層區塊裝置的 I/O 錯誤而啟動。我們強烈建議您檢查日誌,看看是否發生這種情況。

章 5. 診斷 GFS2 檔案系統、修正問題

本章描述了 GFS2 的常見問題以及解決方法。

5.1. GFS2 檔案系統效能不彰

您可能會發現 GFS2 檔案系統的效能低於 ext3 檔案系統。GFS2 的效能會受到多種因素與使用情境的影響。本章將會闡述 GFS2 效能問題及解決方法。

5.2. GFS 檔案系統當機,需要重新啟動一台節點

如果 GFS2 檔案系統當掉,也不回應所有指令,但將某台特定的節點重新開機就可以讓系統恢復正常,這意味著鎖定方面出了問題、或是有 bug。在這情況下,請蒐集以下資料:
  • 每個節點上的 GFS2 鎖定傾印檔:
    cat /sys/kernel/debug/gfs2/fsname/glocks >glocks.fsname.nodename
  • 每個節點上,檔案系統的 DLM 鎖定傾印檔。您可以透過 dlm_tool 指令來蒐集此資訊:
    dlm_tool lockdebug -sv lsname.
    在這指令中,lsname 是 DLM 所使用,出問題的檔案系統之鎖定區域名稱。您可以從 group_tool 指令找到這個值。
  • sysrq -t 指令的輸出資料。
  • /var/log/messages 檔案內容。
蒐集了這些資料後,請將這些資料提交給 Red Hat 的技術服務人員。

5.3. GFS 檔案系統當機,需要重新啟動所有節點

如果 GFS2 檔案系統當掉,也不回應所有指令,且需要將所有叢集中的節點重新開機才可以讓系統恢復正常,請檢查以下問題。
  • 隔離功能可能失效。在這情況下,GFS2 檔案系統會停止回應,以確保資料的完整性。請檢查訊息日誌,看看停止回應時,隔離功能是否失效。請確定隔離功能是否配置正確。
  • GFS2 檔案系統可能已經撤出(withdraw)。請檢查訊息日誌,尋找關鍵字「withdraw」,藉此追溯 GFS2 的檔案系統問題。「撤出」表示系統毀損、儲存空間出現問題、或是 bug。請掛載檔案系統,更新 gfs-utils 套件,然後在檔案系統上執行 fsck 指令,讓它回到正常狀態。請聯絡 Red Hat 技術服務人員,告訴他們您遇到 GFS2 的「撤出」問題,並提供 sosreports 紀錄。
    欲知 GFS2 撤出功能的詳細資訊,請參閱〈節 4.14, “GFS2 撤出功能”〉。
  • 這個錯誤可能表示鎖定問題,或是 bug。請在上述情形下蒐集資訊,然後與 Red Hat 技術服務人員聯絡,詳情請見〈節 5.2, “GFS 檔案系統當機,需要重新啟動一台節點”〉。

5.4. 新增的叢集節點無法掛載 GFS2 檔案系統

如果您在叢集中新增了節點,但這節點無法掛載 GFS2 檔案系統,這可能是因為 GFS2 檔案系統上的日誌數量小於試圖存取 GFS2 檔案系統的節點數目。每台用來掛載檔案系統的 GFS2 節點都應該要有一份日誌(除非您使用了 GFS2 檔案系統 spectator 掛載選項,因為這不需要日誌功能)。您可以使用 gfs2_jadd 指令將日誌新增到 GFS2 檔案系統,如〈節 4.7, “新增日誌至檔案系統”〉所述。

5.5. 空白的檔案系統空間標示為已使用

如果您的 GFS2 檔案系統是空白的,但 df 指令卻顯示這空間已經被佔用。這是因為 GFS2 檔案系統日誌會佔據空間(日誌數乘以日誌大小)。如果您建立了 GFS2 檔案系統,使用了大量日誌檔或日誌大小較大,那麼執行 df 指令時,就會看到這空間大小(日誌數乘以日誌大小)已經被佔用。即使您沒有指定這兩個數目,使用了 GFS2 的預設日誌大小,小型的 GFS2 檔案系統(小於 1GB)會顯示大筆空間已經被佔用。

章 6. 配置 Pacemaker 叢集中的 GFS2 檔案系統

此章節簡述了設定 Pacemaker 叢集(其中包括 GFS2 檔案系統)的所需步驟。
安裝叢集軟體與 GFS2,且在每台節點上安裝叢集化的 LVM 套件後,請在每台節點上啟動 cmanclvmd、以及 pacemaker 服務,並建立 Pacemaker 叢集。您必須為叢集配置隔離(fence)功能。欲知配置 Pacemaker 叢集的資訊,請參閱《配置 Red Hat High Availability 外掛程式與 Pacemaker》。
  1. 設定全域 Pacemaker 參數 no_quorum_policyfreeze(凍結)。

    注意

    預設上,no-quorum-policy 的值是 stop(停止),表示一組「仲裁」(quorum)已經遺失,剩下分割區的所有資源都會立即停止。通常這項預設值是最安全、最佳化的選項;但跟大部分資源不同,GFS2 需要仲裁功能方可運作。若仲裁遺失,那麼使用 GFS2 的應用程式與 GFS2 的掛載目錄本身都無法正常停止。試圖停止沒有仲裁的任何嘗試都會失敗,最後會造成每次仲裁遺失時,整個叢集被隔離。
    要解決這問題,您可以在 GFS2 運行時,設定 no-quorum-policy=freeze。這表示仲裁遺失時,在重新獲得仲裁之前,剩下的分割區不會採取任何行動。
    # pcs property set no-quorum-policy=freeze
  2. 請在確定 /etc/lvm/lvm.conf 檔案中的鎖定類型設為 3 以支援叢集鎖定之後,建立叢集化的 LV 並將卷冊格式化為 GFS2 檔案系統。請確認叢集上的每個節點都已建立了足夠的日誌。
    # pvcreate /dev/vdb
    # vgcreate -Ay -cy cluster_vg /dev/vdb
    # lvcreate -L5G -n cluster_lv cluster_vg
    # mkfs.gfs2 -j2 -p lock_dlm -t rhel7-demo:gfs2-demo /dev/cluster_vg/cluster_lv
  3. 配置 clusterfs 資源。
    請勿將檔案系統加入 /etc/fstab 檔案,因為這會被視為 Pacemaker 的叢集資源來加以管理。掛載點可以透過 options=options 選項被指定為資源配置一部份。請執行 pcs resource describe Filesystem 指令以獲得完整的配置選項。
    這個建立叢集資源的指令指定了 noatime 掛載選項。
    # pcs resource create clusterfs Filesystem device="/dev/cluster_vg/cluster_lv" directory="/var/mountpoint" fstype="gfs2" "options=noatime" op monitor interval=10s on-fail=fence clone interleave=true
  4. 驗證 GFS2 一如預期地被掛載。
    # mount |grep /mnt/gfs2-demo
    /dev/mapper/cluster_vg-cluster_lv on /mnt/gfs2-demo type gfs2 (rw,noatime,seclabel)
  5. (選用)重新啟動所有叢集節點,以確認 GFS2 的一致性與復原功能。

附錄 A. 使用 gfs2_quota 指令管理 GFS2 磁碟配額

在 Red Hat Enterprise Linux(簡稱 RHEL)6.1 發行時,GFS2 支援標準的 Linux 磁碟配額機制。為了要使用此機制,請安裝 quota RPM 套件。這是管理 GFS2 磁碟配額的建議方式,請用於所有使用配額功能的 GFS2 建置環境。欲知更多使用標準 Linux 配額機制的資訊,請參閱〈節 4.5, “GFS2 配額管理”〉。
對於更早期的 RHEL 版本,GFS2 需要 gfs2_quota 指令來管理配額。本附錄記述了 gfs2_quota 指令管理 GFS2 檔案系統配額的使用方式。

A.1. 使用 gfs2_quota 指令設定磁碟配額

有兩種配額設定可用在每個使用者 ID(UID)或群組 ID(GID)上:「硬性限制」(hard limit)與「軟性限制」(soft limit)。
硬性限制是可以使用的空間。檔案系統不會讓使用者或群組中的使用超過這個限制。將硬性限制設為「zero」,表示沒有限制。
軟性限制通常是小於硬性限制的值。如果使用者或群組的磁碟使用量高過軟性限制,檔案系統將會通知並警告使用者或群組。軟性限制的值如果設為「zero」,表示沒有限制。
您可以使用 gfs2_quota 指令來設定限制。您只要在 GFS2 所掛載的單一節點上執行這個指令即可。
預設上,GFS2 檔案系統不會設定強制配額。要啟用配額帳目模式(quota accounting),請在掛載 GFS2 檔案系統時,使用 mount 指令的 quota= 選項,詳情請見〈節 A.4, “啟用 / 停用配額強制功能”〉。

A.1.1. 用法

設定磁碟配額,硬性限制
gfs2_quota limit -u User -l Size -f MountPoint
gfs2_quota limit -g Group -l Size -f MountPoint
設定磁碟配額,警告限制
gfs2_quota warn -u User -l Size -f MountPoint
gfs2_quota warn -g Group -l Size -f MountPoint
User(使用者)
要限制或警告的使用者 ID。這可以是從密碼檔而來的使用者名稱,或是 UID 號碼。
Group(群組)
要限制或警告群組 ID。這可以是從群組檔案而來的群組名稱,或是 GID 號碼。
Size(大小)
請指定用以限制或警告的值。預設上,這個值的單位是百萬位元組(MB)。使用 -k-s、與 -b 選項可以分別將單位改變為千位元組(kitobyte)、磁區數(sector)、以及檔案系統的區塊數(block)。
MountPoint(掛載點)
指定要對哪個 GFS2 檔案系統執行動作。

A.1.2. 範例

本範例設定使用者 Bert/mygfs2 檔案系統上的硬性限制為 1,024 MB(1 GB)。
# gfs2_quota limit -u Bert -l 1024 -f /mygfs2
本範例設定 ID 為 21 的群組在檔案系統 /mygfs2 上的軟性限制為 50 KB。
# gfs2_quota warn -g 21 -l 50 -k -f /mygfs2

A.2. 使用 gfs2_quota 指令,顯示配額限制與使用量

您可以使用 gfs2_quota get 指令,得知特定使用者或群組的配額限制與目前使用量。配額檔案的全部內容也可以透過 gfs2_quota list 指令來顯示,其中包括所有 ID、非零值的硬性限制與軟性限制及其值。

A.2.1. 用法

顯示使用者的配額限制
gfs2_quota get -u User -f MountPoint
顯示群組的配額限制
gfs2_quota get -g Group -f MountPoint
顯示整個配額檔案
gfs2_quota list -f MountPoint
User(使用者)
欲顯示之資訊的使用者 ID。這可以是來自密碼檔的使用者名稱,或是 UID 號碼。
Group(群組)
欲顯示之資訊的群組 ID。這可以是來自群組檔案的群組名稱,或是 GID 號碼。
MountPoint(掛載點)
指定要對哪個 GFS2 檔案系統執行動作。

A.2.2. 指令輸出

gfs2_quota 指令所顯示的 GFS2 配額資訊顯示如下:
user User: limit:LimitSize warn:WarnSize value:Value

group Group: limit:LimitSize warn:WarnSize value:Value
預設上,LimitSizeWarnSize、以及 Value 的數值是以百萬位元組(MB)為單位。加上 -k-s、或 -b 旗標能將單位改為千位元組(KB)、磁區數(sector)、或檔案系統的區塊數(block)。
User(使用者)
與資料相關連的使用者名稱或 ID。
Group(群組)
與資料相關連的群組名稱或 ID。
LimitSize(限制大小)
使用者或群組的硬性限制。如果不設定任何限制,請將值設為零。
Value(值)
使用者或群組所使用的實際磁碟空間數量。

A.2.3. 註解

如果在執行 gfs2_quota 指令時一併使用了 -n 選項,那麼顯示配額資訊時,就不會將 UID 與 GID 解析為實際名稱。
分配給 GFS2 隱藏檔案的空間(root UID 與 GID)可以忽略不顯示,方法是加入 -d 選項。這在試著用 gfs2_quotadu 指令對應數字時,非常有用。

A.2.4. 範例

本範例顯示 /mygfs2 檔案系統上,所有設定了限制、或佔用了任何磁碟空間的使用者與群組。
# gfs2_quota list -f /mygfs2
這範例顯示了 /mygfs2 檔案系統上,群組 users 的磁區配額資訊。
# gfs2_quota get -g users -f /mygfs2 -s

A.3. 使用 gfs2_quota 指令同步磁碟配額

GFS2 會將所有配額資訊儲存在其內部磁碟檔案中。GFS2 節點並不會在每次檔案寫入時更新配額檔;預設上是每 60 秒更新一次配額檔。這可以避免多個節點爭相寫入配額檔,造成效能降低。
當用戶或群組接近配額限制時,GFS2 便會動態減少它配置檔案更新之間的時間,以避免超過限制。配額同步化之間的正常時間是個可調整的參數 quota_quantum,並且可透過使用 gfs2_tool 指令來進行更改。如 表格 4.2, “GFS2 專屬的掛載選項” 中所述,您可透過 quota_quantum= 掛載選項,來修改預設值的 60 秒。每當掛載檔案系統時,各節點上皆必須設置 quota_quantum 參數。對於 quota_quantum 參數所進行的變更,無法再卸載後保持有效。您可透過 mount -o remount 來更新 quota_quantum 的值。
您可以使用 gfs2_quota sync 指令,在每次 GFS2 自動更新之間,從節點將配額資訊存到硬碟上的配額檔案。

A.3.1. 用法

同步配額資訊
gfs2_quota sync -f MountPoint
MountPoint(掛載點)
指定要對哪個 GFS2 檔案系統執行動作。
在同步之間調整時間
mount -o quota_quantum=secs,remount BlockDevice MountPoint
MountPoint(掛載點)
指定要對哪個 GFS2 檔案系統執行動作。
secs(秒數)
指定 GFS2 同步配額檔案的一般時間間隔。這個值愈小,寫入頻率就愈高,效能也愈慢。

A.3.2. 範例

這範例會從執行的節點上,同步配額資訊到 /mygfs2 檔案系統上。
# gfs2_quota sync -f /mygfs2
在此範例中,要將 /mnt/mygfs2 檔案系統重新掛載於 /dev/volgroup/logical_volume 邏輯卷冊上時,正常配額檔案更新之間的預設時間間隔,已更改為一小時(3,600 秒)。
# mount -o quota_quantum=3600,remount /dev/volgroup/logical_volume /mnt/mygfs2

A.4. 啟用 / 停用配額強制功能

在 GFS2 檔案系統上,預設上是會停用配額強制功能的。要啟用檔案系統的配額強制功能,請以 quota=on 選項掛載檔案系統。

A.4.1. 用法

mount -o quota=on BlockDevice MountPoint
要以停用配額強制功能的方式來掛載檔案系統,請加上 quota=off 選項。這是預設值。
mount -o quota=off BlockDevice MountPoint
-o quota={on|off}
在掛載檔案系統時,指定配額強制功能啟用與否。
BlockDevice(區塊裝置)
指定 GFS2 檔案系統所在的區塊裝置。
MountPoint(掛載點)
指定 GFS2 應掛載的目錄。

A.4.2. 範例

在這範例中,位於 /dev/vg01/lvol0 的 GFS2 檔案系統會以啟用配額強制功能的方式,掛載於 /mygfs2 目錄上。
# mount -o quota=on /dev/vg01/lvol0 /mygfs2

A.5. 啟用配額計算功能

您可以在不強制使用限制與警告值的情形下,追蹤每個使用者與群組的配額磁碟使用量。方法是以 quota=account 選項掛載檔案系統。

A.5.1. 用法

mount -o quota=account BlockDevice MountPoint
-o quota=account
即使不強制使用配額限制,指定檔案系統所要維護的使用者與群組之使用量統計資料。
BlockDevice(區塊裝置)
指定 GFS2 檔案系統所在的區塊裝置。
MountPoint(掛載點)
指定 GFS2 應掛載的目錄。

A.5.2. 範例

在這範例中,/dev/vg01/lvol0 上的 GFS2 檔案系統會在啟用配額計算功能的情形下,掛載於 /mygfs2 目錄上。
# mount -o quota=account /dev/vg01/lvol0 /mygfs2

附錄 B. 將 GFS 檔案系統轉換為 GFS2

因為 Red Hat Enterprise Linux 6 發行版不支援 GFS 檔案系統,因此您必須透過 gfs2_convert 指令,來將任何既有的 GFS 檔案系統升級為 GFS2 檔案系統。請注意,在一部 Red Hat Enterprise Linux 5 系統上,您必須在升級為 Red Hat Enterprise Linux 6 之前,執行這項轉換程序。

警告

在轉換 GFS 檔案系統之前,您必須先備份檔案系統,有鑑於轉換程序無法回復,任何在進行轉換程序時發生的錯誤皆可能會造成程式終止,並造成檔案系統無法使用。
在轉換 GFS 檔案系統之前,您必須使用 gfs_fsck 指令來檢查檔案系統並修正任何錯誤。
若由 GFS 轉換為 GFS2 時受到了電源失效或任何其它問題所造成的干擾,請重新啟動轉換工具。在轉換程序完成之前,請勿在檔案系統上執行 fsck.gfs2 指令。
當轉換已滿或快滿的檔案系統時,可能會發生空間不足以容納所有 GFS2 檔案系統資料結構的問題。在此情況下,所有日誌的大小皆會一致均勻地縮減,以容納所有資料結構於可用空間內。

B.1. 本文相依的路徑名稱之轉換

GFS2 檔案系統並不提供與本文相依(context-dependent)的路徑名稱(CDPN),這讓您可以建立符號連結,指向不同的檔案或目錄。要在 GFS2 中使用 CDPN 相同的功能,您可以使用 mount 指令的 bind 選項。
gfs2_convert 指令會辨識 CDPN 並將其取代為同樣名稱的空目錄。然而,為了要配置 bind 的掛載點以取代 CDPN,您需要知道欲取代的 CDPN 連接目標的完整路徑。在轉換檔案系統之前,您可以使用 find 指令來找出這些連結。
以下指令會列出連往 hostname CDPN 的符號連結:
[root@smoke-01 gfs]# find /mnt/gfs -lname @hostname
/mnt/gfs/log
同樣的,您也可以對其它 CDPN 執行 find 指令(machossysuidgidjid)。請注意因為 CDPN 名稱可以是 @hostname{hostname},您需要對這兩者各執行 find 指令。
欲取得更多有關於 GFS2 掛載與文本相依路徑名稱的資訊,請參閱〈節 4.12, “Bind 掛載與本文相依的路徑名稱”〉。

B.2. GFS 至 GFS2 的轉換程序

請使用下列程序來將 GFS 檔案系統轉換為 GFS2 檔案系統。
  1. 在 Red Hat Enterprise Linux 系統上,備份您既有的 GFS 檔案系統。
  2. 卸載叢集中所有節點的 GFS 檔案系統。
  3. 在 GFS 檔案系統上執行 gfs_fsck 指令,確保檔案系統沒有損毀。
  4. 執行 gfs2_convert gfsfilesystem。將 gfsfilesystem 轉換為 GFS2 之前,系統會顯示警告與確認提示。
  5. 升級至 Red Hat Enterprise Linux 6。
以下範例會將區塊裝置 /dev/shell_vg/500g 上的 GFS 檔案系統轉換為 GFS2 檔案系統。
[root@shell-01 ~]#  /root/cluster/gfs2/convert/gfs2_convert /dev/shell_vg/500g 
gfs2_convert version 2 (built May 10 2010 10:05:40)
Copyright (C) Red Hat, Inc.  2004-2006  All rights reserved.

Examining file system..................
This program will convert a gfs1 filesystem to a gfs2 filesystem.
WARNING: This can't be undone.  It is strongly advised that you:

   1. Back up your entire filesystem first.
   2. Run gfs_fsck first to ensure filesystem integrity.
   3. Make sure the filesystem is NOT mounted from any node.
   4. Make sure you have the latest software versions.
Convert /dev/shell_vg/500g from GFS1 to GFS2? (y/n)y
Converting resource groups...................
Converting inodes.
24208 inodes from 1862 rgs converted.
Fixing file and directory information.
18 cdpn symlinks moved to empty directories.
Converting journals.
Converting journal space to rg space.
Writing journal #1...done.
Writing journal #2...done.
Writing journal #3...done.
Writing journal #4...done.
Building GFS2 file system structures.
Removing obsolete GFS1 file system structures.
Committing changes to disk.
/dev/shell_vg/500g: filesystem converted successfully to gfs2.

附錄 C. GFS2 tracepoint 和 debugfs glock 檔案

本附錄詳述了 glock debugfs 介面與 GFS2 tracepoint(追溯點)。此乃為了熟悉檔案系統內部,以及希望學習更多有關於 GFS2 設計上、以及如何針對 GFS2 專屬問題除錯的進階使用者而設計。

C.1. GFS2 tracepoint 類型

目前 GFS2 tracepoint 的類型有三種:glock(念作「gee-lock」)tracepoint、bmap tracepoint 以及 log tracepoint。它們可被使用來監控執行中的 GFS2 檔案系統,並提供額外的資訊,這些資訊亦可透過先前的 RHEL 發行版中所支援的除錯選項來取得。tracepoint 對於當機或是效能影響上的問題,能被重新產生時特別有幫助,如此一來便能在進行有問題的作業時,取得 tracepoint 的輸出。在 GFS2 中,glocks 為主要的快取控制機制,並且它們為理解 GFS2 核心效能的關鍵。bmap(block map,區塊對應)tracepoint 可使用來監控區塊分配以及區塊對映(在磁碟上的 metadata 結構樹上查詢已分配的區塊),並查看是否有任何有關於區域存取的問題。log tracepoint 則會追蹤被寫入日誌及釋出的資料,並可提供有關於 GFS2 該部分的有用資訊。
tracepoint 盡可能的採用了通用的設計。這代表使用 RHEL 6 的期間無需更改 API。另一方面,此介面的使用者應注意,此乃除錯介面,而不屬於一般正常 RHEL 6 API 集的一部分,因此 Red Hat 無法保證不會更改 GFS2 tracepoint 介面。
tracepoints 乃 RHEL 6 的一般功能,並且它們的範圍超出了 GFS2。它們專門被使用來實作 blktrace 架構,並且 blktrace tracepoint 可與 GFS2 的架構合併使用,以取得更加詳細的系統效能。根據 tracepoint 進行作業的層級,它們可在短時間內產生大量的資料。它們被設計為當啟用時,將在系統上造成最小量的負載,然而它們無可避免地也會造成某些影響。透過各種方式來篩選事件可協助減少資料量,並協助專注於僅取得對於理解情況有幫助的資訊。

C.2. tracepoints

這些 tracepoint 位於 /sys/kernel/debug/tracing/ 目錄下(假設 debugfs 已掛載於 /sys/kernel/debug 目錄這個標準位置上)。events 子目錄包含了所有可指定的 tracing(追溯)事件,並且假設 gfs2 模組已載入,將會有個包含了更多子目錄的 gfs2 子目錄(一項 GFS2 事件一個子目錄)。/sys/kernel/debug/tracing/events/gfs2 目錄的內容應與以下內容相似:
[root@chywoon gfs2]# ls
enable            gfs2_bmap       gfs2_glock_queue         gfs2_log_flush
filter            gfs2_demote_rq  gfs2_glock_state_change  gfs2_pin
gfs2_block_alloc  gfs2_glock_put  gfs2_log_blocks          gfs2_promote
若要啟用所有 GFS2 tracepoint,請執行下列指令:
[root@chywoon gfs2]# echo -n 1 >/sys/kernel/debug/tracing/events/gfs2/enable
若要啟用特定 tracepoint,每個個別的事件子目錄中,皆有個 enable 檔案以及 filter 檔案,此檔案可被使用來為各項事件或一組事件設置事件篩選器。個別事件的意義,將在以下部分中詳細解說。
tracepoint 的輸出格式能是 ASCII 或 binary 格式。本附錄目前並不涵蓋 binary 介面。使用 ASCII 介面的方式有兩種。若要列出 ring buffer 目前的內容,您可執行下列指令:
[root@chywoon gfs2]# cat /sys/kernel/debug/tracing/trace
此介面對於長時間執行的程序,以及在某些事件完成後,希望查看 buffer 中所擷取的最新資訊來說相當有幫助。此外,當需要所有的輸出時,您可使用另一個 /sys/kernel/debug/tracing/trace_pipe 介面。當事件發生時,將由此檔案中讀取;您無法透過此介面取得紀錄資訊。這兩個介面的輸出格式乃相同的,並且在此附錄之後的部分中,將會詳述各項 GFS2 事件。
有項可使用來讀取 tracepoint 資料的 trace-cmd 工具程式,欲取得更多有關於此工具程式上的相關資訊,請參閱〈節 C.10, “參照”〉中的連結。trace-cmd 工具程式的使用方法與 strace 工具程式相似,比方說在由各種來源蒐集 trace 資料的同時,執行一項指令。

C.3. Glocks

欲理解 GFS2,您所需理解的最重要概念,以及能將它與其它檔案系統區分的最重要概念為「glock」。以原始碼來講,glock 乃一個會將 DLM 與快取整合入單狀態機器的結構。各個 glock 皆擁有與單獨 DLM 鎖定的一對一關係,並且為該鎖定狀態提供了快取,如此一來由檔案系統之單獨節點所進行的重複作業,將無需重複調用 DLM,並能協助避免不必要的網路流量。廣義的 glock 分為兩種(快取 metadata 與不快取 metadata)。inode glock 與 resource group glock 皆會快取 metadata,其它類型的 glock 則不會快取 metadata。除了 metadata 之外,inode glock 亦會快取資料,並且其邏輯在所有 glock 中乃最複雜的。

表格 C.1. Glock 模式與 DLM 鎖定模式

Glock 模式DLM 鎖定模式附註
UNIV/NL未鎖定(根據 I flag,沒有與 glock 或是 NL 鎖定相聯的 DLM 鎖定)
SHPRShared(保護讀取)鎖定
EXEXExclusive lock(互斥鎖)
DFCW延遲(同時寫入)使用於 Direct I/O 和檔案系統凍結
Glocks 會保留在記憶體中,直到它們被釋出(透過另一節點或 VM 的請求),並且無本機使用者。在此情況下,它們將由 glock 雜湊表格中移除並釋出。當建立了 glock 時,DLM 鎖定不會即刻與 glock 相聯。在向 DLM 發出第一項請求時,DLM 鎖定將會與 glock 相聯,並且若此請求成功的話,則「I」(initial)旗標將會設置在 glock 上。表格 C.4, “Glock 旗標” 詳述了不同 glock 旗標的意義。當 DLM 與 glock 相聯之後,DLM 鎖定將總是會至少保留在 NL(Null)鎖定模式中,直到 glock 需要被釋出。在 glock 的生命週期中,DLM 鎖定由 NL 降階為 unlocked 的這項作業,將會是最後的作業。

注意

DLM 鎖定的特別特性(有時會將連至 glocks 的 DLM 鎖定完全解鎖),自 RHEL 5 起已經過修改,RHEL 5 中使用了不同的機制,以確保 LVB(lock value block)會視需求預留。RHEL 6 所使用的規格,乃透過將 lock_dlm 鎖定模組 module(而非 DLM 本身)併入 GFS2 所達成。
各個 glock 皆可擁有數個與其相聯的「holder」,各個 holder 皆代表一個來自於較高階層的鎖定請求。與 GFS2 相關的系統調用,會為 glock 的 holder 排程和取消排程,以保護程式碼的重要部分。
glock 狀態機器乃基於工作佇列。基於效能上的原因,建議使用 tasklet;然而在目前的實作中,我們需要提交 I/O,而這將會造成它們無法使用。

注意

工作排程擁有自己的 tracepoint,並能視需求與 GFS2 的 tracepoint 合併使用。
表格 C.2, “Glock 模式與資料類型” 顯示了各 glock 模式下所能快取的狀態為何,以及該快取的狀態是否為「dirty」(已變更)。Inode 與資源群組鎖定亦是如此,儘管資源群組鎖定沒有資料元件,只有 metadata。

表格 C.2. Glock 模式與資料類型

Glock 模式快取資料快取 metadataDirty 資料Dirty Metadata
UN
SH
DF
EX

C.4. glock debugfs 介面

glock debugfs 介面顯示了 glock 與 holder 的內部狀態,並且它亦包含了一些在某些情況下被鎖定的物件之概要資訊。篩選器的各行皆以 G: 為起始,並無縮排(代表 glock 本身),或以不同字母以及一個空格縮排作為起始,代表與在檔案中,其正上方之 glock 相聯的結構(H: 代表 holder、I: 代表 inode,R: 則代表資源群組)。以下為此檔案的範例內容:
G:  s:SH n:5/75320 f:I t:SH d:EX/0 a:0 r:3
 H: s:SH f:EH e:0 p:4466 [postmark] gfs2_inode_lookup+0x14e/0x260 [gfs2]
G:  s:EX n:3/258028 f:yI t:EX d:EX/0 a:3 r:4
 H: s:EX f:tH e:0 p:4466 [postmark] gfs2_inplace_reserve_i+0x177/0x780 [gfs2]
 R: n:258028 f:05 b:22256/22256 i:16800
G:  s:EX n:2/219916 f:yfI t:EX d:EX/0 a:0 r:3
 I: n:75661/219916 t:8 f:0x10 d:0x00000000 s:7522/7522
G:  s:SH n:5/127205 f:I t:SH d:EX/0 a:0 r:3
 H: s:SH f:EH e:0 p:4466 [postmark] gfs2_inode_lookup+0x14e/0x260 [gfs2]
G:  s:EX n:2/50382 f:yfI t:EX d:EX/0 a:0 r:2
G:  s:SH n:5/302519 f:I t:SH d:EX/0 a:0 r:3
 H: s:SH f:EH e:0 p:4466 [postmark] gfs2_inode_lookup+0x14e/0x260 [gfs2]
G:  s:SH n:5/313874 f:I t:SH d:EX/0 a:0 r:3
 H: s:SH f:EH e:0 p:4466 [postmark] gfs2_inode_lookup+0x14e/0x260 [gfs2]
G:  s:SH n:5/271916 f:I t:SH d:EX/0 a:0 r:3
 H: s:SH f:EH e:0 p:4466 [postmark] gfs2_inode_lookup+0x14e/0x260 [gfs2]
G:  s:SH n:5/312732 f:I t:SH d:EX/0 a:0 r:3
 H: s:SH f:EH e:0 p:4466 [postmark] gfs2_inode_lookup+0x14e/0x260 [gfs2]
以上範例乃在一個單獨節點的 GFS2 檔案系統上執行 postmark benchmark 時,透過 cat /sys/kernel/debug/gfs2/unity:myfs/glocks >my.lock 指令而產生的部分內容。選用了圖形中的 glock,乃為了顯示某些較有意義的 glock 傾印功能。
glock 的狀態會是 EX(exclusive)、DF(deferred)、SH(shared)或是 UN(unlocked)。除了 UN 之外,這些狀態直接與 DLM 鎖定模式相應,UN 可能代表 DLM null 鎖定模式或是 GFS2 並未持有 DLM 鎖定(取決於以上詳述的 I 旗標)。glock 的 s: 欄位表示鎖定的目前狀態,而 holder 中的相同欄位則代表請求的模式。若授與了鎖定,holder 的旗標(f: 欄位)中將會被設置 H 位元。否則,它將會被設置 W wait 位元。
n: 欄位(number)代表與各項項目相聯的編號。對於 glock 來說,此乃 glock 編號後的類型編號,因此在以上範例中,第一個 glock 乃 n:5/75320;這代表與 inode 75320 相關的 iopen glock。以 inode 和 iopen glock 來說,glock 編號總是會與 inode 的磁碟區塊號碼相同。

注意

debugfs glock 檔案中的 glock 編號(n: 欄位)乃十六進位,而 tracepoint 輸出則會將它們以小數點列出。這其實是可追溯的,因為 glock 編號原本總是以十六進位來寫出,然而對於 tracepoint 則使用了小數點,以便輕易地與其它 tracepoint 輸出(比方說來自於 blktrace 的輸出)進行比較,以及和來自於 stat(1) 的輸出進行比較。
holder 與 glock 的完整旗標清單設置於 表格 C.4, “Glock 旗標”表格 C.5, “Glock holder 旗標” 中。鎖定值區塊的內容目前無法透過 glock debugfs 介面取得。
表格 C.3, “Glock 類型” 顯示了不同 glock 類型的意義。

表格 C.3. Glock 類型

類型編號鎖定類型使用
1trans交易鎖定
2inodeInode metadata 與資料
3rgrp資源群組 metadata
4metasuperblock
5iopenInode 最後偵測
6flockflock(2) syscall
8quota配額作業
9journal日誌 mutex
glock 最重要的旗標之一為 l(locked)旗標。此乃在進行狀態變更時,使用來針對於 glock 狀態存取進行調停的 bit lock。當狀態機器準備要透過 DLM 傳送遠端鎖定請求時,它便會被設置,並且僅會在作業全部進行完成後才會被清除掉。這有時亦代表將會傳送超過一項鎖定請求,而發生各種無效化的情況。
表格 C.4, “Glock 旗標” 顯示了不同 glock 旗標的意義。

表格 C.4. Glock 旗標

旗標名稱意義
d尚未解決的降階(Pending demote)延後的(遠端)降階請求
D降階(demote)降階請求(本機或遠端)
f日誌清除(Log flush)釋放此 glock 前,必須先提交日誌
F凍結(Frozen)來自於遠端節點的回應已被忽略 - 正在進行復原。
i正在無效化(Invalidate in progress)正在無效化此 glock 下的分頁
I初始(Initial)當 DLM 鎖定與此 glock 相聯時,進行設置
l已鎖定(Locked)glock 正在改變狀態
LLRUglock 在 LRU 清單上時,進行設置
o物件glock 與物件相關連時,進行設置(亦即 inode 為類型 2 的 glock;資源群組為類型 3 的 glock)
p正在降階(Demote in progress)glock 正在回應一項降階請求
q已排程holder 已經排程至 glock 進行設置,並在取得 glock、但沒有更多 holder 時清除。用於計算 glock 的最短 hold 時間的演算法則中。
r正在處理回應(Reply pending)來自於遠端節點的回應正等待處理
yDirty(已修改)釋放此 glock 前,資料必須 flush 至磁碟
當由一個節點收到遠端 callback,並且該節點希望取得與本機節點上持有之鎖定模式產生衝突的鎖定模式時,D(demote)和 d(demote pending)這兩個旗標之一將會被設置。當特定鎖定上發生競用情況時,為了避免發生資源不足的問題,各個鎖定皆會被分配一段最短的 hold 時間。持有鎖定的時間尚未超過這段最短時間的節點,可繼續保有該鎖定,直到超過時間間隔。
若超過時間間隔,那麼 D(demote)旗標便會被設置,並且所需的狀態將會被紀錄下來。在此情況下,若下次 holder 的排程中無授與的鎖定時,鎖定便會降階。若尚未超過時間間隔,則 d(demote pending)旗標將會被設置。這同時亦會在最短 hold 時間超過時,使狀態機器進行清除 d(demote pending)的排程,並設置 D(demote)。
當 glock 被分配了 DLM 鎖定時,I(initial)旗標將會被設置。這會在 glock 第一次被使用時發生,並且 I 旗標將會保留設置,直到 glock 最後被釋出(並且 DLM 鎖定已解鎖)。

C.5. Glock Holder

表格 C.5, “Glock holder 旗標” 顯示了不同 glock holder 旗標的意義。

表格 C.5. Glock holder 旗標

旗標名稱意義
aAsync(非同步)不等待 glock 結果(之後會輪詢結果)
AAny(任何)接受任何相容的鎖定模式
cNo cache(不快取)當釋放之後,即刻降階 DLM 鎖定
eNo expire(不過期)忽略之後的鎖定取消請求
EExact(完全符合)鎖定模式必須完全符合
FFirst(第一)當 holder 乃第一個被授與此 glock 的情形下進行設置
HHolder顯示請求的鎖定已授與
pPriority(優先權)將 holder 加入佇列的開頭
tTry(嘗試)「try」鎖定
TTry 1CB傳送 callback 的「try」鎖定
WWait(等待)等待請求完成時設置
如同先前所提及的,最重要的 holder 旗標乃 H(holder)與 W(wait)旗標,因為它們乃相應地設置於授與的請求以及排程的請求上。清單中的 holder 順序非常重要。若有任何授與的 holder,它們總是會位於佇列的最前方,之後則為其它排程的 holder。
若無授與的 holder,那麼清單中的第一個 holder 將會是啟動下個狀態變更的 holder。因為降階請求的優先權總會比來自於檔案系統的請求高,因此不一定總是會直接成為請求的狀態。
Glock 子系統支援兩種類型的「try」鎖定。這兩種類型皆相當有幫助,因為它們能改變鎖定的正常順序(以適當的 back-off 和 retry),並且它們可被使用來協助避免資源被其它節點使用。正常的 t(try)lock 基本上名副其實;它是個不會進行任何特殊動作的「嘗試」鎖定。另外,T(try 1CB)鎖定與 t 鎖定相似,除了 DLM 會傳送單一 callback 至目前不相容的 lock holder 上。T(try 1CB)鎖定的其中一項使用方法即與 iopen 鎖定搭配使用(用來在 inode 的 i_nlink 計數為零時,進行節點之間的調停,並判斷哪些節點將負責取消 inode 的配置。iopen glock 一般會處於共享狀態,不過當 i_nlink 計數成為零並且 ->delete_inode() 被調用時,它將會請求一項設置了 T(try 1CB)的 exclusive lock。若授與了鎖定,它將會繼續取消 inode 的配置。若鎖定未授與,原本防止鎖定被授與的節點會將其 glock 標記 D(demote)旗標,並且該旗標將會于 ->drop_inode() 時檢查,以確保取消配置動作不會被遺忘。
這代表含有零個連結計數,但卻仍開啟中的 inode 將會被發生了最後的 close() 的節點取消配置。並且,當 inode 的連結計數降為零的同時,inode 將會被標記為含有零個連結計數,不過卻依然使用於資源群組 bitmap 中的特殊狀態。它的運作方式與 ext3 file system3 的 orphan 清單相似,它會讓之後的任何 bitmap 讀者,都能知道可能可取回潛在的空間,並嘗試取回該空間。

C.6. Glock tracepoint

這些 tracepoint 被設計為能夠透過合併快取控制與 blktrace 輸出以及 on-disk 格式的知識,來確認快取控制的正確性。之後更可檢查正確鎖定所發出和完成的任何 I/O,並確保不會發生競爭情況。
gfs2_glock_state_change tracepoint 乃最重要的一項。它會追蹤 glock 的所有狀態變更,由初始建立直到最終降階為止(以 gfs2_glock_put 作為結尾),以及解除轉換程序鎖定的最終 NL)。l(locked)glock 旗標總是會在狀態更改之前設置,並且直到完成之前都不會被清除。當狀態進行變更時,絕不會有任何 holder(H glock holder 旗標)被授與。若有任何排程中的 holder,它們的狀態將一直會是 W(waiting)。當狀態變更完成時,holder 將可被授與,並且此乃 l glock 旗標被清除之前的最終作業。
gfs2_demote_rq tracepoint 可追蹤本機與遠端的降階請求。假設節點上擁有足夠的記憶體,一般鮮少會看見本機降階的請求,並且大部份時候它們會由卸載,或是透過非經常的記憶體回收所建立。遠端降階請求的數量,代表着節點之間對於特定 inode 或是資源群組的競用程度。
當 holder 被授與鎖定時,gfs2_promote 將會被調用,這將會發生在狀態變更的最後階段,或是當鎖定被請求並且能即刻授與的情況下(基於 glock 狀態已快取了適當模式的鎖定)。若 holder 為此 glock 所被授與的第一個 holder,那麼 f(first)旗標將會被設置在該 holder 上。這目前僅使用於資源群組。

C.7. Bmap tracepoint

區塊對映對於任何檔案系統來說皆為最重要的工作。GFS2 使用了傳統基於 bitmap、一個區塊兩個位元的系統。此子系統中的 tracepoint 之主要用途,乃監控配置及對映區塊的所需時間。
gfs2_bmap 追溯點會在每個 bmap 操作時,被呼叫兩次:一次是顯示 bmap 需求開始時,另一次是顯示結果完成時。這可以使得比對需求與結果、以及衡量對應檔案系統、不同檔案位移、甚至是不同檔案的不同部分之區塊的時間。比較傳回的平均扇區大小與需求的平均扇區大小,也是可能的。
為了追蹤已配置的區塊,gfs2_block_alloc 不僅在進行配置時會被調用,當釋出區塊時,它同時亦會被調用。因為所有配置皆根據了區塊欲使用的 inode 來參照,因此這可被使用來追蹤哪個實體區塊屬於 live 檔案系統中的哪個檔案。當它與 blktrace 合併時特別有用,這將會顯示有問題的 I/O 格式,並能反向參照使用透過此 tracepoint 取得之對映的相關 inode。

C.8. 日誌 tracepoint

此子系統中的 tracepoint 會追蹤被新增至日誌(gfs2_pin)中,並由該日誌中移除的區塊,以及將交易提交至日誌(gfs2_log_flush)中的所需時間。當嘗試為日誌效能問題進行除錯時,這將會非常有幫助。
gfs2_log_blocks tracepoint 會將預留的區塊紀錄在日誌中,這可協助顯示日誌對於工作量來說是否過小。
gfs2_ail_flush tracepoint(Red Hat Enterprise Linux 6.2 以上版本)與 gfs2_log_flush tracepoint 相似,它會追蹤 AIL 清單清除的起始與結束。AIL 清單包含了已通過日誌,不過尚未被寫回的 buffer,並且這將會定期被清除,以釋放更多日誌空間供檔案系統使用,或供程序請求同步或 fsync 時的情況下使用。

C.9. Glock 統計資料

GFS2 維護的統計資料有助於追蹤檔案系統內發生的事件。這能讓使用者找到效能問題。
GFS2 維護了兩組計數器:
  • dcount,計算 DLM 操作的需求數量。這顯示有多少資料進入了平均值/變異係數的計算。
  • qcount,計算 syscall 等級操作的需求數量。通常 qcount 大於、等於 dcount
除此之外,GFS2 維護了三組「平均值/變異係數對」。平均值/變異係數對是平滑化之後的指數預估值,使用的是網路碼中計算來回次數演算法則。GFS2 維護的平均值/變異係數對並不成比例,而是以微秒的整數值為單位。
  • srtt/srttvar:非區塊操作的來回時間(已平滑化)
  • srttb/srttvarb:區塊操作的來回時間(已平滑化)
  • irtt/irttvar:需求間的時間(例如 DLM 需求之間的時間)
非區塊操作是立即完成的操作,不管 DLM 的鎖定狀態為何。目前這表示當(A)鎖定的現有狀態是互斥的,(B)已需求的狀態是 null 或未鎖定,或(C)設定了「嘗試鎖定」旗標。
就 IRTT 來說,次數越多越好;對 RTT 來說,次數越少越好。
統計資料會儲存在兩個 sysfs 檔案中:
  • glstats 檔案。這檔案與 glocks 類似,不同之處在於這檔案包含統計資料,每個 glock 一行。這資料的初始化來自建立 glock 時的 glock 類型之「每個 CPU」資料(與計數器無關,計數器已歸零)。這檔案可能會很大。
  • lkstats 檔案。這檔案包含了每個 glock 類型的「每個 CPU」統計資料。這資料的統計資料以行為單位,每個欄位都是 CPU 核心。每個 glock 類型都有八行,之後都接著類型。

C.10. 參照

欲取得更多有關於 tracepoint 和 GFS2 glocks 檔案上的相關資訊,請參閱下列資源:

附錄 D. 修訂記錄

修訂記錄
修訂 7.1-3.1Thu Feb 5 2015Chester Cheng
翻譯、校閱完成。
修訂 7.1-3Tue Dec 16 2014Steven Levine
更新以符合 RHEL 6 歡迎頁的排序功能。
修訂 7.0-9Wed Oct 8 2014Steven Levine
6.6 GA 發行版本。
修訂 7.0-8Thu Aug 7 2014Steven Levine
6.6 Beta 發行版本。
修訂 7.0-4Thu Jul 17 2014Steven Levine
解決 #1102591。
新增在 Pacemaker 叢集中配置 GFS2 的步驟。
修訂 7.0-3Wed Jul 16 2014Steven Levine
解決 #1035119
更新 Glock 旗標的表格,新增 Glock 統計資料一節。
修訂 7.0-1Thu Jun 5 2014Steven Levine
6.6 發行版本的第一版草稿。
修訂 6.0-6Wed Nov 13 2013Steven Levine
6.5 GA 發行版本
修訂 6.0-5Fri Sep 27 2013Steven Levine
6.5 Beta 發行版本
修訂 6.0-3Fri Sep 27 2013Steven Levine
解決 #960841
釐清 SELinux 搭配 GFS2 檔案系統時,缺乏支援的問題。
修訂 6.0-1Fri Sep 06 2013Steven Levine
新增關於 Samba 與 GFS2 的注意事項。
修訂 5.0-7Mon Feb 18 2013Steven Levine
6.4 GA 發行版本
修訂 5.0-5Mon Nov 26 2012Steven Levine
6.4 Beta 版
修訂 5.0-4Tue Nov 13 2012Steven Levine
解決:#860324
更新、釐清 GFS2 的配置與操作考量章節。
解決:#807057
新增附註,建議使用者在建置之前,針對配置方式尋求 Red Hat 專業人士的建議。
修訂 5.0-1Mon Oct 15 2012Steven Levine
更新操作考量的章節。
修訂 4.0-2Thu Mar 28 2012Steven Levine
6.3 GA 發行版
修訂 4.0-1Thu Mar 28 2012Steven Levine
已解決:#782482、#663944
新增了有關於 GFS2 配置與操作考量上的章節。
已解決:#757742
說明了搭配使用 GFS2 和 CLVM 的必要性。
已解決:#786621
已修正了部分拼字錯誤。
修訂 3.0-2Thu Dec 1 2011Steven Levine
發行 Red Hat Enterprise Linux 6.2 GA
修訂 3.0-1Mon Sep 19 2011Steven Levine
RHEL 6.2 Beta 發行版的初始修訂
已解決:#704179
tunegfs2 指令的文件支援。
已解決:#712390
新增了 GFS2 tracepoints 上的附錄。
已解決:#705961
已解決部分拼字錯誤。
修訂 2.0-1Thu May 19 2011Steven Levine
Red Hat Enterprise Linux 6.1 初始發行版
解決:#549838
支援 RHEL 6.1 的標準 Linux 空間配額機制。
解決:#608750
闡明 GFS2 withdraw 功能。
解決:#660364
修正 GFS2 檔案系統的最大大小資訊。
解決:#687874
新增 GFS2 障礙排除章節。
解決:#664848
新增關於從 GFS 轉換到 GFS2 之前,尋找文本相依路徑名稱之資訊。
修訂 1.0-1Wed Nov 15 2010Steven Levine
Red Hat Enterprise Linux 6 初始發行版

索引

符號

修復檔案系統, 修復檔案系統
先決工作
配置,初始, 先決工作
初始工作
設定,初始, 起始設定工作
功能,新功能以及改變的功能, 新功能與功能上的改變
卸載檔案系統, 卸載檔案系統, 掛載 GFS2 檔案系統時的特殊考量
卸載,系統停擺, 掛載 GFS2 檔案系統時的特殊考量
序言 (參見 簡介)
意見
本指南的聯絡資訊, 我們需要您的意見!
掛載指令, 掛載檔案系統
掛載檔案系統, 掛載檔案系統, 掛載 GFS2 檔案系統時的特殊考量
掛載表格, 完整使用方法
撤出功能,GFS2, GFS2 撤出功能
擴充檔案系統, 擴充檔案系統
效能調整, GFS2 的效能調整
新增日誌至檔案系統, 新增日誌至檔案系統
暫停檔案系統上的動作, 暫停檔案系統的動作
最大大小,GFS2 檔案系統, GFS2 總覽
檔案系統
atime,配置更新, 配置 atime 更新
以 noatime 掛載, 以 noatime 來掛載
以 relatime 掛載, 以 relatime 來掛載
bind 掛載, Bind 掛載與本文相依的路徑名稱
修復, 修復檔案系統
卸載, 卸載檔案系統, 掛載 GFS2 檔案系統時的特殊考量
掛載, 掛載檔案系統, 掛載 GFS2 檔案系統時的特殊考量
掛載順序, Bind 掛載與檔案系統掛載順序
擴充, 擴充檔案系統
新增日誌, 新增日誌至檔案系統
暫停動作, 暫停檔案系統的動作
與本文相依的路徑名稱(CDPN), Bind 掛載與本文相依的路徑名稱
製作, 製作檔案系統
資料日誌, 資料日誌
配額管理, GFS2 配額管理, 使用強制模式或帳目模式來設定配額, 使用 gfs2_quota 指令管理 GFS2 磁碟配額
同步配額, 使用 quotasync 指令來同步配額, 使用 gfs2_quota 指令同步磁碟配額
啟用 / 停用配額強制功能, 啟用 / 停用配額強制功能
啟用配額計算功能, 啟用配額計算功能
設定配額, 使用 gfs2_quota 指令設定磁碟配額
配額限制
顯示配額限制, 使用 gfs2_quota 指令,顯示配額限制與使用量
用來擴充檔案系統表格的 GFS2 專屬選項, 完整使用方法
用來新增日誌表格的 GFS2 專屬選項, 完整使用方法
磁碟配額
依照使用者指定, 針對使用者指定配額
依照群組指定, 針對群組指定磁碟配額
啟用, 配置磁碟配額
quotacheck,執行, 建立配額資料庫檔案
建立配額檔案, 建立配額資料庫檔案
硬性限制, 針對使用者指定配額
管理, 管理磁碟配額
quotacheck 指令,用來檢查, 保持配額的正確性
回報, 管理磁碟配額
軟性限制, 針對使用者指定配額
額外資源, 參考資料
管理 GFS2, 管理 GFS2
節點鎖定, GFS2 節點鎖定
簡介, 簡介
閱讀對象, 閱讀對象
系統在進行卸載時停擺, 掛載 GFS2 檔案系統時的特殊考量
總覽, GFS2 總覽
功能,新功能與功能上的改變, 新功能與功能上的改變
配置,之前, 設定 GFS2 之前
表格
mkfs.gfs2 指令選項, 完整選項
掛載選項, 完整使用方法
用來擴充檔案系統的 GFS2 專屬選項, 完整使用方法
用來新增日誌的 GFS2 專屬選項, 完整使用方法
製作檔案系統, 製作檔案系統
設定,初始
初始工作, 起始設定工作
調整,效能, GFS2 的效能調整
資料日誌, 資料日誌
路徑名稱,與本文相依(CDPN), Bind 掛載與本文相依的路徑名稱
配置考量, GFS2 配置和操作上的考量
配置,之前, 設定 GFS2 之前
配置,初始, 開始
先決工作, 先決工作
配額管理, GFS2 配額管理, 使用強制模式或帳目模式來設定配額, 使用 gfs2_quota 指令管理 GFS2 磁碟配額
同步配額, 使用 quotasync 指令來同步配額, 使用 gfs2_quota 指令同步磁碟配額
啟用 / 停用配額強制功能, 啟用 / 停用配額強制功能
啟用配額計算功能, 啟用配額計算功能
設定配額, 使用 gfs2_quota 指令設定磁碟配額
配額限制
顯示配額限制, 使用 gfs2_quota 指令,顯示配額限制與使用量
閱讀對象, 閱讀對象

A

acl 掛載選項, 掛載檔案系統
atime,配置更新, 配置 atime 更新
以 noatime 掛載, 以 noatime 來掛載
以 relatime 掛載, 以 relatime 來掛載

C

Context-Dependent Path Names(CDPN)
GFS 至 GFS2 的轉換, 本文相依的路徑名稱之轉換

F

fsck.gfs2 指令, 修復檔案系統

M

mkfs 指令, 製作檔案系統
mkfs.gfs2 指令選項表格, 完整選項

P

Posix 鎖定, Posix 的鎖定問題

Q

quota= mount option, 使用 gfs2_quota 指令設定磁碟配額
quotacheck , 建立配額資料庫檔案
quotacheck 指令
用以檢查配額的正確性, 保持配額的正確性
quota_quantum tunable parameter, 使用 gfs2_quota 指令同步磁碟配額
quota_quantum 調整參數, 使用 quotasync 指令來同步配額

U

umount 指令, 卸載檔案系統