EXWOLF討論區's Archiver

wolf 發表於 2008-1-6 21:45

JFS 文件係統概述及布局分析(三)

保留聚集inode5到15以備將來擴展。
從聚集inode16開始,每個文件集有一個inode,即文件集分配映射表inode。這個inode描述了表示文件集的控制結構。當更多文件集添加到聚集中時,為了容納更多的文件集inode,聚集inode表本身可能必須增大。

分配組 [color=#f5fafe][/color]
分配組(AG)把聚集中的空間分成大塊,並且允許JFS資源分配策略使用眾所周知的方法,來實現更好的JFSI/O性能。首先,分配策略嘗試將相關數據的磁盤塊和磁盤inode集群起來,使磁盤實現好的局域性。文件通常是順序地讀寫,而目錄中的文件通常一起訪問。其次,為了容納局域性,分配策略嘗試在整個聚集中分配不相關數據。聚集內的分配組用從0開始的AG(分配組)索引。即用AG標識。 [color=#f5fafe][/color]
必須選擇分配組大小,以使AG足夠大以不斷提供連續資源分配。為了將聚集擴充或縮小時所需進行的更新數最小化,分配組必須限制最大組數128。此外,JFS將對8192個聚集塊的分配組大小規定其最小值。分配組大小必須總是1個dmap頁(1、2、4、8、...dmap頁)描述的塊數的2的冪次方。分配組大小在聚集超級塊中存儲。  
大小不是分配組大小倍數的聚集將包含部分分配組;磁盤塊沒有完全覆蓋聚集的最後一個分配組。除了JFS將標記在塊分配映射表中分配的卻不存在的磁盤塊之外,該部分分配組將被當作完整的分配組。

文件集

文件集是文件和目錄的集合,這些文件和目錄形成了可獨立安裝的子樹。文件集完全包含在一個聚集中。請注意,一個聚集中可能有多個文件集;在那種情況下,所有文件集共享由聚集控制結構定義的空閒聚集磁盤塊公共池。  
文件集有:

文件集inode表,包含描述文件集範圍的控制結構的inode。文件集inode表邏輯上包含一個inode數組。 [color=#f5fafe][/color]
文件集inode分配映射表,描述文件集inode表。文件集inode分配映射表包含文件集inode上及其磁盤位置上的分配狀態信息。描述文件集分配映射表和其他文件集信息的超級inode,駐留前面所描述的聚集inode表中。由於復制了聚集inode表,因此這個inode存在第二個版本,它指向同樣的數據。超級inode本身是一個文件。當文件集一開始創建時,分配第一個inode盤區按需要動態分配和釋放其它inode盤區。 中國
文件集中inode的分配如下所示:
中國
保留文件集inode0。 [color=#f5fafe][/color]
文件集inode1包含附加的文件集信息,它們無法放入聚集inode表中的文件集分配映射表inode。

文件集inode2是文件集的根目錄inode。注意,JFS保留了inode2是文件係統的根這一公共Unix約定。 [color=#f5fafe]中國[/color]
文件集inode3是文件集的ACL文件。

從文件集inode4開始,文件集inode用於一般文件集對象、用戶文件、目錄和符號鏈接。

盤區、inode、B+樹 [color=#f5fafe]Www.[/color]
盤區是當作單元分配給JFS對象的連續聚集塊序列。盤區完全包含在一個聚集(並且因此也是在一個分區)中;但是,大盤區可能跨多個分配組。  
每個JFS對象可用一個inode來表示。inode包含預期的對象特定信息,例如:時間戳和文件類型。它們還包含記錄盤區分配的B+樹。注意,所有JFS元數據結構(除超級塊之外)都以文件表示。通過重用這種數據的inode結構,數據格式(即磁盤布局)自然是可擴展的。 [color=#f5fafe][/color]
盤區、B+樹、inode在以下章節中詳細描述。  
盤區 [color=#f5fafe][/color]
文件是按盤區順序分配的。盤區是當作一個單元分配的聚集塊的連續變長序列。盤區的尺寸範圍是1到2(24)-1個聚集塊。盤區可能跨越多個分配組(AG)。為了在插入新盤區、定位特定盤區等操作方面有更優性能,這些盤區是按B+樹索引的。 [color=#f5fafe][/color]
定義一個盤區需要兩個值,即其長度和其地址。長度以聚集塊尺寸為單位計算。JFS使用24位值來表示盤區的長度,因此盤區的範圍大小是1到2(24)-1個聚集塊。 [color=#f5fafe][/color]
對於512字節的聚集塊尺寸(所允許的最小值),最大盤區是512*(2(24)-1)字節,(比8G稍小)。對於4096字節的聚集塊尺寸(所允許的最大值),盤區的最大長度是4096*(2(24)-1)字節,(比64G稍小)。這些限制僅適用於一個的盤區;對整體文件大小沒有限制作用。地址指的是盤區中第一個塊的地址。地址同樣以聚集塊為單位:它從聚集的開始處計算塊偏移量。

結合了用戶特定聚集塊尺寸的基於盤區的文件係統,允許JFS不需要單獨支持內部存儲碎片。可配置聚集使用小的聚集塊尺寸(例如,512字節),以使大量小尺寸文件的聚集內部存儲碎片最小化。

通常,JFS分配嘗試通過分配最小數量的盤區策略,而使每個盤區盡可能大。這就允許大的I/O傳送,結果使得性能提高。然而,對於特殊情況,不一定總有這種結果。例如,一個段的寫入時復制會造成連續盤區被分割成更小的連續盤區係列。另一種情況是盤區大小的限制。例如:由於JFS必須把整個盤區讀入內存,然後進行解壓縮,所以壓縮文件盤區大小是有限的。由於JFS的可用內存數量有限,因此它必須保證有足夠的空間用於解壓縮盤區。  
提供了一個碎片整理實用程序,以減少動態分配/釋放可變長盤區時出現的外部存儲碎片。這種分配和釋放可能導致不相連的變長空閒盤區遍及整個聚集。碎片整理實用程序會把多個小的空閒盤區合並成一個較大的盤區。 [color=#f5fafe][/color]
inode  
JFS磁盤inode是512字節。一個JFS磁盤inode包含4組基本信息。第一組描述JFS對象的POSIX屬性。第二組描述JFS對象的其它屬性;這些屬性包括支持VFS必需的信息、操作係統環境特定的信息、以及B+樹的頭部。第三組不是包含B+樹根節點的盤區分配描述符就是包含內嵌數據。第四組包含擴展屬性、更多內嵌數據或附加的盤區分配描述符。在jfs_dinode.h的structdinode中定義磁盤inode結構。

JFS動態分配inode提供的好處如下: [color=#f5fafe][/color]
inode磁盤塊可放在任何磁盤地址,這使得inode號和位置分開。這種分離簡化了支持聚集和文件集重組,能夠使聚集縮小。可以移動inode,移動後號碼仍然相同。這允許JFS不必需要查找目錄結構就可以更新inode號。對於支持DFS文件集復制而言,這種分離也是必需的。當復制文件集時,僅復制inode。既然JFS能把新的inode放在磁盤的任意位置,新inode將有與從它們復制的inode相同的號碼。這允許JFS不需復制目錄結構並且更新inode號。 [color=#f5fafe][/color]
不再需要分配實際所需十倍的inode。這對於JFS中較大的inode尺寸(大於512字節)而言,尤為重要。 [color=#f5fafe][/color]
大文件的文件分配可能消耗多個分配組且仍是連續的,而靜態分配造成間隔(由於每個分配組中初始分配的inode)。

另一方面,動態inode分配造成大量問題,包括:  
對於靜態分配,文件係統的幾何構造隱含描述了磁盤上inode的布局;對於動態分配,必需有單獨的映射結構。  
對JFS完整性而言,這些映射結構是至關重要的。由於復制這些結構的係統開銷,JFS決定接受丟失這些映射表的風險。但是,JFS將復制B+樹結構,該結構允許JFS查找映射表。 [color=#f5fafe][/color]
通過只分配磁盤上inode連續大塊的inode盤區,動態分配了inode。根據定義,一個JFSinode盤區包含32個inode。對於512字節的inode尺寸,因此磁盤上一個inode盤區的大小是16KB。  
當分配新的inode盤區時,並不初始化盤區。然而,要使fsck能夠檢查是否inode在使用中,JFS需要inode的一些信息。一旦盤區中的 inode標記成在使用中,就必須初始化它的文件集號、inode號、inode戳以及inode分配組塊地址。因此,鏈接字段就足以確定inode當前是否正在使用。  
注意,動態inode分配意味著在inode號與inode的磁盤地址之間沒有直接關係。因此,JFS必須有查找磁盤上inode的方法。inode分配映射表提供了這一功能。

inode生成號只是每當重用inode時值就增加的計數器。

存儲每個inode生成計數器這一靜態inode分配常用方法在動態inode分配中不起作用,因為當inode空閒時,其磁盤空間可能確實由不是 inode的數據所重用,(換句話說,空間可能被收回,以存儲普通文件數據)。因此,在JFS中,只有一個inode生成計數器,它在每一個inode分配時增加其值,即在重用inode時,相應的計數器增加其值,而不是每個inode有一個計數器。

頁: [1]

Powered by Discuz! Archiver 6.1.0  © 2001-2007 Comsenz Inc.