JFS 文件係統概述及布局分析(一)
日志文件係統如何縮短係統重啟時間如果發生係統崩潰,JFS提供了快速文件係統重啟。通過使用數據庫日志技術,JFS能在幾秒或幾分鐘之內把文件係統恢復到一致狀態,而非日志文件係統卻要花上幾小時甚至幾天才能完成。本白皮書對JFS體係結構作了概述,並且描述了可在developerWorks網站上找到的JFS技術的設計特性、潛在限制以及管理實用程序。 Www.
日志文件係統(JFS)提供了基於日志的字節級文件係統,該文件係統是為面向事務的高性能係統而開發的。它具有可伸縮性和健壯性,與非日志文件係統相比,它的優點是其快速重啟能力:JFS能夠在幾秒或幾分鐘內就把文件係統恢復到一致狀態。 [color=#f5fafe][/color]
雖然JFS主要是為滿足服務器(從單處理器係統到高級多處理器和群集係統)的高吞吐量和可靠性需求而設計的,JFS還可用於想得到高性能和可靠性的客戶機配置。
體係結構和設計
JFS體係結構可從磁盤布局特性的角度進行說明。 [color=#f5fafe][/color]
邏輯卷
所有文件係統討論的基礎是某種類型的邏輯卷。這可以是一個物理磁盤,或物理磁盤空間的某個子集,例如:一個FDISK分區。邏輯卷也稱為磁盤分區。 Www.
聚集和文件集
文件係統創建實用程序mkfs,創建了完全包含在分區內的聚集。聚集是包含一種特定格式的磁盤塊陣列,其格式包括超級塊和分配映射表。超級塊將分區標識成JFS聚集,而分配映射表描述聚集內每個數據塊的分配狀態。格式還包括描述它所必需的初始文件集和控制結構。文件集是可安裝的實體。
文件、目錄、inode與尋址結構
文件集包含文件和目錄。文件和目錄由inode持續表示;每個inode描述文件或目錄的屬性,並作為查找磁盤上文件或目錄數據的起始點。JFS還使用inode來表示其它文件係統對象,如描述文件集中每個inode的分配狀態和磁盤位置的映射表。
目錄將用戶特定的名稱映射到為文件和目錄所分配的inode上,並且形成傳統的命名層次。文件包含用戶數據,用戶數據中沒有隱含任何限制或格式。也就是說,JFS將用戶數據看成是未解釋的字節流。根植於inode基於盤區的尋址結構用來將文件數據映射到磁盤。聚集超級塊和磁盤分配映射表、文件描述符和inode映射表、inode、目錄以及尋址結構一起表示了JFS控制結構或元數據。
日志
在每個聚集中維護JFS日志,並且用來記錄元數據的操作信息。日志有一種同樣由文件係統創建實用程序設置的格式。聚集內多個安裝的文件集可以同時使用一個日志。 [color=#f5fafe][/color]
設計特性
JFS從一開始就設計成完全集成了日志記錄,而不是在現有文件係統上添加日志記錄。JFS的許多特性使之區別於其它文件係統。 [color=#f5fafe][/color]
日志處理
JFS提供了改進的結構化一致性和可恢復性,以及比非日志文件係統(例如:HPFS、ext2和傳統UNIX文件係統)快得多的係統重啟時間。發生係統故障時非日志文件係統容易崩潰,是由於一個邏輯寫文件操作通常佔用多個媒體I/O來完成,且在任何給定時間,可能沒有完全反映在媒體上。這些文件係統依靠重啟實用程序(也就是fsck),fsck檢查文件係統的所有元數據(例如:目錄和磁盤尋址結構)以檢測和修復結構完整性問題。這是一個耗時並且容易出錯的過程,在最糟糕的情況下,它還可能丟失或放錯數據。
相反,JFS使用原來為數據庫開發的技術,記錄了文件係統元數據上執行的操作(即原子事務)信息。如果發生係統故障,可通過重放日志並對適當的事務應用日志記錄,來使文件係統恢復到一致狀態。由於重放實用程序只需檢查文件係統最近活動所產生的運行記錄,而不是檢查所有文件係統的元數據,因此,與這種基於日志的方法相關的文件係統恢復時間要快得多。
基於日志恢復的其它幾個方面也值得注意。首先,JFS只記錄元數據上的操作,因此,重放這些日志只能恢復文件係統中結構關係和資源分配狀態的一致性。它沒有記錄文件數據,也沒有將這些數據恢復到一致狀態。因此,恢復後某些文件數據可能丟失或失效,對數據一致性有關鍵性需求的用戶應該使用同步 I/O。
面對媒體出錯,日志記錄不是特別有效。特別地,在將日志或元數據寫入磁盤的期間發生的I/O錯誤,意味著在係統崩潰後,要將文件係統恢復到一致狀態,需要耗時並且有可能強加的全面完整性檢查。這暗示著,壞塊重定位是任何駐留在JFS下的存儲管理器或設備的一個關鍵特性。 [color=#f5fafe][/color]
JFS日志記錄的語義如下:當涉及元數據更改的文件係統操作--例如,unlink()--返回成功執行的返回碼時,操作的結果已經提交到文件係統,即使係統崩潰了也可以發現。例如,一旦成功刪除了文件,即使係統崩潰然後重啟,它仍然是刪除的並且不會再重新出現。 [color=#f5fafe][/color]
日志記錄風格將同步寫入日志磁盤引入每個修改元數據的inode或vfs操作。(對數據庫專家而言,這是一種使用非剝奪緩衝區策略的僅重做的、物理殘留映象、提前寫的日志記錄協議。)在性能方面,與依賴(多個)謹慎的同步元數據寫操作以獲得一致性的許多非日志文件係統相比,這種方法較好。但是,與其它日志文件係統相比,它在性能上處於劣勢。其它日志文件係統,如VeritasVxFS和TransarcEpisode,使用不同的日志風格並且緩慢地將日志數據寫入磁盤。在執行多個並行操作的服務器環境中,通過將多個同步寫操作組合成單一寫操作的組提交來減少這種性能損失。JFS日志記錄風格隨著時間推移而得到不斷改進,現在提供了異步日志記錄,異步日志記錄提高了文件係統的性能。 [color=#f5fafe]中國[/color]
基於盤區的尋址結構
JFS使用基於盤區的尋址結構,連同主動的塊分配策略,產生緊湊、高效、可伸縮的結構,以將文件中的邏輯偏移量映射成磁盤上的物理地址。盤區是象一個單元那樣分配給文件的相連塊序列,可用一個由<邏輯偏移量,長度,物理地址>組成的三元組來描述。尋址結構是一棵B+樹,該樹由盤區描述符(上面提到的三元組)填充,根在inode中,鍵為文件中的邏輯偏移量。
可變的塊尺寸
按文件係統分,JFS支持512、1024、2048和4096字節的塊尺寸,以允許用戶根據應用環境優化空間利用率。較小的塊尺寸減少了文件和目錄中內部存儲碎片的數量,空間利用率更高。但是,小塊可能會增加路徑長度,與使用大的塊尺寸相比,小塊的塊分配活動可能更頻繁發生。因為服務器係統通常主要考慮的是性能,而不是空間利用率,所以缺省塊尺寸為4096字節。
動態磁盤inode分配 [color=#f5fafe][/color]
JFS按需為磁盤inode動態地分配空間,同時釋放不再需要的空間。這一支持避開了在文件係統創建期間,為磁盤inode保留固定數量空間的傳統方法,因此用戶不再需要估計文件係統包含的文件和目錄最大數目。另外,這一支持使磁盤inode與固定磁盤位置分離。
目錄組織
JFS提供兩種不同的目錄組織。第一種組織用於小目錄,並且在目錄的inode內存儲目錄內容。這就不再需要不同的目錄塊I/O,同時也不再需要分配不同的存儲器。最多可有8個項可直接存儲在inode中,這些項不包括自己(.)和父(..)目錄項,這兩個項存儲在inode中不同的區域內。
第二種組織用於較大的目錄,用按名字鍵控的B+樹表示每個目錄。與傳統無序的目錄組織比較,它提供更快的目錄查找、插入和刪除能力。
稀疏和密集文件
中國
按文件係統分,JFS既支持稀疏文件也支持密集文件。 [color=#f5fafe]中國[/color]
稀疏文件允許把數據寫到一個文件的任意位置,而不要將以前未寫的中間文件塊實例化。所報告的文件大小是已經寫入的最高塊位處,但是,在文件中任何給定塊的實際分配,只有在該塊進行寫操作時才發生。例如,假設在一個指定為稀疏文件的文件係統中創建一個新文件。應用程序將數據塊寫到文件中第100塊。盡管磁盤空間只分配了1塊給它,JFS將報告該文件的大小為100塊。如果應用程序下一步讀取文件的第50塊,JFS將返回填充了0的一個字節塊。假設應用程序然後將一塊數據寫到該文件的第50塊,JFS仍然報告文件的大小為100塊,而現在已經為它分配了兩塊磁盤空間。稀疏文件適合需要大的邏輯空間但只使用這個空間的一個(少量)子集的應用程序。
對於密集文件,將分配相當於文件大小的磁盤資源。在上例中,第一個寫操作(將一塊數據寫到文件的第100塊)將導致把100個塊的磁盤空間分配給該文件。在任何已經隱式寫入的塊上進行讀操作,JFS將返回填充了0的字節塊,正如稀疏文件的情況一樣。
頁:
[1]