JFS ファイルシステムのレイアウト

ファイルシステムは、ファイル、ディレクトリー、および他の構造体のセットです。

ファイルシステムは、情報を保守し、 ファイルまたはディレクトリーのデータが存在するディスク上の位置を識別します。 JFS ファイルシステムには、ファイルとディレクトリーに加えて、 ブート・ブロック、スーパーブロック、ビットマップ、および 1 つまたは複数の割り当てグループが入っています。 各ファイルシステムは 1 つの論理ボリュームを占有します。

JFS ブート・ブロック

ブート・ブロックは、ディスク上でバイト・オフセット 0 から開始する、 ファイルシステムの最初の 4096 バイトを占有します。 ブート・ブロックは、 オペレーティング・システムを始動するために使用することができます。

JFS スーパーブロック

スーパーブロックはサイズが 4096 バイトで、ディスク上のバイト・オフセット 4096 から開始します。 スーパーブロックはファイルシステム全体に関する情報を保守します。 スーパーブロックには以下のフィールドが組み込まれています。

  • ファイルシステムのサイズ
  • ファイルシステム内のデータ・ブロック数
  • ファイルシステムの状態を示すフラグ
  • 割り当てグループ・サイズ

JFS 割り当てビットマップ

ファイルシステムには、次の割り当てビットマップが入っています。
  • フラグメント割り当てマップは、各フラグメントの割り当て状態を記録します。
  • ディスク i ノード割り当てマップは、各 i ノードの状況を記録します。

JFS フラグメント

多くのファイルシステムにはディスク・ブロックまたはデータ・ブロックがあります。 これらのブロックはディスクを同じサイズの単位に分割して、 データをファイルまたはディレクトリーの論理ブロックに保管します。 ディスク・ブロックは、フラグメント と呼ばれる固定サイズの割り当て単位にさらに分割する場合があります。 システムによっては、ディスク・ブロックの境界をまたがる、 フラグメント割り当てを許可しません。 言い換えると、論理ブロックは、 異なるディスク・ブロックから割り当てられたフラグメントであってはなりません。

ただし、ジャーナル・ファイルシステム (JFS) は、一連のフラグメントとしてファイルシステムのビューを提供します。 JFS フラグメントは基本的な割り当て単位であり、 ディスクはフラグメント・レベルでアドレスされます。 したがって、フラグメント割り当ては、他の方法の場合のディスク・ブロックの境界をまたがることができます。 デフォルトの JFS フラグメント・サイズは 4096 バイトですが、 より小さなサイズを指定することができます。 フラグメントには、ファイルとディレクトリーに関するデータに加えて、 ディスク・アドレスおよび間接ブロックに関するデータが入っています。

JFS 割り当てグループ

ファイルシステムを構成するフラグメントのセットは、 連続するフラグメントからなる 1 つまたは複数の固定サイズの単位に分割されます。 各単位は割り当てグループ です。 これらのグループの最初のグループは、ファイルシステムを開始し、 グループの最初の 32 x 4096 バイトを占有する予約領域を収めています。 この領域の最初の 4096 バイトは、ブート・ブロックを保持し、 2 番目の 4096 バイトはファイルシステムのスーパーブロックを保持します。

各割り当てグループには、グループのいくつかのフラグメントを占有する、 固定数の連続するディスク i ノードが入っています。 これらのフラグメントは、ファイルシステムの作成および拡張時の i ノード用に予約されています。 最初の割り当てグループの場合、 ディスク i ノードは、予約済みブロック領域の直後のフラグメントを占有します。 それ以降のグループの場合、ディスク i ノードは各グループの先頭にあります。 ディスク i ノードのサイズは 128 バイトで、 固有のディスク i ノード番号によって識別されます。 i ノード番号は、ディスク i ノードをディスク上の位置、 または割り当てグループ内の i ノードにマップします。

ファイルシステムのフラグメント割り当てグループ・サイズとディスク i ノード割り当てグループ・サイズは、 各割り当てグループ内に存在するフラグメント数とディスク i ノード数として指定されます。 デフォルトの割り当てグループ・サイズは 8 MB ですが、64 MB の大きさが可能です。 上記の値は、ファイルシステムの作成時に設定され、 ファイルシステムのスーパーブロックに保管されます。

割り当てグループによって、JFS リソース割り当てポリシーは、 最適なファイルシステム入出力パフォーマンスを実現するための効果的な方法を使用できるようになります。 このような割り当てポリシーは、ディスクの最適な局所性を達成するために、 関連するデータ用のディスク・ブロックとディスク i ノードのクラスター化を試みます。 ファイルは読み取りおよび書き込みが順次に行われることが多く、 1 つのディレクトリー内のファイルは一緒にアクセスされることが多くなります。 また、これらの割り当てポリシーは、 フリー・スペースのフラグメント化を最小限にとどめるように、 関連のないデータをファイルシステム内全体に分散させるよう試みます。

JFS ディスク i ノード

論理ブロックには、4096 バイト単位の、ファイルまたはディレクトリーのデータが入ります。 各論理ブロックは、そのデータの保管のために割り当てられたフラグメントです。 各ファイルおよびディレクトリーは、ファイル・タイプ、アクセス権、オーナーの ID、 および当該ファイルへのリンク数などのアクセス情報が入っている i ノードを持っています。 これらの i ノードには、論理ブロックに関するデータが保管されている、 ディスク上の位置を検出するための『アドレス』も入っています。

各 i ノードには番号付きセクションの配列もあります。 各セクションには、 ファイルまたはディレクトリーの論理ブロックの 1 つのアドレスが入っています。 これらのアドレスは、 開始フラグメントおよび単一の割り当てに組み込まれるフラグメントの合計数を示します。 例えば、サイズが 4096 バイトのファイルは、i ノードの配列上で単一のアドレスを持ちます。 その 4096 バイトのデータは、単一の論理ブロックに入れられます。 サイズが 6144 バイトのより大きなファイルは 2 つのアドレスを持ちます。 1 つのアドレスには最初の 4096 バイトが入り、 2 番目のアドレスには残りの 2048 バイト (部分論理ブロック) が入ります。 ファイルに多くの論理ブロックがある場合には、i ノードにはディスク・アドレスは入りません。 その代わり、i ノードは、追加のアドレスの入った間接ブロックを指します。