Red Hat Training
A Red Hat training course is available for Red Hat Enterprise Linux
全球檔案系統 2
Red Hat Enterprise Linux 5
Red Hat 全球檔案系統 2
版 7
摘要
本書提供關於配置與維護 Red Hat Enterprise Linux 5 裡的 Red Hat GFS2(Red Hat Global File System 2,Red Hat 全球檔案系統 2)的資訊。
簡介
本書提供了關於設定與維護 Red Hat GFS2(Red Hat Global File System 2)的相關訊息。Red Hat GFS2 可以在單一節點上執行,或在 RHEL 5.3 以上成為 Red Hat Cluster Suite 的一部分。關於 Red Hat Cluster Suite 的資訊,請參閱《Red Hat Cluster Suite 概論》與《設定與管理 Red Hat Cluster》。
Red Hat Enterprise Linux 的官方使用手冊與發行公告均有 HTML 與 PDF 版本。您可以在 http://www.redhat.com/docs/ 找到。
1. 使用對象
這本書的使用對象為熟悉以下項目的 Linux 系統管理者:
- Linux 系統管理步驟,包括核心設定
- 安裝、設定共享的網路儲存裝置,例如光纖通道的 SAN(區域儲存網路)
2. 相關文件
預知更多 Red Hat Enterprise Linux 的訊息,請參閱以下資源:
- Red Hat Enterprise Linux 安裝指南 — 提供 Red Hat Enterprise Linux 的安裝資訊。
- Red Hat Enterprise Linux 建置指南 — 提供 Red Hat Enterprise Linux 5 的建置、設定與管理資訊。
欲知更多 Red Hat Cluster Suite 的資訊,請參閱以下資源:
- Red Hat Cluster Suite 導覽 — 以綜覽的觀點,提供 Red Hat Cluster Suite 的資訊。
- 設定與管理 Red Hat 叢集 — 提供安裝、設定與管理 Red Hat 叢集元件的資訊。
- LVM 管理者指南 — 提供邏輯卷冊管理員(LVM,Logical Volume Manager)的資訊,其中包括在叢集環境裡執行 LVM 的說明。
- Global File System:配置與管理 — 提供關於安裝、備至與維護 Red Hat GFS(Red Hat Global File System,Red Hat 全球檔案系統)的資訊。
- 使用 Device-Mapper Multipath — 提供 Red Hat Enterprise Linux 5 中的 Device-Mapper Multipath 之使用資訊。
- 使用 GNBD 與 Global File System — 提供使用 Global Network Block Device(GNBD)搭配 Red Hat GFS 的概觀。
- 管理 Linux 虛擬伺服器 — 提供設定 Linux 虛擬伺服器(LVS,Linux Virtual Server)高效能系統與服務的資訊。
- Red Hat Cluster Suite 發行公告 — 提供 Red Hat Cluster Suite 目前版本的資訊。
Red Hat Cluster Suite 文件與其他Red Hat 的文件均有 HTML、PDF 與 RPM 版本,您可以在 Red Hat Enterprise Linux 的文件光碟或 http://www.redhat.com/docs/ 找到。
3. 回應
如果您發現文中有謬誤之處,或任何可以讓本文件更好的地方,我們竭誠歡迎您的意見。請使用 Bugzilla(http://bugzilla.redhat.com/bugzilla/)的
rh-cs
元件,提交您的意見。
Be sure to mention the manual's identifier:
rh-gfs2(EN)-5 (2009-08-18T15:15)
By mentioning this manual's identifier, we know exactly which version of the guide you have.
如果您有任何改善文件的建議,請盡可能的詳述內容。如果您發現錯誤,請告訴我們章節與其附近的本文,這樣我們可以更容易找到錯誤。
章 1. GFS2 概論
Red Hat GFS2 檔案系統是一種原生性的檔案系統,直接位於 Linux 核心檔案系統介面(VFS 層)之中。GFS2 檔案系統可以用在獨立的系統上,也可以用於叢集設定的一環。當作為叢集檔案系統時,GFS2 會使用分散式 metadata 與多重日誌。
GFS2 根基於 64 位元架構,因此理論上可以支援到 8EB 的檔案系統。然而,目前 GFS2 檔案系統能支援的最大大小為 25 TB。如果您需要使用超過 25 TB 的 GFS2 檔案系統,請聯絡 Red Hat 的業務代表。
在決定檔案系統的大小時,您也應該考慮復原的需求。在容量非常大的檔案系統上執行
fsck
指令,會花上很長的時間,並耗去大量的記憶體。除此之外,如果磁碟或磁碟子系統失效,復原時間會受限於您備份裝置的速度。
設定 Red Hat Cluster Suite 時,Red Hat GFS2 節點可以藉由 Red Hat Cluster Suite 設定與管理工具來設定、管理之。接下來 Red Hat GFS2 會為 Red Hat Cluster 中的 GFS2 節點提供資料共享,對所有 GFS2 節點來說,這共享是單一、一致的檔案系統命名空間。這可以讓不同節點上的程序以同樣方式,共享 GFS2 的檔案,就像在同一節點上的程序可以共享本地檔案系統上的檔案一樣,看不出任何不同之處。欲知更多關於 Red Hat Cluster Suite 的資訊,請參閱《設定與管理 Red Hat Cluster》。
GFS2 檔案系統必須建立在位於線性或鏡射卷冊的 LVM 邏輯卷冊上。Red Hat Cluster Suite 的 LVM 邏輯卷冊是由 CLVM(一種叢集使用的 LVM)來管理,它由 CLVM daemon(
clvmd
)所驅動,在 Red Hat Cluster Suite 的叢集上執行。這 daemon 可以讓 LVM2 來管理叢集中的邏輯卷冊,讓叢集中的所有節點共享邏輯卷冊,使其用在您電腦的任何目錄上。欲知更多 LVM 卷冊管理員的資訊,請參閱《LVM 管理者指南
》。
gfs2.ko
核心模組實作了 GFS2 檔案系統,會由 GFS2 叢集節點所載入。
注意
當您把 GFS2 檔案系統配置為叢集檔案系統時,您必須確定叢集中的所有節點都能存取共享的檔案系統。非對稱的叢集配置中,只有部份節點能存取檔案系統;像這樣的配置是不支援以上功能的。
本章提供了一些基本、簡述的資訊,作為幫助您了解 GFS2 的背景。其中包括以下幾節:
1.1. 設定 GFS2 之前
在您安裝、設定 GFS2 之前,請留意您 GFS2 檔案系統的以下特性:
- GFS2 節點
- 決定 Red Hat Cluster Suite 的哪些節點需要掛載 GFS2 檔案系統。
- 檔案系統的數目
- 決定一開始要建立幾個 GFS2 檔案系統。(您可在稍後增加更多檔案系統。)
- 檔案系統名稱
- 決定每個檔案系統的獨一無二名稱。這名稱對於叢集中所有
lock_dlm
檔案系統,以及每個本地節點的所有檔案系統(lock_dlm
與lock_nolock
),都必須是獨一無二的。舉例來說,本書會在一些範例步驟中,使用mydata1
與mydata2
檔案系統名稱。 - 日誌
- Determine the number of journals for your GFS2 file systems. One journal is required for each node that mounts a GFS2 file system. GFS2 allows you to add journals dynamically at a later point as additional servers mount a filesystem. For information on adding journals to a GFS2 file system, see 節 3.7, “新增日誌至檔案系統”.
- GNBD 伺服器節點
- 如果您使用 GNBD,請藉此決定需要幾個 GNBD 伺服器節點。請寫下每個 GNBD 伺服器節點的主機名稱與 IP 位址,稍後設定 GNBD 用戶端時會用到。欲知使用 GNBD 與 GFS2 的訊息,請參閱〈使用 GNBD 與 GFS〉一文。
- 儲存裝置與分割區
- 決定用來建立檔案系統中的邏輯卷冊(透過 CLVM)所需之儲存裝置與分割區。
注意
從超過一個節點同時對一個目錄發出多個建立、刪除的需求時,會對 GFS2 造成效能上的負荷。如果這成為您電腦的效能問題,請盡可能的從一個節點發出建立、刪除的需求。
1.2. GFS 與 GFS2 的差別
本節列出了從 GFS 到 GFS2 的變更與改進之處
Migrating from GFS to GFS2 requires that you convert your GFS file systems to GFS2 with the
gfs2_convert
utility. For information on the gfs2_convert
utility, see 附錄 A, 將 GFS 檔案系統轉換至 GFS2.
1.2.1. GFS2 指令名稱
In general, the functionality of GFS2 is identical to GFS. The names of the file system commands, however, specify GFS2 instead of GFS. 表格 1.1, “GFS 與 GFS2 指令” shows the equivalent GFS and GFS2 commands.
表格 1.1. GFS 與 GFS2 指令
GFS 指令 | GFS2 指令 | 描述 | ||||
---|---|---|---|---|---|---|
mount | mount | 掛載檔案系統。系統會決定檔案系統是 GFS 或 GFS2。欲知 GFS2 的掛載選項,請參閱 gfs2_mount(8) man page。 | ||||
umount | umount | 卸載檔案系統。 | ||||
|
| 檢查並修復未掛載的檔案系統。 | ||||
gfs_grow | gfs2_grow | 增大已掛載檔案系統的空間。 | ||||
gfs_jadd | gfs2_jadd | 為以掛載的檔案系統新增日誌。 | ||||
|
| 在儲存裝置上建立檔案系統。 | ||||
gfs_quota | gfs2_quota | 管理已掛載檔案系統的磁碟配額。 | ||||
gfs_tool | gfs2_tool | 設定、調整檔案系統,或蒐集其資訊。 | ||||
gfs_edit | gfs2_edit | 顯示、列印、或編輯檔案系統的內部結構。gfs2_edit 指令可以用在 GFS 與 GFS2 檔案系統上。 |
欲知 GFS2 檔案系統指令的完整支援選項,請參閱這些指令的 man page。
1.2.2. GFS 與 GFS2 的其他不同之處
This section summarizes the additional differences in GFS and GFS2 administration that are not described in 節 1.2.1, “GFS2 指令名稱”.
1.2.2.1. 本文相關的路徑名稱
GFS2 file systems do not provide support for context-dependent path names, which allow you to create symbolic links that point to variable destination files or directories. For this functionality in GFS2, you can use the
bind
option of the mount
command. For information on managing pathnames in GFS2, see 節 3.12, “Bind 掛載與本文相關的路徑名稱”.
1.2.2.2. gfs2.ko 模組
GFS 檔案系統的核心模組是
gfs.ko
。GFS2 檔案系統的核心模組是 gfs2.ko
。
1.2.2.3. 啟用 GFS2 的強化配額功能
In GFS2 file systems, quota enforcement is disabled by default and must be explicitly enabled. To enable and disable quotas for GFS2 file systems, you use the
quota=on|off|account
option for the mount
command. For information on enabling and disabling quota enforcement, see 節 3.5.4, “啟用/停用磁碟配額執行”.
1.2.2.4. 資料日誌
GFS2 file systems support the use of the
chattr
command to set and clear the j
flag on a file or directory. Setting the +j
flag on a file enables data journaling on that file. Setting the +j
flag on a directory means "inherit jdata", which indicates that all files and directories subsequently created in that directory are journaled. Using the chattr
command is the preferred way to enable and disable data journaling on a file.
1.2.2.5. 動態新增日誌
In GFS file systems, journals are embedded metadata that exists outside of the file system, making it necessary to extend the size of the logical volume that contains the file system before adding journals. In GFS2 file systems, journals are plain (though hidden) files. This means that for GFS2 file systems, journals can be dynamically added as additional servers mount a filesystem, as long as space remains on the file system for the additional journals. For information on adding journals to a GFS2 file system, see 節 3.7, “新增日誌至檔案系統”.
1.2.2.6. 移除 atime_quantum 參數
GFS2 檔案系統並不支援
atime_quantum
這調整選項。GFS 檔案系統中的這個選項是用來決定 atime
更新多久會發生一次。GFS2 支援的是 relatime
與 noatime
掛載選項,前者可以用來達成 GFS atime_quantum
參數類似的功能。
1.2.2.7. 掛載指令的「data=」選項
掛載 GFS2 檔案系統時,您可以指定
mount
指令的 data=ordered
或 data=writeback
選項。當 data=ordered
被設置了之後,經過一項交易所被修改的用戶資料會在該交易被載入磁碟中之前被 flush 至磁碟中。這可避免用戶在當機後在檔案中看見未初始化區塊。當設為 data=writeback
模式後,任何時候只要用戶資料被標示不完整(dirty)的話,該用戶資料便會被寫入磁碟中;這無法提供和 ordered
模式相同的一致性保證,不過它對於某些工作來說速度會較快。預設值為 ordered
模式。
1.2.2.8. gfs2_tool 指令
GFS2 的
gfs2_tool
指令支援的多種選項,與 GFS 的 gfs_tool
指令不同:
gfs2_tool
指令支援journals
參數,它會印出關於目前設定的日誌之資訊,包括檔案系統包含多少日誌。gfs2_tool
指令並不支援counters
旗標,這旗標是gfs_tool
指令用來顯示 GFS 統計資料用的。- The
gfs2_tool
command does not support theinherit_jdata
flag. To flag a directory as "inherit jdata", you can set thejdata
flag on the directory or you can use thechattr
command to set the+j
flag on the directory. Using thechattr
command is the preferred way to enable and disable data journaling on a file.
1.2.2.9. gfs2_edit 指令
gfs2_edit
指令支援多種 GFS2 的選項,多於 GFS 的gfs_edit
指令。
1.2.3. GFS2 的效能改進
GFS2 檔案系統有許多功能,與 GFS 檔案系統的使用者介面所看到的相同;但 GFS2 提供了更好的檔案系統效能。
GFS2 檔案系統提供了更精進的檔案系統效能,茲列如下:
- 單一目錄的高負載情形下,效能更好。
- 同步 I/O 操作的速度更快
- 讀取快取時更迅速(沒有鎖定的負荷)
- 用預先分配的檔案,提供更快的直接 I/O 存取(假設 I/O 大小夠大的話,例如 4M 的區塊)
- ,I/O 速度更快
- 執行
df
指令的速度更快,因為statfs
呼叫的速度加快了。 atime
模式已經改進,降低 GFS 中,atime
所產生的寫入 I/O 數目。
GFS2 檔案系統提供了更廣泛、更主流的支援,茲列如下:
- GFS2 是 Linux 上游核心的一部分(整合至 2.6.19)。
- GFS2 支援以下功能:
- SELinux 的延伸屬性。
- 透過標準的
ioctl
() 呼叫,提供lsattr
() 與chattr
() 屬性設定。 - 精確至奈秒的時間戳記
GFS2 檔案系統對檔案系統的內部效率,提供了以下改進。
- GFS2 使用更少的核心記憶體
- GFS2 不需要 metadata 產生數字。分配 GFS2 metadata 並不需要讀取的動作。在多日誌中情形下複製 metadata 區塊,會在鎖定解除之前,從日誌撤銷區塊的方式來管理。
- GFS2 使用更簡單的紀錄管理程式,這程式並不了解失去連結的 inode 或配額的變動。
gfs2_grow
與gfs2_jadd
指令使用鎖定技術,避免多個執行事例同時執行。- 呼叫的 ACL 代碼已經簡化,例如
creat
() 與mkdir
()。 - 失去連結的 inode、配額的改變、以及
statfs
的改變已經復原,不需要重新掛載日誌。
章 2. 開始
本章描述了 GFS2 的最初設定,包含以下幾節:
2.1. 先決工作
Before setting up Red Hat GFS2, make sure that you have noted the key characteristics of the GFS2 nodes (refer to 節 1.1, “設定 GFS2 之前”). Also, make sure that the clocks on the GFS2 nodes are synchronized. It is recommended that you use the Network Time Protocol (NTP) software provided with your Red Hat Enterprise Linux distribution.
注意
GFS2 節點的系統時鐘之時間差異,必須維持在幾分鐘之內,以避免不必要的更新 inode 時間戳記。不必要的更新 inode 時間戳記會對叢集的效能,產生嚴重的影響。
2.2. 起始設定工作
最開始的 GFS2 設定包含了以下工作:
- 設定邏輯卷冊。
- 製作 GFS2 檔案系統。
- 掛載檔案系統。
遵循以下步驟,設定初始階段的 GFS2。
- 使用 LVM,為每一個 Red Hat GFS2 檔案系統建立邏輯卷冊。
注意
您可以使用 Red Hat Cluster Suite 的init.d
程序檔,來自動啟動或停用邏輯卷冊。欲知更多關於init.d
程序檔的詳情,請參閱設定與管理 Red Hat 叢集。 - Create GFS2 file systems on logical volumes created in Step 1. Choose a unique name for each file system. For more information about creating a GFS2 file system, refer to 節 3.1, “製作檔案系統”.您可以使用以下其中一種格式,建立叢集的 GFS2 檔案系統:
mkfs.gfs2 -p lock_dlm -t
ClusterName:FSName
-jNumberJournals BlockDevice
mkfs -t gfs2 -p lock_dlm -t
LockTableName
-jNumberJournals BlockDevice
您可以使用以下格式之一,建立本地的 GFS2 檔案系統:mkfs.gfs2 -p lock_nolock -j
NumberJournals BlockDevice
mkfs -t gfs2 -p lock_nolock -j
NumberJournals BlockDevice
For more information on creating a GFS2 file system, see 節 3.1, “製作檔案系統”. - At each node, mount the GFS2 file systems. For more information about mounting a GFS2 file system, see 節 3.2, “掛載檔案系統”.指令用法:
mount BlockDevice MountPoint
mount -o acl BlockDevice MountPoint
掛載選項
選項能允許使用者管理檔案的 ACL(Access Control List,存取控制清單)。如果檔案系統在掛載時,沒有使用-o
acl
掛載選項,使用者就可以檢視 ACL(利用-o
aclgetfacl
指令);但不能設定 ACL(利用setfacl
指令)。注意
您可以使用 Red Hat Cluster Suite 的init.d
程序檔,來自動啟動或停用邏輯卷冊。欲知更多關於init.d
程序檔的詳情,請參閱設定與管理 Red Hat 叢集。
章 3. 管理 GFS2
本章描述了管理 GFS2 的工作與指令,包含以下幾節:
3.1. 製作檔案系統
您可以使用
mkfs.gfs2
指令來建立 GFS2 檔案系統,或使用 mkfs
指令並指定 -t gfs2
選項。檔案系統是在已啟用 LVM 卷冊中建立的。如欲執行 mkfs.gfs2
指令,您需要以下資訊:
- 鎖定的通訊協定(Lock protocol)或模組名稱(叢集的鎖定通訊協定為
lock_dlm
) - 叢集名稱(當以叢集設定的一部分來執行時)
- 日誌數量(各個可能掛載檔案系統的節點都需要一個日誌)
當您建立 GFS2 檔案系統時,您可以直接使用
mkfs.gfs2
或使用 mkfs
指令加上 -t
選項來指定 gfs2
這個檔案系統類型,之後就是 gfs2 檔案系統的選項。
注意
Once you have created a GFS2 file system with the
mkfs.gfs2
command, you cannot decrease the size of the file system. You can, however, increase the size of an existing file system with the gfs2_grow
command, as described in 節 3.6, “擴大檔案系統”.
3.1.1. 用法
當您建立叢集的 GFS2 檔案系統時,您可使用以下其中一個格式:
mkfs.gfs2 -pLockProtoName
-tLockTableName
-jNumberJournals BlockDevice
mkfs -t gfs2 -pLockProtoName
-tLockTableName
-jNumberJournals BlockDevice
當建立一個本地 GFS2 檔案系統時,您可使用下列格式:
mkfs.gfs2 -pLockProtoName
-jNumberJournals BlockDevice
mkfs -t gfs2 -pLockProtoName
-jNumberJournals BlockDevice
警告
請確認您熟悉對於
LockProtoName
和 LockTableName
參數上的使用。錯誤使用 LockProtoName
和 LockTableName
參數可能會造成檔案系統或鎖定空間(lock space)損毀。
LockProtoName
- 可指定欲使用的鎖定通訊協定的名稱。叢集的鎖定通訊協定為
lock_dlm
。 LockTableName
- 此參數會被指定於叢集環境中的 GFS2 檔案系統上。如下,它有兩個部份並以冒號區隔開來(無空格):
ClusterName:FSName
ClusterName
,GFS2 檔案系統所被建立於的 Red Hat 叢集名稱。FSName
,檔案系統名稱,能長達 1 至 16 個字元。叢集上所有的lock_dlm
的名稱都必須是獨特的,並且各個本地節點上的所有檔案系統的名稱(lock_dlm
和lock_nolock
)也必須都是獨特的。
Number
- Specifies the number of journals to be created by the
mkfs.gfs2
command. One journal is required for each node that mounts the file system. For GFS2 file systems, more journals can be added later without growing the filesystem, as described in 節 3.7, “新增日誌至檔案系統”. BlockDevice
- 指定邏輯或實體卷冊。
3.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
3.1.3. 完整選項
表格 3.1, “指令選項:
mkfs.gfs2
” describes the mkfs.gfs2
command options (flags and parameters).
表格 3.1. 指令選項:mkfs.gfs2
旗標 | 參數 | 描述 | |||||||
---|---|---|---|---|---|---|---|---|---|
-c | Megabytes | Sets the initial size of each journal's quota change file to Megabytes . | |||||||
-D | 啟用除錯輸出。 | ||||||||
-h | 協助。顯示可用的選項。 | ||||||||
-J | MegaBytes | 以 MB 為單位來指定日誌的大小。預設日誌大小為 128 MB。最小大小為 8 MB。雖然較大的日誌和較小的日誌相比之下會使用較多記憶體,不過卻能改善效能。 | |||||||
-j | Number | 可指定 mkfs.gfs2 指令所建立的日誌數量。各個掛載檔案系統的節點都必須要有一個日誌。對於 GFS2 檔案系統來說,您之後能夠在不擴大檔案系統的情況下新增額外日誌。 | |||||||
-O | 避免 mkfs.gfs2 指令在寫入檔案系統之前要求確認。 | ||||||||
-p | LockProtoName |
| |||||||
-q | Quiet。不顯示任何東西。 | ||||||||
-r | MegaBytes | 能以 MB 為單位來指定資源群組的大小。最小的資源群組大小為 32 MB。最大的資源群組大小為 2048 MB。較大的資源群組大小可增強非常大的檔案系統上的效能。若這沒有被指定的話,mkfs.gfs2 便會根據檔案系統的大小來選擇資源群組的大小:一般平均大小的檔案系統將會有 256 MB 的資源群組,並且較大的檔案系統將會有較大的 RG 以便達到較佳的效能。 | |||||||
-t | LockTableName |
| |||||||
-u | MegaBytes | Specifies the initial size of each journal's unlinked tag file. | |||||||
-V | 顯示指令版本資訊。 |
3.2. 掛載檔案系統
Before you can mount a GFS2 file system, the file system must exist (refer to 節 3.1, “製作檔案系統”), the volume where the file system exists must be activated, and the supporting clustering and locking systems must be started (refer to Configuring and Managing a Red Hat Cluster). After those requirements have been met, you can mount the GFS2 file system as you would any Linux file system.
若要操縱檔案的 ACL(Access Control List,存取控制清單),您必須使用
-o acl
掛載選項來掛載檔案系統。若檔案系統掛載時沒有使用 -o acl
掛載選項的話,用戶雖可檢視 ACL(透過 getfacl
指令),不過卻無法針對於它們進行設定(透過 setfacl
指令)。
3.2.1. 用法
Mounting Without ACL Manipulation
mount BlockDevice MountPoint
Mounting With ACL Manipulation
mount -o acl BlockDevice MountPoint
-o acl
- 用來允許操縱檔案 ACL 的 GFS2 特屬選項。
BlockDevice
- 可指定 GFS2 檔案系統所駐留的區塊裝置。
MountPoint
- 可指定 GFS2 檔案系統應被掛載的目錄。
3.2.2. 範例
在此範例中,
/dev/vg01/lvol0
上的 GFS2 檔案系統會被掛載於 /mygfs2
目錄上。
mount /dev/vg01/lvol0 /mygfs2
3.2.3. 完整使用方法
mountBlockDevice MountPoint
-ooption
The
-o option
argument consists of GFS2-specific options (refer to 表格 3.2, “GFS2 特屬的掛載選項”) or acceptable standard Linux mount -o
options, or a combination of both. Multiple option
parameters are separated by a comma and no spaces.
注意
mount
指令是一項 Linux 系統指令。除了使用描述於此部份中的 GFS2 特屬選項,您亦可使用其它的標準 mount
指令選項(例如 -r
)。如欲取得更多有關於其它 Linux mount
指令選項的相關資訊,請查看 Linux 的 mount
man page。
表格 3.2, “GFS2 特屬的掛載選項” describes the available GFS2-specific
-o option
values that can be passed to GFS2 at mount time.
表格 3.2. GFS2 特屬的掛載選項
選項 | 描述 | ||
---|---|---|---|
acl | 允許操縱檔案的 ACL。如果檔案系統在掛載時沒有使用 acl 掛載選項的話,用戶雖能檢視 ACL(透過 getfacl 指令),不過卻不允許針對於這些 ACL 進行設定(透過 setfacl 指令)。 | ||
data=[ordered|writeback] | 當 data=ordered 被設置了之後,經過一項交易所被修改的用戶資料會在該交易被載入磁碟中之前被 flush 至磁碟中。這可避免用戶在當機後在檔案中看見未初始化區塊。當設為 data=writeback 模式後,任何時候只要用戶資料被標示不完整(dirty)的話,該用戶資料便會被寫入磁碟中;這無法提供和 ordered 模式相同的一致性保證,不過它對於某些工作來說速度會較快。預設值為 ordered 模式。 | ||
| 強制 GFS2 將檔案系統視為是多重主機的檔案系統。就預設值,使用 lock_nolock 的話會自動地將 localcaching 和 localflocks 旗標開啟。 | ||
| 命令 GFS2 作為一個本地檔案系統來執行。接著 GFS2 便可選擇開啟在執行於叢集模式中時所無法使用的優化功能。localcaching 旗標會自動地被 lock_nolock 開啟。 | ||
| 命令 GFS2 來讓 VFS(虛擬檔案系統)層級進行所有的 flock 和 fcntl。localflocks 旗標會自動地被 lock_nolock 開啟。 | ||
lockproto= LockModuleName | 允許用戶指定檔案系統要使用哪個鎖定通訊協定。若 LockModuleName 未被指定的話,那麼鎖定通訊協定名稱便會由檔案系統的 superblock 讀取。 | ||
locktable= LockTableName | 允許用戶指定檔案系統要使用哪個鎖定表格。 | ||
quota=[off/account/on] | 開啟或關閉檔案系統的配額。將配額設為 account 狀態可讓檔案系統正確地維護各個 UID/GID 使用量上的數據;限制(limit)和警告(warning)值會被忽略掉。預設值為 off 。 | ||
upgrade | 升級檔案系統的 on-disk 格式,如此一來較新版本的 GFS2 便能使用它。 |
3.3. 卸載檔案系統
GFS2 檔案系統可像任何 Linux 檔案系統一樣地被卸載 — 透過使用
umount
指令。
注意
umount
指令是一項 Linux 系統指令。有關於這項指令的相關資訊位於 Linux 的 umount
指令 man page 中。
3.3.1. 用法
umount MountPoint
MountPoint
- 指定 GFS2 檔案系統目前所掛載的目錄。
3.4. 掛載 GFS2 檔案系統時的特別考量
在系統關機、並卸載檔案系統時,系統並不會認得手動掛載(而非透過
fstab
檔案自動掛載)的 GFS2 檔案系統。因此,這個 GFS2 script 並不會卸載 GFS2 檔案系統。GFS2 關機 script 執行之後,標準的關機程序會刪除所有剩下的使用者程序,包括叢集架構,並試著卸載檔案系統。沒有叢集架構,卸載會失敗,系統會停止回應。
要避免系統在 GFS2 檔案系統沒有卸載的情況下當掉,請執行以下工作之一:
- 使用
fstab
檔案來掛載 GFS2 檔案系統。 - 如果 GFS2 檔案系統已經使用
mount
指令手動掛載,在系統關機或重新開機之前,請使用umount
指令來手動卸載檔案系統。
如果您的系統在關機時,因為試圖卸載檔案系統而當掉,請使用硬體的重新啟動功能。因為檔案系統在關機程序開始前,資料就已經寫入檔案系統,所以資料流失的機率並不高。
3.5. GFS2 磁碟配額管理
檔案系統配額可被用來限制用戶或群組可使用的檔案系統空間。用戶或群組在設置了配額限制之前將不會有任何配額限制。儘管沒有設下限制,GFS2 還是會追蹤各個用戶和群組所使用掉的空間。GFS2 會以交易性的方式來更新配額資訊,如此一來系統當機的情況下便無須重建配額使用量。
To prevent a performance slowdown, a GFS2 node synchronizes updates to the quota file only periodically. The "fuzzy" quota accounting can allow users or groups to slightly exceed the set limit. To minimize this, GFS2 dynamically reduces the synchronization period as a "hard" quota limit is approached.
GFS2 使用了它的
gfs2_quota
指令來管理配額。GFS2 無法使用其它 Linux 的配額功能。
3.5.1. 設定磁碟配額
各個用戶 ID(UID)或群組 ID(GID)都有兩個可用的配額設定:hard limit(硬性限制) 和 warn limit(警告限制)。
硬性限制為可用的空間。檔案系統不會讓用戶或群組使用超過此數量的磁碟空間。如硬性限制的值為 zero,所代表的就是沒有實施限制。
警告限制一般是個比硬性限制還要少的值。當到達了警告限制時,檔案系統將會告知用戶或群組並提供它們空間使用量上的警告。如警告限制的值為 zero,所代表的就是沒有實施限制。
限制可透過使用
gfs2_quota
指令來設置。這項指令只需在一個 GFS2 已掛載的單獨節點上執行。
By default, quota enforcement is not set on GFS2 file systems. To enable quota accounting, use the
quota=
of the mount
command when mounting the GFS2 file system, as described in 節 3.5.4, “啟用/停用磁碟配額執行”.
3.5.1.1. 用法
Setting Quotas, Hard Limit
gfs2_quota limit -uUser
-lSize
-fMountPoint
gfs2_quota limit -gGroup
-lSize
-fMountPoint
Setting Quotas, Warn Limit
gfs2_quota warn -uUser
-lSize
-fMountPoint
gfs2_quota warn -gGroup
-lSize
-fMountPoint
User
- 一個用來限制或警告的使用者 ID。它可以是個來自於密碼檔案的用戶名稱或是 UID 號碼。
Group
- 一個用來限制或警告的群組 ID。它可以是個來自於群組檔案的群組名稱或是 GID 號碼。
Size
- 指定新的限制或警告值。就預設值,這個值的單位會是 MB。額外的
-k
、-s
和-b
旗標可相應地將單位更改為 KB、扇區以及檔案系統區塊。 MountPoint
- 指定動作所適用於的 GFS2 檔案系統。
3.5.1.2. 範例
此範例將用戶 Bert 在檔案系統
/mygfs2
上的硬性限制設為了 1024MB(1GB)。
gfs2_quota limit -u Bert -l 1024 -f /mygfs2
此範例將群組 ID 21 在檔案系統
/mygfs2
上的警告限制設為了 50KB。
gfs2_quota warn -g 21 -l 50 -k -f /mygfs2
3.5.2. 顯示磁碟配額限制和使用量
您可透過使用
gfs2_quota get
指令來顯示特定用戶和群組的配額限制與目前使用量。您亦可透過使用 gfs2_quota list
指令來顯示配額檔案的所有內容,在此情況下,所有非 zero 的硬性限制、非 zero 的警告限制或非 zero 的值的 ID 都會被列出。
3.5.2.1. 用法
Displaying Quota Limits for a User
gfs2_quota get -uUser
-fMountPoint
Displaying Quota Limits for a Group
gfs2_quota get -gGroup
-fMountPoint
Displaying Entire Quota File
gfs2_quota list -f MountPoint
User
- 一個用來顯示特定用戶資訊的用戶 ID。這能夠是個來自於 password 檔案的用戶名稱或是 UID 號碼。
Group
- 一個用來顯示特定群組資訊的群組 ID。這能夠是個來自於 group 檔案的群組名稱或是 GID 號碼。
MountPoint
- 指定動作所適用於的 GFS2 檔案系統。
3.5.2.2. 指令輸出
gfs2_quota
指令所顯示的 GFS2 配額資訊如下:
userUser
: limit:LimitSize
warn:WarnSize
value:Value
groupGroup
: limit:LimitSize
warn:WarnSize
value:Value
LimitSize
、WarnSize
和 Value
數字(值)的預設單位為 MB。若將 -k
、-s
或 -b
旗標附加至指令列的話,單位便會相應地被更改為 KB、磁區,或是檔案系統區塊。
User
- 資料關聯的用戶名稱或 ID。
Group
- 資料關聯的群組名稱或 ID。
LimitSize
- 為用戶或群組所設置的硬性限制。若沒有設置限制的話,這個值便會是零。
Value
- 用戶或群組實際上所使用的磁碟空間。
3.5.2.3. 註解(Comments)
當顯示配額資訊時,若將
-n
選項附加至指令列的話,gfs2_quota
指令便不會將 UID 和 GID 解析為名稱。
Space allocated to GFS2's hidden files can be left out of displayed values for the root UID and GID by adding the
-d
option to the command line. This is useful when trying to match the numbers from gfs2_quota
with the results of a du
command.
3.5.2.4. 範例
此範例顯示了所有設置了限制或是使用了
/mygfs2
檔案系統上任何磁碟空間的用戶和群組的配額資訊。
gfs2_quota list -f /mygfs2
此範例以扇區來顯示了
/mygfs2
檔案系統上的 users
群組的配額資訊。
gfs2_quota get -g users -f /mygfs2 -s
3.5.3. 同步化配額
GFS2 會將所有配額資訊儲存入它自己在磁碟上的內部檔案。GFS2 節點不會為所有編寫的檔案系統更新這個配額檔案;它將會每 60 秒更新配額檔案一次。這是為了要避免寫至配額檔案的節點之間的衝突,因為這會造成效能降低。
當用戶或群接近它們的配額限制時,GFS2 便會動態式地減少它配置檔案更新之間的時間來避免限制被超過。配額同步化之間的正常時間是個可調整的參數
quota_quantum
,並且可透過使用 gfs2_tool
指令來進行更改。就預設值,時間週期會是 60 秒。還有,quota_quantum
這個參數必須在所有節點上設置,並且每次檔案系統被掛載時便需要設置。(對於 quota_quantum
參數所進行的變更無法在卸載後保留。)
您可使用
gfs2_quota sync
指令來在 GFS2 所進行的自動更新之間同步化配額資訊(由一個節點至 on-disk 配額檔案)。
3.5.3.1. 用法
Synchronizing Quota Information
gfs2_quota sync -f MountPoint
MountPoint
- 指定動作所適用於的 GFS2 檔案系統。
Tuning the Time Between Synchronizations
gfs2_tool settuneMountPoint
quota_quantumSeconds
MountPoint
- 指定動作所適用於的 GFS2 檔案系統。
Seconds
- 指定 GFS2 的一般配額檔案同步化之間的新時間週期。較小的值可能會增加衝突並使效能降低。
3.5.3.2. 範例
此範例同步化了配額資訊(由它所執行於的節點至檔案系統
/mygfs2
)。
gfs2_quota sync -f /mygfs2
此範例將一個單獨節點上的
/mygfs2
檔案系統的一般配額檔案更新預設時間更改為了一個小時(3600 秒)。
gfs2_tool settune /mygfs2 quota_quantum 3600
3.5.4. 啟用/停用磁碟配額執行
在 GFS2 檔案系統中,配額實施就預設值會被停用。若要啟用檔案系統的配額實施,請透過指定
quota=on
選項來掛載檔案系統。
3.5.4.1. 用法
mount -o quota=on BlockDevice MountPoint
若要掛載一個配額實施被停用的檔案系統,請透過指定
quota=off
選項來掛載檔案系統。這是預設的設定。
mount -o quota=off BlockDevice MountPoint
-o quota={on|off}
- 指定當檔案系統被掛載時,配額實施是否要被啟用或停用。
BlockDevice
- 可指定 GFS2 檔案系統所駐留的區塊裝置。
MountPoint
- 可指定 GFS2 檔案系統應被掛載的目錄。
3.5.4.2. 範例
在此範例中,
/dev/vg01/lvol0
上的 GFS2 檔案系統會被掛載於 /mygfs2
目錄上,並且配額實施會被啟用。
mount -o quota=on /dev/vg01/lvol0 /mygfs2
3.5.5. 啟用磁碟配額計算(Quota Accounting)
您可在不實施限制和警告值的情況下追蹤磁碟使用量和維護所有使用者和群組的配額計算。若要這麼作,請透過指定
quota=account
選項來掛載檔案系統。
3.5.5.1. 用法
mount -o quota=account BlockDevice MountPoint
-o quota=account
- 指定用戶和群組使用量數據由檔案系統所維護,儘管沒有強制設置配額限制。
BlockDevice
- 可指定 GFS2 檔案系統所駐留的區塊裝置。
MountPoint
- 可指定 GFS2 檔案系統應被掛載的目錄。
3.5.5.2. 範例
在此範例中,
/dev/vg01/lvol0
上的 GFS2 檔案系統會被掛載於 /mygfs2
目錄上,並且配額計算會被啟用。
mount -o quota=account /dev/vg01/lvol0 /mygfs2
3.6. 擴大檔案系統
當檔案系統所存於的裝置被擴充之後,
gfs2_grow
指令可被用來擴充 GFS2 檔案系統。在一個現存的 GFS2 檔案系統上執行 gfs2_grow
指令可將目前檔案系統和裝置之間的所有可用空間填入新初始化的 GFS2 檔案系統延伸。當這項填入作業完成後,檔案系統的資源指數(resource index)便會被更新。接著,叢集中所有的節點便能使用被新增的額外儲存空間。
gfs2_grow
指令必須在已掛載的檔案系統上執行,不過它只需要在叢集中的一個節點上執行。所有其它節點都會察覺到擴充已發生,並自動地開始使用新的空間。
注意
一旦您使用
mkfs.gfs2
指令建立了 GFS2 檔案系統之後,您不能降低檔案系統的大小。
3.6.1. 用法
gfs2_grow MountPoint
MountPoint
- 指定動作所適用於的 GFS2 檔案系統。
3.6.2. 註解(Comments)
在執行
gfs2_grow
指令之前:
- 備份檔案系統上的重要資料。
- 透過執行一項
df
指令來判斷欲擴充的檔案系統所使用的卷冊。MountPoint
- Expand the underlying cluster volume with LVM. For information on administering LVM volumes, see the LVM Administrator's Guide
在執行了
gfs2_grow
指令後,請執行一項 df
指令來檢查新的空間在檔案系統中是否已可使用。
3.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.
3.6.4. 完整使用方法
gfs2_grow [Options
] {MountPoint
|Device
} [MountPoint
|Device
]
MountPoint
- 指定 GFS2 檔案系統所掛載於的目錄。
Device
- 指定檔案系統的裝置節點。
表格 3.3, “當擴充檔案系統時可使用的 GFS2 特屬選項” describes the GFS2-specific options that can be used while expanding a GFS2 file system.
表格 3.3. 當擴充檔案系統時可使用的 GFS2 特屬選項
選項 | 描述 |
---|---|
-h | Help。顯示一則簡短的使用方法訊息。 |
-q | Quiet。降低詳細度。 |
-r MegaBytes | 指定新資源群組的大小。預設大小為 256MB。 |
-T | Test。進行所有計算,不過不會將任何資料寫入磁碟並且不會擴充檔案系統。 |
-V | 顯示指令版本資訊。 |
3.7. 新增日誌至檔案系統
gfs2_jadd
指令可被用來將日誌新增至 GFS2 檔案系統。您可在任何時候,在不擴充基本邏輯卷冊的情況下動態式地將日誌新增至一個 GFS2 檔案系統。gfs2_jadd
指令必須在已掛載的檔案系統上執行,不過它只需要在叢集中的一個節點上執行。所有其它節點都會察覺到擴充已發生。
注意
如果 GFS2 檔案系統已滿,
gfs2_jadd
指令就會失敗,即使包含檔案系統的邏輯卷冊已經擴展,並且大於檔案系統亦然。這是因為 GFS2 檔案系統中,日誌是一般的檔案,而不室內嵌的 metadata,因此僅僅擴展底下的邏輯卷冊並不會為日誌提供空間。
在將日誌新增至 GFS 檔案系統之前,您可使用
gfs2_tool
的 journals
選項來找出 GFS2 檔案系統目前包含著多少日誌。下列範例顯示了掛載於 /mnt/gfs2
的檔案系統中的日誌數量與大小。
[root@roth-01 ../cluster/gfs2]# gfs2_tool journals /mnt/gfs2
journal2 - 128MB
journal1 - 128MB
journal0 - 128MB
3 journal(s) found.
3.7.1. 用法
gfs2_jadd -j Number MountPoint
Number
- 指定了欲新增的日誌數量。
MountPoint
- 指定 GFS2 檔案系統所掛載於的目錄。
3.7.2. 範例
在此範例中,有一個日誌會被新增至位於
/mygfs2
目錄上的檔案系統。
gfs2_jadd -j1 /mygfs2
在此範例中,有兩個日誌會被新增至位於
/mygfs2
目錄上的檔案系統。
gfs2_jadd -j2 /mygfs2
3.7.3. 完整使用方法
gfs2_jadd [Options
] {MountPoint
|Device
} [MountPoint
|Device
]
MountPoint
- 指定 GFS2 檔案系統所掛載於的目錄。
Device
- 指定檔案系統的裝置節點。
表格 3.4, “當新增日誌時可使用的 GFS2 特屬選項” describes the GFS2-specific options that can be used when adding journals to a GFS2 file system.
表格 3.4. 當新增日誌時可使用的 GFS2 特屬選項
旗標 | 參數 | 描述 |
---|---|---|
-h | 協助。顯示簡短的使用方法訊息。 | |
-J | MegaBytes | 以 MB 為單位來指定新的日誌。預設的日誌大小為 128MB。最小大小為 32MB。若要將不同大小的日誌新增至檔案系統,您必須針對於各個不同大小的日誌執行 gfs2_jadd 指令。指定的大小會被四捨五入並成為檔案系統被建立時所指定的日誌區段大小的倍數。 |
-j | Number | 指定 gfs2_jadd 指令所新增的新日誌數量。預設值為 1。 |
-q | Quiet。降低詳細度。 | |
-V | 顯示指令版本資訊。 |
3.8. 資料記錄
Ordinarily, GFS2 writes only metadata to its journal. File contents are subsequently written to disk by the kernel's periodic sync that flushes file system buffers. An
fsync()
call on a file causes the file's data to be written to disk immediately. The call returns when the disk reports that all data is safely written.
資料日誌會導致
fsync()
時間降低,尤其是小檔案;這是因為除了 metadata 之外,檔案資料也會被紀錄到日誌中。資料安全地紀錄到日誌後, fsync()
會回傳,這樣會比把檔案資料寫入主檔案系統要來得快。
依賴
fsync()
來同步檔案資料的應用程式,會因為使用資料日誌功能,而改善效能。資料日誌可以在任何已標示旗標的目錄(及其子目錄)中,自動啟用。長度為零的現有檔案,也可以啟用或停用資料日誌功能。
Enabling data journaling on a directory sets the directory to "inherit jdata", which indicates that all files and directories subsequently created in that directory are journaled. You can enable and disable data journaling on a file or a directory with either of the following methods:
- 對檔案或目錄執行
chattr +j
或chattr -j
指令。 - 用
gfs2_tool setflag
或gfs2_tool clearflag
指令,設定或清除檔案或目錄的jdata
旗標。
使用
chattr
指令來啟用或停用檔案或目錄的資料日誌功能,是比較建議的作法。
3.8.1. 使用 chattr
指令來啟用或停用資料日誌
您可以使用
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
3.8.2. 使用 gfs2_tool
指令來啟用或停用資料日誌功能
以下指令會啟用 GFS2 檔案
/mnt/gfs2/gfs2file
的資料日誌功能
[root@roth-01 ~]# gfs2_tool setflag jdata /mnt/gfs2/gfs2file
您可以使用
lsattr
指令來檢查 jdata
旗標是否已經設定正確。
[root@roth-01 ~]# lsattr /mnt/gfs2
---------j--- /mnt/gfs2/gfs2file
當一個目錄設定了
jdata
旗標之後,所有在該目錄中建立的檔案與目錄,都會啟用日誌功能。
以下指令會在
/mnt/gfs2
目錄中建立名為 gfs2_dir
的子目錄,設定該目錄的 jdata
旗標,然後檢查該旗標是否設定正確。之後,這指令會在目錄裡建立 gfs2file
,然後檢查該檔案的旗標是否設定正確。
[root@roth-01 ~]#mkdir /mnt/gfs2/gfs2_dir
[root@roth-01 ~]#gfs2_tool setflag jdata /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
要清除一個檔案或目錄的
jdata
旗標,您可以使用 gfs2_tool clearflag jdata
指令,如以下範例所示。
[root@roth-01 ~]#gfs2_tool clearflag jdata /mnt/gfs2/gfs2file
[root@roth-01 ~]#lsattr /mnt/gfs2
------------- /mnt/gfs2/gfs2file
3.9. 配置 atime
更新
每個檔案與目錄的 inode 都有三個與其相關的時間戳記:
ctime
— 前一次 inode 狀態改變的時間mtime
— 上一次檔案(或目錄)資料被修改的時間atime
— 上一次檔案(或目錄)資料被存取的時間
如果
atime
更新已經啟用(因為啟用這些更新是 GFS2 與其他 Linux 檔案系統的預設值),那麼每次檔案被讀取時,inode 就需要被更新。
因為少數應用程式會使用
atime
所提供的資訊,所以這些更新會導致許多不需要的寫入量,以及檔案鎖定量。這些都會降低效能,因此關掉或降低 atime
更新,是比較建議的作法。
您可以使用以下兩種方式,降低
atime
更新所造成的影響:
- 使用
relatime
(相對 atime)來掛載,如果之前的atime
更新比mtime
或ctime
更新來得舊,就會進行更新。 - 使用
noatime
來掛載,這會停用該檔案系統的atime
更新。
3.9.1. 以 relatime
來掛載
relatime
(相對 atime)Linux 掛載選項可以在掛載檔案系統時使用。這選項會指定如果之前的 atime
更新比 mtime
或 ctime
更新來得舊,那麼 atime
就會更新。
3.9.1.1. 用法
mount BlockDevice MountPoint
-o relatime
BlockDevice
- 可指定 GFS2 檔案系統所駐留的區塊裝置。
MountPoint
- 可指定 GFS2 檔案系統應被掛載的目錄。
3.9.1.2. 範例
在這範例中,GFS2 檔案系統位於
/dev/vg01/lvol0
上,並掛載於 /mygfs2
目錄。atime
更新只會在之前的 atime
更新比 mtime
或 ctime
更新要來得舊時發生。
mount /dev/vg01/lvol0 /mygfs2 -o relatime
3.9.2. 以 noatime
來掛載
noatime
Linux 掛載選項可以用在掛載檔案系統時,它會停用該檔案系統的 atime
更新。
3.9.2.1. 用法
mount BlockDevice MountPoint
-o noatime
BlockDevice
- 可指定 GFS2 檔案系統所駐留的區塊裝置。
MountPoint
- 可指定 GFS2 檔案系統應被掛載的目錄。
3.9.2.2. 範例
在這範例中,GFS2 檔案系統位於
/dev/vg01/lvol0
上,掛載於 /mygfs2
目錄上,並關閉 atime
更新。
mount /dev/vg01/lvol0 /mygfs2 -o noatime
3.10. 暫停檔案系統的動作
您可以使用
gfs2_tool freeze
暫停檔案系統的寫入活動。暫停寫入活動讓您擷取硬體裝置的靜態快照。gfs2_tool unfreeze
指令可以停止這項暫停動作。
3.10.1. 用法
Start Suspension
gfs2_tool freeze MountPoint
End Suspension
gfs2_tool unfreeze MountPoint
MountPoint
- 指定檔案系統。
3.10.2. 範例
這範例會暫停
/mygfs2
檔案系統的寫入動作。
gfs2_tool freeze /mygfs2
以下範例停止對
/mygfs2
檔案系統的暫停動作。
gfs2_tool unfreeze /mygfs2
3.11. 修復檔案系統
當檔案系統已經掛載的節點失效時,檔案系統的日誌可以快速復原。然而,如果儲存裝置失去電力或離線,那麼檔案系統就有可能損毀。(日誌功能無法從儲存子系統的失效中復原。)當這類型的損毀發生時,您可以使用
fsck.gfs2
指令來修復 GFS2 檔案系統。
警告
fsck.gfs2
指令只能在不被任何節點掛載的檔案系統上執行。
注意
如果您之前用過 GFS 檔案系統上的
gfs_fsck
指令,請注意 fsck.gfs2
指令跟 gfs_fsck
的早期版本有所不同,茲列如下:
- 您無法用 Ctrl+C 設定互動模式。按下 Ctrl+C 會取消
fsck.gfs2
指令。除非您想要取消這個指令,否則請「不要」按 Ctrl+C。 - 您可以使用
-v
旗標來增加顯示資訊的等級。使用第二個-v
旗標可以進一步增加這等級。 - 您可以使用
-q
旗標來降低顯示資訊的等級。使用第二個-q
旗標可以進一步降低這等級。 -n
選項會以唯讀模式開啟檔案系統,並對所有詢問回答「no
」。這選項提供了寫入指令以顯露錯誤的方式,而不用實際讓fsck.gfs2
指令生效。
關於其他的指令選項,請參閱
gfs2.fsck
的 man page。
3.11.1. 用法
fsck.gfs2 -y BlockDevice
-y
-y
旗標會對所有問題回答yes
。指定-y
旗標後,fsck.gfs2
指令做出任何改變之前,不會提示您。BlockDevice
- 可指定 GFS2 檔案系統所駐留的區塊裝置。
3.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
3.12. Bind 掛載與本文相關的路徑名稱
GFS2 檔案系統並不提供與本文相關(context-dependent)的路徑名稱,這讓您可以建立符號連結,指向不同的檔案或目錄。要在 GFS2 中使用這功能,您可以使用
mount
指令的 bind
選項。
mount
指令的 bind
選項能讓您重新掛載檔案層級的不同部份,同時又可以在原先的位置中取用。這指令的格式如下。
mount --bind olddir newdir
執行這個指令後,
olddir
目錄的內容會在兩個地方出現:olddir
與 newdir
。您也可以使用這選項讓一個檔案出現在兩個地方。
舉例來說,執行以下指令後,
/root/tmp
的內容會與之前掛載的 /var/log
目錄相同。
[root@menscryfa ~]#cd ~root
[root@menscryfa ~]#mkdir ./tmp
[root@menscryfa ~]#mount --bind /var/log /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
,產生誤導。
3.13. bind 掛載與檔案系統的掛載順序
當您使用
mount
指令的 bind
選項時,請確定檔案系統是以正確的順序掛載的。在以下範例中,/var/log/
目錄必須在執行 bind 掛載至 /tmp/
目錄之前,先被掛載。
# mount --bind /var/log /tmp
檔案系統的掛載順序是由以下準則來決定的:
- 一般來說,檔案系統的掛載順序是由
fstab
檔案裡的先後順序而定。例外情形是使用_netdev
旗標掛載的檔案系統,或擁有自己的init
script 之檔案系統。 - 擁有自己的
init
script 之檔案系統會在稍後的初始化過程中掛載,這會在fstab
檔案中的系統 - 使用
_netdev
旗標掛載的檔案系統,會在系統上的網路功能啟用後掛載。
如果您的配置需要 bind 掛載至 GFS2 檔案系統,您可以將
fstab
檔案排列如下:
- 掛載需要 bind 掛載的本地檔案系統。
- 以 bind 方式將 GFS2 檔案系統掛載至目錄
- 掛載 GFS2 檔案系統
如果您的配置需要使用 bind 的方式掛載本地目錄(或檔案系統)至一個 GFS2 檔案系統上,在
fstab
檔案裡以正確的順序列出檔案系統,才能正確地掛載,因為 GFS2 檔案系統會直到 GFS2 的 init
script 執行之後才能掛載。因此,您需要撰寫 init
script 來執行 bind 掛載,這樣 bind 掛載才會在 GFS2 檔案系統掛載之後行之。
以下 script 是自訂
init
script 的範例。這個 script 會 bind 掛載兩個目錄至 GFS2 檔案系統上的兩個目錄。在此範例中有一個現存的 GFS2 掛載點,位置是 /mnt/gfs2a
,會在 GFS2 init
script 執行時、叢集啟動後掛載。
在這範例 script 中,
chkconfig
敘述的值表示:
- 345 表示這個 script 會在 runlevel 3、4 與 5 執行時啟動
- 29 表示啟動時的優先順序,在這例子中,這個 script 會在開機時,GFS2 的
init
script 執行後啟動,啟動的優先順序為 26 - 73 是停止時的優先順序,在這例子裡 script 會在關機程序進行時、GFS2 script 之前停止,停止時的優先順序為 74
這啟動與停止的值表示您可以手動執行這些工作,方法是執行
service start
與 service stop
指令。舉例來說,如果這 script 的名稱是 fredwilma
,您可以執行 service fredwilma start
。
這個 script 應該放在
/etc/init.d
目錄裡,執行權限與其它在此目錄的檔案相同。您接下來可以執行 chkconfig on
指令,連結這個 script 到所指稱的 runlevel。舉例來說,如果這個 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
3.14. GFS2 的撤出功能
GFS2 的撤出(withdraw)功能是叢集中,GFS2 檔案系統的資料完整性功能。如果 GFS2 核心模組偵測到 GFS2 檔案系統在運作一項 I/O 動作之後,產生了不一致的現象,這個節點就會從叢集中撤出。這會停止 I/O 運作,並等待更多 I/O 運作的錯誤出盡,避免更進一步的傷害。然後您可以卸載這檔案系統,使用
fsck
指令對檔案系統進行修復,然後重新啟動節點。您也可以在重開機前,手動停止任何服務或應用程式。GFS2 撤出功能會比發生 kernel panic 要好,後者會導致另一個節點把這個節點排除(fence)在外。
不一致會導致 GFS2 撤出的例子之一,是磁區的數量不一致。當 GFS2 核心從檔案系統中刪除了一個檔案,它會系統性地移除與這檔案有關的所有資料與 metadata 磁區。完成之後,它會檢查磁區的數量。如果這數量不是 1(1 表示剩下的磁碟 inode 就是它自己),那表示檔案系統有不一致的情形。
附錄 A. 將 GFS 檔案系統轉換至 GFS2
要將 GFS 檔案系統轉換至 GFS2,請使用
gfs2_convert
指令。
- 將叢集中所有節點的 GFS 檔案系統卸載。
- 在 GFS 檔案系統上執行
gfs_fsck
指令,確保檔案系統沒有損毀。 - 重新掛載並備份現有的 GFS 檔案系統。
- 卸載檔案系統,執行
gfs2_convert
。將gfsfilesystem
gfsfilesystem
轉換至 GFS2 之前,系統會顯示警告與確認提示。
以下範例將區塊裝置
/dev/testvg/testlv
上的 GFS 檔案系統轉換至 GFS2 檔案系統。
[root@dash-01 ~]#gfs2_convert /dev/testvg/testlv
gfs2_convert version 2 (built Sep 25 2007 12:41:29) Copyright (C) Red Hat, Inc. 2004-2006 All rights reserved. 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/testvg/testlv from GFS1 to GFS2? (y/n)y
Converting resource groups. Converting inodes. 6 inodes converted. Fixing file and directory information. 1 directories, 2 dirents fixed. Converting journals. Converting journal space to rg space. Building system structures. Removing obsolete gfs1 structures. Committing changes to disk. /dev/gfs2testvg/gfs2testlv: filesystem converted successfully to gfs2. [root@dash-01 ~]#
附錄 B. 修訂紀錄
修訂記錄 | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|
修訂 7-12.400 | 2013-10-31 | Rüdiger Landmann | ||||||||
| ||||||||||
修訂 7-12 | 2012-07-18 | Anthony Towns | ||||||||
| ||||||||||
修訂 5.4-1 | Tue Aug 18 2009 | Steven Levine | ||||||||
| ||||||||||
修訂 1.0-0 | Thu Jan 29 2009 | |||||||||
|
索引
A
- acl mount option, 掛載檔案系統
- adding journals to a file system, 新增日誌至檔案系統
- atime, configuring updates, 配置 atime 更新
- mounting with noatime , 以 noatime 來掛載
- mounting with relatime , 以 relatime 來掛載
- audience, 使用對象
B
C
- configuration, before, 設定 GFS2 之前
- configuration, initial, 開始
- prerequisite tasks, 先決工作
D
- data journaling, 資料記錄
F
- feedback, 回應
- file system
- adding journals, 新增日誌至檔案系統
- atime, configuring updates, 配置 atime 更新
- mounting with noatime , 以 noatime 來掛載
- mounting with relatime , 以 relatime 來掛載
- bind mounts, Bind 掛載與本文相關的路徑名稱
- context-dependent path names (CDPNs), Bind 掛載與本文相關的路徑名稱
- data journaling, 資料記錄
- growing, 擴大檔案系統
- making, 製作檔案系統
- mount order, bind 掛載與檔案系統的掛載順序
- mounting, 掛載檔案系統, 掛載 GFS2 檔案系統時的特別考量
- quota management, GFS2 磁碟配額管理
- displaying quota limits, 顯示磁碟配額限制和使用量
- enabling quota accounting, 啟用磁碟配額計算(Quota Accounting)
- enabling/disabling quota enforcement, 啟用/停用磁碟配額執行
- setting quotas, 設定磁碟配額
- synchronizing quotas, 同步化配額
- repairing, 修復檔案系統
- suspending activity, 暫停檔案系統的動作
- unmounting, 卸載檔案系統, 掛載 GFS2 檔案系統時的特別考量
- fsck.gfs2 command, 修復檔案系統
G
- GFS2
- atime, configuring updates, 配置 atime 更新
- mounting with noatime , 以 noatime 來掛載
- mounting with relatime , 以 relatime 來掛載
- managing, 管理 GFS2
- quota management, GFS2 磁碟配額管理
- displaying quota limits, 顯示磁碟配額限制和使用量
- enabling quota accounting, 啟用磁碟配額計算(Quota Accounting)
- enabling/disabling quota enforcement, 啟用/停用磁碟配額執行
- setting quotas, 設定磁碟配額
- synchronizing quotas, 同步化配額
- withdraw function, GFS2 的撤出功能
- GFS2 file system maximum size, GFS2 概論
- GFS2-specific options for adding journals table, 完整使用方法
- GFS2-specific options for expanding file systems table, 完整使用方法
- gfs2_grow command, 擴大檔案系統
- gfs2_jadd command, 新增日誌至檔案系統
- gfs2_quota command, GFS2 磁碟配額管理
- growing a file system, 擴大檔案系統
I
- initial tasks
- setup, initial, 起始設定工作
- introduction, 簡介
- audience, 使用對象
M
- making a file system, 製作檔案系統
- managing GFS2, 管理 GFS2
- maximum size, GFS2 file system, GFS2 概論
- mkfs command, 製作檔案系統
- mkfs.gfs2 command options table, 完整選項
- mount command, 掛載檔案系統
- mount table, 完整使用方法
- mounting a file system, 掛載檔案系統, 掛載 GFS2 檔案系統時的特別考量
O
- overview, GFS2 概論
- configuration, before, 設定 GFS2 之前
P
- path names, context-dependent (CDPNs), Bind 掛載與本文相關的路徑名稱
- preface (參見 introduction)
- prerequisite tasks
- configuration, initial, 先決工作
Q
- quota management, GFS2 磁碟配額管理
- displaying quota limits, 顯示磁碟配額限制和使用量
- enabling quota accounting, 啟用磁碟配額計算(Quota Accounting)
- enabling/disabling quota enforcement, 啟用/停用磁碟配額執行
- setting quotas, 設定磁碟配額
- synchronizing quotas, 同步化配額
- quota= mount option, 設定磁碟配額
- quota_quantum tunable parameter, 同步化配額
R
- repairing a file system, 修復檔案系統
S
- setup, initial
- initial tasks, 起始設定工作
- suspending activity on a file system, 暫停檔案系統的動作
- system hang at unmount, 掛載 GFS2 檔案系統時的特別考量
T
- tables
- GFS2-specific options for adding journals, 完整使用方法
- GFS2-specific options for expanding file systems, 完整使用方法
- mkfs.gfs2 command options, 完整選項
- mount options, 完整使用方法
U
- umount command, 卸載檔案系統
- unmount, system hang, 掛載 GFS2 檔案系統時的特別考量
- unmounting a file system, 卸載檔案系統, 掛載 GFS2 檔案系統時的特別考量
W
- withdraw function, GFS2, GFS2 的撤出功能
法律聲明
Copyright © 2009 Red Hat Inc..
This document is licensed by Red Hat under the Creative Commons Attribution-ShareAlike 3.0 Unported License. If you distribute this document, or a modified version of it, you must provide attribution to Red Hat, Inc. and provide a link to the original. If the document is modified, all Red Hat trademarks must be removed.
Red Hat, as the licensor of this document, waives the right to enforce, and agrees not to assert, Section 4d of CC-BY-SA to the fullest extent permitted by applicable law.
Red Hat, Red Hat Enterprise Linux, the Shadowman logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
Java® is a registered trademark of Oracle and/or its affiliates.
XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.
MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.
Node.js® is an official trademark of Joyent. Red Hat Software Collections is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.
The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation's permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.
All other trademarks are the property of their respective owners.