このページの本文へ移動

富士通エレクトロニクス

Japan

 FATファイルシステムの概要 |  ブートセクタについて |  クラスタについて |  FATチェインについて |


eFILE(組込み用ファイルシステム)

ブートセクタについて

図2.にブートセクタの内容を示します。
ブートセクタは、ディスクの構成を示すBPB(BIOSパラメーターブロック)とOSをロード起動するためのブートプログラム領域があります。
ブートブログラム領域は、86系CPUコードが記録されているため、eFILEでは使用しません。

位置(バイト) サイズ 内容
0x00~0x02 3バイト ジャンプコード
0x03~0x0A 8バイト 名称
0x0B~0x0C 2バイト 1セクタ当たりのバイト数
0x0D 1バイト 1クラスタ当たりのセクタ数
0x0E~0x0F 2バイト 予約セクタ数
0x10 1バイト FAT数
0x11~0x12 2バイト ディレクトリエントリー数
0x13~0x14 2バイト 総セクタ数
0x15 1バイト メディアディスクリプタ
0x16~0x17 2バイト 1FAT当たりのセクタ数
0x18~0x19 2バイト 1トラック当たりのセクタ数
0x1A~0x1B 2バイト ヘッド数
0x1C~0x1F 4バイト 隠されたセクタ数
0x20~0x23 4バイト 大容量ディスクの総セクタ数
0x24 1バイト 物理ドライブ番号
0x25 1バイト 予約
0x26 1バイト 拡張ブートレコードシグネチャ
0x27~0x2A 4バイト ボリュームシリアル番号
0x2B~0x35 11バイト ボリュームラベル
0x36~0x3D 8バイト FATタイプ
0x3E~0xFD 448バイト ブートプログラム領域
0x1FE~0x1FF 2バイト ブートレコードシグネチャ
  1. ジャンプコード
  2. 名称
  3. 1セクタ当たりのバイト数
  4. 予約セクタ数
  5. FAT数
  6. ディレクトリエントリー数
  7. 総セクタ数
  8. メディアディスクリプタ
  9. 1FAT当たりのセクタ数
  10. 1トラック当たりのセクタ数
  11. ヘッド数
  12. 隠されたセクタ数
  13. 大容量ディスクの総セクタ数
  14. 物理ドライブ番号
  15. 予約
  16. 拡張ブートシグネチャ
  17. ボリュームシリアル番号
  18. ボリュームラベル
  19. FATタイプ
  20. ブートプログラム領域
  21. ブートシグネチャ

1. ジャンプコード

ブートセクタの先頭の3バイトはOSをロードするためのブートプログラムへのジャンプ命令が記録されます。
ジャンプコードは、86系CPUの命令コードで通常は、”EB”、”3E”、”90”が設定されています。
eFILEでは、このフィールドは使用していません。

2. 名称

このフィールドには、メーカー名や製品名などの文字列が記録されます。
eFILEでフォーマットした場合は、"EFILE"と記録されます。

3. 1セクタあたりのバイト数

このフィールドには、1セクタ当たりのバイト数が記録されます。
AT互換機では、512バイトのみが使用されています。
現在のPCはほとんどがAT互換機なのでWindowsも実質512バイト固定となっているのが現状です。
eFILEでは、512バイトのみ有効です。

4. 1クラスタあたりのセクタ数

このフィールドには、1クラスタ当たりのセクタ数が記録されます。
1,2,4,8,16,32,64のどれかの値が設定されています。
1クラスタは、複数のセクタで管理します。
この値が“4”であれば、4セクタ(2KB)を1クラスタとしてデータ領域を管理することになります。

5, 予約セクタ数

このフィールドには、ブートレコードで使用しているセクタ数が記録されます。
通常は、”1”が設定されています。

6. FAT数

このフィールドには、FATの数が記録されており、通常”2”が設定されています。
FATは2個持っているのが普通です。
RAMディスク等では容量がもったいないという理由からFATを1つしか持たないディスクも存在しましたが、SDカード、メモリスティック、ハードディスク等外部記憶装置では、FATは必ず2個記録されています。

7. ディレクトリエントリー数

このフィールドには、ルートディレクトリとして使われるディレクトリの数が記録されます。
ディレクトリエントリーは1エントリーで32バイト使用されます。
従って、1セクタには16個のディレクトリエントリーが記録できます。
ディレクトリエントリー数の最大は512個なので、ルートディレクトリには、最大で512個のファイルを作成できます。

8. 総セクタ数

このフィールドには、ディスクの全セクタ数が記録されます。
このフィールドは2バイトなので、最大65535セクタ(32MB)の容量まで扱うことができます。
32MBを超える容量のディスクを扱う場合は、(14)の大容量ディスクの総セクタ数に全セクタ数が記録されます。
その場合、このフィールドには0が設定されます。

9. メディアディスクリプタ

このフィールドには、通常”0xF8”が記録されます。
メディアがフロッピィディスクの場合は”0xF0”を設定しますが、その他のメディアでは、”0xF8”を設定するのが普通です。
メディアディスクリプタとFATの先頭にあるFATIDは、同じ値になっています。

10. 1FAT当たりのセクタ数

このフィールドには、1つのFATが使用しているセクタ数が記録されます。

11. 1トラック当たりのセクタ数

このフィールドには、ディスクの物理的な1トラックのセクタ数が記録されます。
論理セクタ番号から物理的なセクタ位置を計算する際に必要となる値です。
このフィールドは、MS-DOSのディスクドライバで使用されていましたが、Windowsでは使用していないようです。(Windowsでは、このフィールドに”0”を設定しても動作します)
Windowsのファイルシステムは、メディアがディスクの場合、論理セクタ番号から物理的なセクタ位置(シリンダ、ヘッド、セクタ位置)への変換は、ドライバで行うのが一般的となっているためと思われます。
また、SDカードやメモリスティック等では、そもそもトラックやヘッドが存在しないため意味がありません。
eFILEでも、ドライバへは論理セクタ番号を渡すため、このフィールドは使用していません。

12. ヘッド数

このフィールドには、ディスクの物理的なヘッドの数が記録されます。
これも(11)と同様に、論理セクタ番号から物理的なセクタ位置を計算する際に必要となる値です。
このフィールドも、MS-DOSのディスクドライバで使用されていましたが、Windowsでは使用していないようです。(Windowsでは、このフィールドに”0”を設定しても動作します)
eFILEでも、このフィールドは使用していません。

13. 隠されたセクタ数

このフィールドには、ブートセクタより前にあるセクタ数が記録されます。
ハードディスク等ではMBR(マスターブートレコード)を先頭のセクタに確保する場合があります。
その場合は、MBRで確保したセクタ数がこのフィールドに設定されます。
MBRにはパーティションの先頭セクタ番号が入っており、パーティションの位置はこの値で知ることができます。
このフィールドも、MS-DOSのディスクドライバで使用されていましたが、Windowsでは使用していないようです。(Windowsでは、このフィールドに”0”を設定しても動作します)
eFILEでも、このフィールドは使用していません。
また、eFILEではMBRが存在するデバイスに対しては、ドライバ側でパーティションの開始セクタ番号を取得し対処する必要があります。

14. 大容量ディスクの総セクタ数

このフィールドには、ディスクの容量が32MB以上のディスクの全セクタ数が記録されます。
32MB未満のディスクの全セクタ数は、(8)総セクタ数のフィールドに記録されます。

15. 物理ドライブ番号

このフィールドには、AT互換機用のブートセクタのブートプログラムが使用する物理的なドライブの番号が記録されます。
このフィールドも、Windowsでは使用していないようです。
eFILEでもこのフィールドは使用していません。

16. 予約

このフィールドには、常に”0x00”が記録されています。

17. 拡張ブートシグネチャ

このフィールドには、通常”0x29”が記録されており、この場合はこの後に(18)ボリュームシリアル番号、(19)ボリュームラベル、(20)FATタイプが存在します。
”0x00”が記録されている場合は、これらの情報は存在しないことを意味します。

18. ボリュームシリアル番号

このフィールドには、フォーマット時に付けられた4バイトの値が記録されています。

19. ボリュームラベル

このフィールドには、フォーマット時に付けられたボリュームラベルが記録されています。

20. FATタイプ

このフィールドには、FATを識別する文字列が記録されます。
FAT12の場合は、文字列で"FAT12"と記録され、FAT16の場合は"FAT16"と記録され、FAT32の場合は、"FAT32"と記録されます。

21. ブートプログラム領域

このフィールドには、86系CPUコードでブートプログラムが記録されます。
eFILEは、この領域は使用していません。

22. ブートシグネチャ

このフィールドには、必ず、”0x55”,”0xAA”が記録されます。
ブートセクタかどうか、このシグネチャをチェックして、一致していればBPB情報の解析を行います。