i ノードリストは、i ノード 2 から順番にチェックされます (i ノード 0 と i ノード 1 は予約されています)。各 i ノードの非整合性は、次の面からチェックされます。
形式とタイプ
リンク数
重複ブロック
不良ブロック番号
i ノードのサイズ
各 i ノードには、そのタイプと状態を記述するモードのワードが入っています。i ノードには、次の 6 つのタイプがあります。
割り当て済み
未割り当て
一部割り当て済み
ファイルシステムが作成されると、一定数の i ノードが確保されますが、必要になるまでは割り当てられません。割り当て済みの i ノードとは、ファイルを指す i ノードです。未割り当ての i ノードは、ファイルを指さないので空のはずです。一部割り当て済みの状態は、i ノードが正しくフォーマットされていないことを意味します。たとえば、ハードウェア障害が原因で i ノードに不良データが書き込まれると、i ノードは一部割り当て済みの状態になることがあります。fsck が実行できる唯一の修正動作は、その i ノードを消去することです。
各 i ノードには、そこにリンクされているディレクトリエントリ数が入っています。fsck プログラムは、ルートディレクトリから順番にディレクトリ構造全体を検査し、i ノードごとに実際のリンク数を計算して、各 i ノードのリンク数を検査します。
i ノードに格納されているリンク数が fsck によって判断された実際のリンク数と一致しない場合は、次の 3 つの状況が考えられます。
格納されたリンク数が 0 でなく、実際のリンク数が 0 の場合
この状況は、i ノードのディレクトリエントリが存在しない場合に発生することがあります。この場合、fsck は切り離されたファイルを lost+found ディレクトリに入れます。
格納されたリンク数が 0 でなく、実際のリンク数も 0 でないが、2 つのリンク数が等しくない場合
この状況は、ディレクトリエントリが追加または削除されたが、i ノードが更新されていない場合に発生することがあります。この場合、fsck は格納されたリンク数を実際のリンク数で置き換えます。
格納されたリンク数が 0 で実際のリンク数が 0 でない場合
この場合、fsck は i ノードのリンク数を実際のリンク数に変更します。
各 i ノードには、それが取得するすべてのブロックのリスト、またはリストを指すポインタ (間接ブロック) が入っています。間接ブロックは i ノードによって所有されるので、間接ブロックの整合性が失われると、それを所有する i ノードが直接影響を受けます。
fsck プログラムは、i ノードによって取得される各ブロック番号を、割り当て済みブロックのリストと比較します。別の i ノードがすでにブロック番号を取得していると、そのブロック番号は重複ブロックのリストに入れられます。それ以外の場合は、割り当て済みブロックのリストが更新され、ブロック番号が組み込まれます。
重複ブロックがあると、fsck は再び i ノードリストを調べて、各重複ブロックを取得するもう 1 つの i ノードを検索します (i ノード内に大量の重複ブロックが入っている場合は、ファイルシステムに間接ブロックが正しく書き込まれていない可能性があります)。どの i ノードにエラーがあるかを正確に判断することはできません。fsck プログラムは、保管する i ノードと消去する i ノードを選択するように促すプロンプトを表示します。
fsck プログラムは、i ノードが取得する各ブロック番号をチェックして、その値が最初のデータブロックよりも大きく、ファイルシステム内の最後のデータブロックより小さいかどうかを調べます。ブロック番号がこの範囲に含まれない場合は、不良ブロック番号と見なされます。
間接ブロックがファイルシステムに書き込まれていないことが原因で、i ノード内に不良ブロック番号が発生することがあります。fsck はその i ノードの消去を促すプロンプトを表示します。
各 i ノードには、参照するデータブロック数が入っています。実際のデータブロック数は、割り当て済みのデータブロック数と間接ブロック数の合計です。fsck はデータブロック数を計算し、そのブロック数を i ノードが取得するブロック数と比較します。i ノードに不正なブロック数が入っていると、fsck はその修正を促すプロンプトを表示します。
各 i ノードには、64 ビットのサイズフィールドが入っています。このフィールドは、i ノードに関連付けられたファイル内の文字数 (データバイト数) を示します。i ノードのサイズフィールドに整合性があるかどうかは、サイズフィールド内の文字数を使用して、i ノードに関連付けるべきブロック数を計算し、その結果を i ノードが取得する実際のブロック数と比較して概算でチェックされます。