歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux綜合 >> Linux資訊 >> 更多Linux

JFS 概述:日志文件系統如何縮短系統重啟時間

  如果發生系統崩潰, JFS 提供了快速文件系統重啟。通過使用數據庫日志技術,JFS 能在幾秒或幾分鐘之內把文件系統恢復到一致狀態,而非日志文件系統卻要花上幾小時甚至幾天才能完成。本白皮書對 JFS 體系結構作了概述,並且描述了可在 developerWorks 網站上找到的 JFS 技術的設計特性、潛在限制以及管理實用程序。 日志文件系統 (JFS) 提供了基於日志的字節級文件系統,該文件系統是為面向事務的高性能系統而開發的。它具有可伸縮性和健壯性,與非日志文件系統相比,它的優點是其快速重啟能力:JFS 能夠在幾秒或幾分鐘內就把文件系統恢復到一致狀態。 雖然 JFS 主要是為滿足服務器(從單處理器系統到高級多處理器和群集系統)的高吞吐量和可靠性需求而設計的,JFS 還可用於想得到高性能和可靠性的客戶機配置。 體系結構和設計 JFS 體系結構可從磁盤布局特性的角度進行說明。 邏輯卷 所有文件系統討論的基礎是某種類型的邏輯卷。這可以是一個物理磁盤,或物理磁盤空間的某個子集,例如:一個 FDISK 分區。邏輯卷也稱為磁盤分區。 聚集和文件集 文件系統創建實用程序 mkfs,創建了完全包含在分區內的聚集。聚集是包含一種特定格式的磁盤塊陣列,其格式包括超級塊和分配映射表。超級塊將分區標識成 JFS 聚集,而分配映射表描述聚集內每個數據塊的分配狀態。格式還包括描述它所必需的初始文件集和控制結構。文件集是可安裝的實體。 文件、目錄、inode 與尋址結構 文件集包含文件和目錄。文件和目錄由 inode 持續表示;每個 inode 描述文件或目錄的屬性,並作為查找磁盤上文件或目錄數據的起始點。JFS 還使用 inode 來表示其它文件系統對象,如描述文件集中每個 inode 的分配狀態和磁盤位置的映射表。 目錄將用戶特定的名稱映射到為文件和目錄所分配的 inode 上,並且形成傳統的命名層次。文件包含用戶數據,用戶數據中沒有隱含任何限制或格式。也就是說,JFS 將用戶數據看成是未解釋的字節流。根植於 inode 基於盤區的尋址結構用來將文件數據映射到磁盤。聚集超級塊和磁盤分配映射表、文件描述符和 inode 映射表、inode、目錄以及尋址結構一起表示了 JFS 控制結構或元數據。 日志 在每個聚集中維護 JFS 日志,並且用來記錄元數據的操作信息。日志有一種同樣由文件系統創建實用程序設置的格式。聚集內多個安裝的文件集可以同時使用一個日志。 設計特性 JFS 從一開始就設計成完全集成了日志記錄,而不是在現有文件系統上添加日志記錄。JFS 的許多特性使之區別於其它文件系統。 日志處理 JFS 提供了改進的結構化一致性和可恢復性,以及比非日志文件系統(例如:HPFS、ext2 和傳統 UNIX 文件系統)快得多的系統重啟時間。發生系統故障時非日志文件系統容易崩潰,是由於一個邏輯寫文件操作通常占用多個媒體 I/O 來完成,且在任何給定時間,可能沒有完全反映在媒體上。這些文件系統依靠重啟實用程序(也就是 fsck),fsck 檢查文件系統的所有元數據(例如:目錄和磁盤尋址結構)以檢測和修復結構完整性問題。這是一個耗時並且容易出錯的過程,在最糟糕的情況下,它還可能丟失或放錯數據。 相反,JFS 使用原來為數據庫開發的技術,記錄了文件系統元數據上執行的操作(即原子事務)信息。如果發生系統故障,可通過重放日志並對適當的事務應用日志記錄,來使文件系統恢復到一致狀態。由於重放實用程序只需檢查文件系統最近活動所產生的運行記錄,而不是檢查所有文件系統的元數據,因此,與這種基於日志的方法相關的文件系統恢復時間要快得多。 基於日志恢復的其它幾個方面也值得注意。首先,JFS 只記錄元數據上的操作,因此,重放這些日志只能恢復文件系統中結構關系和資源分配狀態的一致性。它沒有記錄文件數據,也沒有將這些數據恢復到一致狀態。因此,恢復後某些文件數據可能丟失或失效,對數據一致性有關鍵性需求的用戶應該使用同步 I/O。 面對媒體出錯,日志記錄不是特別有效。特別地,在將日志或元數據寫入磁盤的期間發生的 I/O 錯誤,意味著在系統崩潰後,要將文件系統恢復到一致狀態,需要耗時並且有可能強加的全面完整性檢查。這暗示著,壞塊重定位是任何駐留在 JFS 下的存儲管理器或設備的一個關鍵特性。 JFS 日志記錄的語義如下:當涉及元數據更改的文件系統操作--例如,unlink()--返回成功執行的返回碼時,操作的結果已經提交到文件系統,即使系統崩潰了也可以發現。例如,一旦成功刪除了文件,即使系統崩潰然後重啟,它仍然是刪除的並且不會再重新出現。 日志記錄風格將同步寫入日志磁盤引入每個修改元數據的 inode 或 vfs 操作。(對數據庫專家而言,這是一種使用非剝奪緩沖區策略的僅重做的、物理殘留映象、提前寫的日志記錄協議。)在性能方面,與依賴(多個)謹慎的同步元數據寫操作以獲得一致性的許多非日志文件系統相比,這種方法較好。但是,與其它日志文件系統相比,它在性能上處於劣勢。其它日志文件系統,如 Veritas VxFS 和 Transarc Episode,使用不同的日志風格並且緩慢地將日志數據寫入磁盤。在執行多個並行操作的服務器環境中,通過將多個同步寫操作組合成單一寫操作的組提交來減少這種性能損失。JFS 日志記錄風格隨著時間推移而得到不斷改進,現在提供了異步日志記錄,異步日志記錄提高了文件系統的性能。


基於盤區的尋址結構 JFS 使用基於盤區的尋址結構,連同主動的塊分配策略,產生緊湊、高效、可伸縮的結構,以將文件中的邏輯偏移量映射成磁盤上的物理地址。盤區是象一個單元那樣分配給文件的相連塊序列,可用一個由 <邏輯偏移量,長度,物理地址> 組成的三元組來描述。尋址結構是一棵 B+ 樹,該樹由盤區描述符(上面提到的三元組)填充,根在 inode 中,鍵為文件中的邏輯偏移量。 可變的塊尺寸 按文件系統分,JFS 支持 512、1024、2048 和 4096 字節的塊尺寸,以允許用戶根據應用環境優化空間利用率。較小的塊尺寸減少了文件和目錄中內部存儲碎片的數量,空間利用率更高。但是,小塊可能會增加路徑長度,與使用大的塊尺寸相比,小塊的塊分配活動可能更頻繁發生。因為服務器系統通常主要考慮的是性能,而不是空間利用率,所以缺省塊尺寸為 4096 字節。 動態磁盤 inode 分配 JFS 按需為磁盤 inode 動態地分配空間,同時釋放不再需要的空間。這一支持避開了在文件系統創建期間,為磁盤 inode 保留固定數量空間的傳統方法,因此用戶不再需要估計文件系統包含的文件和目錄最大數目。另外,這一支持使磁盤 inode 與固定磁盤位置分離。 目錄組織 JFS 提供兩種不同的目錄組織。第一種組織用於小目錄,並且在目錄的 inode 內存儲目錄內容。這就不再需要不同的目錄塊 I/O,同時也不再需要分配不同的存儲器。最多可有 8 個項可直接存儲在 inode 中,這些項不包括自己(.)和父(..)目錄項,這兩個項存儲在 inode 中不同的區域內。 第二種組織用於較大的目錄,用按名字鍵控的 B+ 樹表示每個目錄。與傳統無序的目錄組織比較,它提供更快的目錄查找、插入和刪除能力。 稀疏和密集文件 按文件系統分,JFS 既支持稀疏文件也支持密集文件。 稀疏文件允許把數據寫到一個文件的任意位置,而不要將以前未寫的中間文件塊實例化。所報告的文件大小是已經寫入的最高塊位處,但是,在文件中任何給定塊的實際分配,只有在該塊進行寫操作時才發生。例如,假設在一個指定為稀疏文件的文件系統中創建一個新文件。應用程序將數據塊寫到文件中第 100 塊。盡管磁盤空間只分配了 1 塊給它,JFS 將報告該文件的大小為 100 塊。如果應用程序下一步讀取文件的第 50 塊,JFS 將返回填充了 0 的一個字節塊。假設應用程序然後將一塊數據寫到該文件的第 50 塊,JFS 仍然報告文件的大小為 100 塊,而現在已經為它分配了兩塊磁盤空間。稀疏文件適合需要大的邏輯空間但只使用這個空間的一個(少量)子集的應用程序。 對於密集文件,將分配相當於文件大小的磁盤資源。在上例中,第一個寫操作(將一塊數據寫到文件的第 100 塊)將導致把 100 個塊的磁盤空間分配給該文件。在任何已經隱式寫入的塊上進行讀操作,JFS 將返回填充了 0 的字節塊,正如稀疏文件的情況一樣。 JFS 內部(潛在)限制 JFS 是完全 64 位的文件系統。所有 JFS 文件系統結構化字段都是 64 位大小。這允許 JFS 同時支持大文件和大分區。 文件系統大小 JFS 支持的最小文件系統是 16M 字節。最大文件系統的大小是文件系統塊尺寸和文件系統元數據結構支持的最大塊數兩者的乘積。JFS 將支持最大文件長度是 512 萬億字節(TB)(塊尺寸是 512 字節)到 4 千萬億字節(PB)(塊尺寸是 4K 字節) 文件長度 最大文件長度是主機支持的虛擬文件系統最大文件長度。例如:如果主機只支持 32 位,則這就限制了文件長度。 可移動媒體 JFS 不支持把軟盤作為基本文件系統設備。 標准管理實用程序 JFS 提供創建和維護文件系統的標准管理實用程序。 創建文件系統 這個實用程序提供 mkfs 命令的 JFS 特定部分,用來在指定的驅動器上初始化 JFS 文件系統。該實用程序在較低級別上操作,並假設文件系統所存在的任何卷的創建/初始化由更高級別的另一個實用程序處理。 檢查/修復文件系統



檢查/修復文件系統



Copyright © Linux教程網 All Rights Reserved