Solaris のシステム管理 (デバイスとファイルシステム)

UFS ファイルシステムのシリンダグループの構造

UFS ファイルシステムを作成すると、ディスクスライスがシリンダグループに分割されます。「シリンダグループ」は、1 つ以上の連続したディスクシリンダで構成されます。シリンダグループはさらにアドレス指定可能なブロックに分割され、このブロックによって、シリンダグループ内のファイルの構造が編成され、制御されます。各種のブロックは、ファイルシステム内で特定の機能を持っています。UFS ファイルシステムには、次の 4 種類のブロックがあります。

ブロックの種類  

格納されている情報の種類 

ブートブロック 

システムブート時に使用される情報 

スーパーブロック 

ファイルシステムに関する大部分の情報 

i ノード 

ファイルに関する名前以外のすべての情報 

記憶域またはデータブロック 

各ファイルのデータ 

次の節では、これらのブロックの編成と機能について説明します。

ブートブロック

ブートブロックには、システムのブート時に使用されるオブジェクトが格納されます。ファイルシステムがブートに使用されなければ、ブートブロックは空白のままです。ブートブロックは最初のシリンダグループ (シリンダグループ 0) にのみ置かれ、スライス内の最初の 8K バイトです。

スーパーブロック

スーパーブロックには、次のようなファイルシステムに関する大部分の情報が格納されます。

スーパーブロックには重要なデータが入っているので、ファイルシステムの作成時には複数のスーパーブロックが作成されます。

集計情報ブロックは、スーパーブロック内に保管されます。集計情報ブロックは複製されませんが、通常はシリンダグループ 0 内の主スーパーブロックと一緒のグループに分類されます。集計ブロックには、ファイルシステムが使用されるときに発生する変更が記録されます。さらに、ファイルシステム内の i ノード数、ディレクトリ数、フラグメント数、および記憶ブロック数が表示されます。

i ノード

i ノードには、ファイルに関して名前以外のすべての情報が入っており、ディレクトリ内に保管されます。i ノードは 128 バイトです。i ノード情報はシリンダ情報ブロック内に保管され、次の情報が入っています。

15 個のディスクブロックアドレスの配列 (0 - 14) は、ファイルの内容が格納されているデータブロックを指します。最初の 12 個は直接アドレスです。つまり、ファイルの内容のうち最初の 12 個の論理記憶ブロックを直接指します。ファイルが論理ブロック 12 個分より大きい場合は、13 番目のアドレスは間接ブロックを指します。間接ブロックには、ファイルの内容ではなく直接ブロックのアドレスが入っています。14 番目のアドレスは、二重間接ブロックを指します。二重間接ブロックには、間接ブロックのアドレスが入っています。15 番目のアドレスは三重間接アドレス用です。次の図に、i ノードから始まるこのアドレスブロックチェーンを示します。

図 22–1 UFS ファイルシステムのアドレスチェーン

UFS の i ノードのアドレス配列と、対応するファイルの記憶ブロックへの間接ポインタおよび二重間接ポインタとの関係を示す図

データブロック

ファイルシステムに割り当てられた残りの領域には、データブロック (記憶ブロックともいう) が入っています。これらのデータブロックのサイズは、ファイルシステムの作成時に決定されます。デフォルトでは、データブロックは、2 つのサイズに割り当てられます。 8K バイトの論理ブロックサイズと 1K バイトのフラグメントサイズです。

通常ファイルの場合、データブロックにはファイルの内容が入っています。ディレクトリの場合、データブロックにはディレクトリ内のファイルの i ノード番号とファイル名を示すエントリが入っています。

空きブロック

現在、i ノード、間接アドレスブロック、または記憶ブロックとして使用されていないブロックには、シリンダグループマップ内で空きを示すマークが付けられます。また、このマップはフラグメントを追跡し、断片化によるディスクパフォーマンスの低下を防止します。

UFS ファイルシステムの内容の構造を理解しやすいように、次の図に、一般的な UFS システム内の一連のシリンダグループを示します。

図 22–2 一般的な UFS ファイルシステム

ブートブロック (シリンダグループ 0 にのみ存在する、8K バイト)、スーパーブロック、シリンダグループマップ、i ノード、記憶ブロックから構成される UFS シリンダグループの図