FS(5) — NEWS-OS Programmer’s Manual
名称
fs, inode − 4.3(ufs)ファイルシステムボリュームのフォーマット
形式
#include<sys/types.h>
#include<sys/fs.h>
#include<sys/inode.h>
解説
標準 4.3(ufs)ファイルシステムの記憶ボリュームでは、 特定の重要な情報についての共通のフォーマットを備えています。 こうしたボリュームは、それぞれ、一定数のブロックに分割されます。 ブロックサイズは、ファイルシステムのパラメタです。 セクター 0 から 15 は、 1次および 2次ブートストラッププログラムを収めるために使用されます。 実際のファイルシステムは、 super-block を備えたセクター 16 から始まります。 スーパーブロックのレイアウトは、 インクルードファイル <ufs/fs.h> に定義されています。 それぞれのディスクドライブには、 いくつかのファイルシステムから成り、 ファイルシステムは、 いくつかのシリンダグループから成ります。 各シリンダグループは、 複数の iノードおよびデータを備えています。 ファイルシステムは、そのスーパーブロックによって示され、 スーパーブロックはシリンダグループを示します。 スーパーブロックは重要なデータであり、 復旧不能な障害に備えて各シリンダグループ内で複製されています。 この複製作業はファイルシステムの作成時に行われ、 重要なスーパーブロックデータは変化しないため、 災害に見舞われない限り、 複製ファイルの参照を行う必要はありません。 iノードに格納されるアドレスは、‘blocks’ のフラグメントの位置を アドレスで指定することができます。 せいぜい MAXBSIZE 以内のサイズであるファイルシステムブロックは、 2 、4、あるいは 8個の部分に 分割することができます。 これらの部分は、 個々にアドレス指定が可能で、 DEV_BSIZE で示される値、 あるいは DEV_BSIZE の倍数の値をとります。 大きなファイルは、大きなデータブロックだけから構成されます。 ディスク空間を必要以上に消費することを避けるために、 小さなファイルの最後のデータブロックには、 大きなブロックのフラグメントが必要な分だけ割り当てられます。 ファイルシステムフォーマットは、 大きなブロックの分割された部分であるこうしたフラグメントに対して 1つのポインタだけしか保持しません。 こうしたフラグメントのサイズは、 ‘blksize(fs, ip, lbn)’ マクロを使用してその i ノード内の情報から 判断することができます。 ファイルシステムは、フラグメントレベルでの space avalability (空間の利用可能度)を記録します。 block avalability(ブロックの利用可能度)を決定するために、 整列(align)されたフラグメントが調べられます。 ルート iノードはファイルシステムのルートです。 iノード 0 は、通常の目的に使用することはできず、 履歴的に不良なブロックはノード 1 にリンクされます。 従って、ルート iノードは 2 になります (iノード 1 はもはやこうした用途には使用されていませんが、 数多くのダンプテープがこうした仮定を行っているため、 この仮定は、守った方がよいです)。 lost+found ディレクトリが newfs(8) によって最初に作成される時に、このディレクトリには利用可能な 次の iノードが提供されます。 fs_minfree フィールドは、空き状態にすることができるファイルシステムブロックの最小 許容パーセンテージを与えます。 空きブロックのリストがこのレベルを下回った場合には、 スーパーユーザ以外はブロックの割り当てを続けることができません。 空きブロックの予約が必要とみなされる場合には、 このフィールドは 0 に設定されます。 だし、ファイルシステムが 90% よりも高い状態で走行する場合には、 深刻な性能劣化が発生します。このため、 fs_minfree のデフォルト値は 10% です。 経験的に言って、90% のローディングにおいてブロック分割と 全体的なディスク利用率との間の最良の釣合がとれるのは、 ブロックを 4分割した場合です。 このため、デフォルト分割サイズはブロックサイズの 4分の1 になります。 シリンダグループ に関連したリミット:それぞれのシリンダは、 異なる回転位置におけるブロックの利用可能な割合に対しての情報を常に 持っているため、 シーケンシャルブロックは最少の回転待ち時間で取り出すことができます。 NRPOS は、区別される回転位置の数です。 一般的な 3600 rpm ドライブについては、 NRPOS が 8である場合、要約情報の分解能は 2ms になります。 fs_rotdelay は、同じシリンダ上において別のディスク転送を開始できるまでの 最小時間(ミリセカンド単位)を与えます。 この情報は、ファイル内のディスクブロックに関する回転の最適な レイアウトを決定する際に使用されます。 fs_rotdelay のデフォルト値は 2ms です。 それぞれのファイルシステムは、静的に割り当てられた一定数の iノードを 備えています。ディスク空間のそれぞれの NBPI バイトごとに、 iノードが 1つずつ割り当てられます。 iノードの割り当て方法は、極めて普通のものです。 MAXIPG は、シリンダグループ当りの iノード数を制限するものであり、 これが必要とされるのは、変数サイズ要素を 1つだけ(フリービット マップ)にすることによって、たんに構造体を簡略化するためです。 注意 : MAXIPG は、 INOPB(fs) の倍数でなければなりません。 MINBSIZE (最小ブロックサイズ)は、最小許容ブロックサイズです。 最小ブロックサイズを 4096 にした場合には、 2回の間接参照で 2の32乗の大きさのファイルを作成することができます。 最小ブロックサイズは、 1つのシリンダグループブロックを十分に収められる大きさでなければ なりません。従って、シリンダグループ構造体 (struct cg) に対する変更を行う場合には、 ブロックのサイズを最小ブロックサイズの範囲内にとどめる必要があります。 MAXCPG は、シリンダグループ構造体 (struct cg) 内の配列を必要な大きさにする 場合にだけ使用されます。 配列のサイズは、その構造体のサイズが最小ブロックサイズによって 示される範囲を超えない限りいくらでも大きくすることができます。 スーパーブロックのサイズは、 SBSIZE を超えてはいけません。 マウントされているファイルシステムへのパス名は fs_fsmnt 内に収められます。 MAXMNTLEN は、このパス名のためにスーパーブロック 内に割り当てられる空間の量を定義します。 ファイルシステム当りの要約情報の量に関する限度は、 MAXCSBUFS によって定義されています。 これは、現在、最大 2百万個のシリンダ数に対応するようにパラメータ化されています。
シリンダグループごとの情報は、最初のシリンダグループのデータブロックから、 割り当てブロック内に要約されます。 これらのブロックは、スーパーブロックの他に、 fs_csaddr ( fs_cssize サイズ)から読み込まれます。 注意 : fs_cs マクロを機能させるためには、sizeof (struct csum) は 2の累乗でなければなりません。 ファイルシステムのスーパーブロック: MAXBPC は、回転レイアウトテーブルのサイズを制限するものであり、 これは、スーパーブロックのサイズが SBSIZE (スーパーブロックサイズ)で あるという事実によって制約を受けます。 これらのテーブルのサイズは、ファイルシステムのブロックサイズに 反比例します。 セクタのサイズが 2の累乗でない場合には、 こうしたテーブルのサイズが増やされ、これによって、 1つの回転パターン( fs_cpc) 内に含まれるシリンダ数が増加します。 回転レイアウトテーブルのサイズは、 ファイルシステム構造体 (struct fs) 内に残っているバイト数から算出されます。 MAXBPG は、シリンダグループ当りのブロック数を制限するものであり、 これは、シリンダグループが最大でも 1ブロックであるという事実に よって制約を受けます。 フリーブロックテーブルのサイズは、シリンダグループ構造体 内のブロックサイズおよび残りのバイト数から算出されます。 iノード: iノードは、ファイルシステム内のすべてのファイル動作 の中心です。 各アクティブファイル、各カレントディレクトリ、各マウントファイル、 テキストファイル、ルートには、ユニークな iノードが割り当てられます。 iノードは、そのデバイスと i番号のペアによって "名前" が付けられます。 詳細については、インクルードファイル <ufs/inode.h> を参照してください。
関連事項
NEWS-OSRelease 4.1C