FATファイルシステムの構造


 FATファイルシステム構造の概要について説明します。

ディスクレイアウト

 ハードディスクなどは512バイトづつ読み書きがおこな えます。 これをセクタと呼びます。先頭セクタにはマスターブートレコード (MBR)と呼ばれる ディスク全体の情報が格納され ます。パーティションの開始位置、サイズなどが格納されます。
 パーティションとはハードディスクなどを分割して使用するときの分割の単位です。例えば2つのパーティションに分割した場合、最初のパーティションを 「C:」ドライブ、2番目のパーティションを「D:」ドライブとして使用できます。
 この1つのドライブ(パーティション)をフォーマットするときFATやNTFSでフォーマットすることができます。MBRのレイアウトについてはMBR レイアウトで説明しています。

パー ティ ショ ン分割の例
セ クタ0
パーティション1に関する情報
 開始セクタ: 20、セクタ数:100
MBR
パーティション2に関する情報
 開始セクタ:120、セクタ数:500
セクタ1
空き領域
19セクタ
セクタ20
パーティション1 100セクタ
セクタ120
パーティション2 500セクタ

パーティションレイアウト

 この分割された1つのパーティションを見ていきます。
 パーティションの先頭にはブートセクタ(BSR)があります。ブートセクタにはパーティションに関する情報が格納されます。フォーマット形式、 FATの位 置、FATのサイズ、FATの数、ルートディレクトリのエントリ数、データ部のサイズなどです。BSRの詳細なレイアウトについてはBSR レイアウトで説明しています。


パーティションレイアウト
BSR
空き領域
FAT1
FAT2
ルート ディレクト リ
データ部

 BSRとFATの間の空き領域がない場合もあります。
 FAT12/16はルートディレクトリの位置が固定でエントリ数(ファイルを作れる数)を変更することができません。FAT32ではルートディレ クトリがファイルの1つとしてデータ部に作られるのでエントリ数に制限はありません。

ディレクトリ

 FATの前にディ レクトリについて説明します。
 ディレクトリにはファイル名、作成した日付、更新した日付、属性、データのサイズ、データの先頭位置などが格納されます。8文字+拡張子3文字のファイ ル名では1レコード32バイトで1つのファイル情報を示します。
 ロングファイル名でもこの8文字+3文字ファイル名は必ず作られます。ロングファ イル名の場合はそのレコードの直前にUNICODEに変換されたファイル 名が格納されます。1レコードに26バイト、13文字格納することができます。ロングファイル名の長さの制限は255文字なので13文字を超える場合は複 数レコードを使用してロングファイル名を示します。
 ディレクトリ、ロングファイル名のエントリについてはそれぞれディ レクトリレイアウトロ ングファイル名レイアウトで説明しています。


FAT、データ部

 データ部分は複数のセクタをまとめた、クラスタという単 位で管理されます。クラスタのサイズはパーティションのサイズによって変わります。 Windows ではクラスタサイズが小さくなるよう(クラスタ数が多くなるよう)な傾向で決められているようです。SDカードの規格では16384バイトが1クラスタの サイズです。データはクラスタ単位で書込まれるので1バイトのデータを書込んだだけでも1クラスタ占有します。そのためクラスタサイズを小さくしたほうが ディスクの隙間が少なくて済むことになります。小さなファイルを沢山作るとクラスタ内の未使用部分も沢山できしまいます。ただしクラスタサイズを小さくす るとFATへのアクセスが頻繁に発生し全体のアクセス速度が遅くなるという欠点もあります。
 1つのファイルが複数クラスタにまたがっている場合に続きがどのクラスタにあるか、という情報をFATに持ちます。ディレクトリに先頭クラスタ番号が書 かれていてそのクラスタに対応したFATに次のクラスタ番号が書かれます。

クラスタ構造

 図の例では始めのデータがクラスタ2にありその続きがクラスタ4にあることを表しています。FATには次のクラスタ位置、終端であるかのマーク、未使用 クラスタ、壊れているクラスタのマークが格納されます。
 FAT12はこのFAT内のクラスタ番号を格納する領域が12bitです。FAT16は16ビット、FAT32は32ビットです。
 FATの詳細についてFAT レイアウトで説明します。