第3章
ディスクとOSへの論理的なアプローチ
ハード ドライブはハードウェアを単独で制御することはできず、操作を実行するには BIOS (基本入出力システム) と DOS (オペレーティング システム) という 2 つの主要なプログラムが必要です。ディスクのオペレーティング システムは、コンピューターのハードウェアやハード ドライブと直接やり取りすることはありませんが、その間に BIOS が必要です。そのため、BIOS はコンピューターで重要な役割を果たします。
BIOS
BIOS の主な役割は、コンピューターに接続されたハードウェアまたはデバイスと DOS の間に標準インターフェイスを提供することです。システム BIOS は、システムのハードウェアとその上で実行されるソフトウェア間の最下位レベルのインターフェイスです。ハードドライブへのアクセスを管理する上で、次のようないくつかの重要な機能を実行します。
- BIOS 割り込みルーチン
- ハードドライブの検出と設定
- ハードディスクインターフェースモードをサポート
さまざまなハードウェアおよびソフトウェア製品間の相互運用性を実現するために、システムの BIOS はハードウェアのニーズに合わせてカスタマイズされ、ソフトウェアがハードウェアにアクセスするための標準的な方法を提供します。これらは BIOS サービスと呼ばれ、多くのオペレーティング システムやアプリケーション プログラムで使用されます。ハード ドライブへの単一のインターフェイスを提供するため、アプリケーションは各タイプのハード ドライブと個別に通信する方法を知る必要がありません。
標準の IDE/ATA ハード ドライブは、さまざまな BIOS 設定を使用して BIOS で構成されます。最新の BIOS プログラムは、最新の IDE/ATA ドライブを検出し、これらの設定を決定し、自動的に構成できます。 BIOS は、マザーボード上のシステム チップセットとシステム I/O バスと連携して、ハード ドライブで使用できるインターフェイス モードの種類を制御します。
INT 13H インターフェースと INT 13H 拡張
BIOS への主なインターフェースはソフトウェア割り込み 13H です。これは一般に INT 13H と呼ばれ、INT は割り込みを表し、13H は 16 進数表記の数字 19 を表します。
この本のプログラミング段階では、プログラミングにおける割り込みの使用について詳しく学習し、説明します。 Int13H インターフェイスは、BIOS に渡すことができるさまざまなコマンドをサポートし、BIOS はそれらのコマンドをハード ドライブに渡します。割り込み 13H には、読み取り、書き込み、フォーマットなど、ディスク上で実行する必要があるほとんどのタスクが含まれます。
Int13H を使用したり操作したりするには、呼び出し元のプログラムがハード ディスクの特定のパラメーターを認識し、ディスクにアクセスするための正確なヘッド、シリンダー、およびセクターのアドレス指定をルーチンに提供する必要があります。
BIOS は、BIOS セットアップ プログラムで構成されたハード ドライブのジオメトリを使用します。 Int13H インターフェイスは、ディスク ジオメトリを指定するために 24 ビットを割り当てます。これは次のように分類されます。
- シリンダー番号は 10 ビット、合計で 1024 シリンダーです。
- ヘッド番号用に 8 ビット、つまり合計 256 個のヘッド。
- セクター番号用に 6 ビット、または合計 63 セクター。
したがって、ディスク上の最大セクター数は
= 1024 * 256 * 63
= 16515072
ここでわかるように、INT 13H インターフェイスは、セクターあたり 512 バイトで最大 16515072 セクターを含むドライブをサポートできます。したがって、最大ディスクサイズは、
= 16515072 * 512
= 8455716864 バイト
約 8,456 GB
したがって、INT 13H インターフェイスは約 8.456 GB (または 7.875 GiB) のディスク サイズをサポートできます。
現在、ほとんどのコンピューター ユーザーは 8 GB よりはるかに大きい容量のハード ドライブを使用しているため、INT 13H インターフェイスは現代のコンピューター システムでは役に立たなくなり、INT 13H 拡張と呼ばれる新しいインターフェイスに置き換えられました。ただし、INT 13H は、DOS やその他の古いオペレーティング システムでは、その他の互換性の目的で引き続き使用される場合があります。
Int 13H 拡張
INT 13H インターフェイスが設計されたとき、ハード ドライブに 8GB のストレージが搭載されるとは誰も予想していなかったというのは、実に興味深いことです。しかし、今日では、家庭用パソコンであっても、8GB のハード ドライブの容量ははるかに小さいと感じられます。
旧規格には重要な制限があります。24 ビットのアドレス情報を使用するため、セクターあたり 512 バイトで最大 16,515,072 セクターを含むドライブしか処理できず、最大容量は 8.456 GB (または 7.875 GiB) になります。
したがって、問題はアクセス パスを 24 ビットからさらに大きなものに拡張することでしたが、既存の INT13H BIOS インターフェイスを拡張することはできませんでした。これを行うと、多くの古いハードウェアとソフトウェアが動作しなくなるためです。そして実際には、多くの古いハードウェアとソフトウェアが開発で動作しない状態では、コンピューターの世界で尊敬される地位を獲得する望みはありません。
そのため、Int13H に代わる新しいインターフェイスが開発されました。これらのルーチンは Int13H 拡張と呼ばれます。この新しいインターフェイスは、アドレス指定に 24 ビットではなく 64 ビットを使用し、最大 9.4 * 10 21 バイト、つまり 9.4 兆ギガバイトのハード ドライブ サイズを可能にします。
この本のプログラミング セクションでは、INT 13H と INT 13H 拡張機能の両方の使用法を学習します。初期には、他にもさまざまなサイズ制限がありました。一般的な論理的および物理的な制限のいくつかを次に示します。
2.1 GBの制限
このサイズ制限は、シリンダ数を指定する CMOS RAM のフィールドに 12 ビットしか割り当てない一部の古い BIOS で見られました。したがって、この数は最大で 111111111111B (最大可能な 12 ビット バイナリ数) となり、これは 4095 に相当します。このように、16 ヘッドでアクセスできる最大ディスク サイズは次のようになります。
= 4095 * 16 * 63 * 512 バイト
= 2113413120 バイトにアクセスできます。
33.8 GBの制限
このハード ディスクのサイズの障壁は 1999 年の初めに認識されました。大容量ディスクは 16 ヘッド、63 セクター/トラック、16383 シリンダを報告します。多くの BIOS は、総容量を 16*63 で割って実際のシリンダ数を計算します。
33.8 GB を超えるディスクの場合、シリンダ数は 65535 を超えます。この特定のケースでは、Award BIOS の一部のバージョンは、シリンダ数が 65,535 を超えるドライブを処理できません。この場合、BIOS はクラッシュまたはハングします。ハード ディスク パラメータは通常 16 ヘッドと 63 セクターを使用するため、トラブルが発生する前の容量は約 33.8 GB (31.5 GiB) になります。
解決策としては、BIOS をアップグレードするか、ジャンパーを使用してディスクを小さく見せることです。
IDE ディスクの ATA 仕様 - 137 GB の制限
旧 ATA 仕様では、137 GB を超えるディスクへのアクセスは許可されていません。実際には、セクター番号を指定するために 28 ビットのみが使用されます。ただし、ATA-6 では、48 ビットのセクター番号による拡張が定義されています。
ディスクサイズの制限は、0から65535までカウントされる最大65536シリンダ、0から15までカウントされる16ヘッド、および1から255までカウントされるトラックあたり255セクターの組み合わせで生成され、ディスクの最大総容量である。
= 65535 * 16 * 255 セクター
= 267386880 セクター
= 136902082560 バイト (各セクター 512 バイト)
約137GB
2 ディスクおよび 4 ディスク BIOS IDE サポート
現在、最新の BIOS プログラムのほとんどはハードディスクの自動検出をサポートしており、BIOS は各ハードディスクを調べて、その論理ジオメトリ、サポートされている転送モード、およびその他の情報を判断できます。これは、BIOS に応じて、セットアップ時に実行することも、マシンが起動するたびに動的に実行することもできます。
システム BIOS は IDE/ATA ハード ディスクのネイティブ サポートを提供するため、システム内のハード ディスクとその制御方法を BIOS に伝えるために設定できるパラメーターが多数あります。システム内の各ハード ディスクには独自の設定があり、プライマリ マスター用に 1 つの設定、プライマリ スレーブ用に 1 つの設定などがあります。ただし、SCSI ハード ディスクは、ホスト アダプタと組み込みの SCSI BIOS を通じて構成されます。
8 GB を超えるサイズのハード ディスク ドライブは、従来の IDE/ATA BIOS ジオメトリ パラメータを使用して記述できないため、特に古いコンピュータ システムの場合、動的な自動検出が最新のドライブを設定する標準的な方法です。ただし、ユーザーは一部のドライブ パラメータを手動で設定することもできます。
以下は、IDE/ATA ハードディスクを構成するための BIOS セットアップ プログラムに通常含まれる設定です。ただし、最新のシステムでは、最も古い互換性設定の一部は存在しない可能性があります。
- ディスク タイプ:元々はユーザーが定義済みのリストからハード ディスクを選択できるようにするために使用されていましたが、現在はドライブの自動または手動のパラメータ設定を制御するために使用されています。
- サイズ:ハードディスク ドライブのサイズ (10 進メガバイト単位)。シリンダー、ヘッド、セクターなどの他のパラメータから計算されます。
- シリンダー:ディスク上の論理シリンダーの数。 ヘッド: ディスク上の論理ヘッドの数。
- セクター:ディスク上の各論理トラック内の、512 バイトの論理セクターの数。通常、最新のハード ディスク ドライブには、1 つのトラックに 63 のセクターがあります。
- 書き込み事前補正:非常に古いドライブに対してどのシリンダー番号で書き込み調整を行うかを指定する互換性設定です。
- ランディング ゾーン (パーキング ヘッド):ランディング ゾーンは、ドライブの電源がオフになったときに、データの損失や不良セクターの作成を防ぐために BIOS によってヘッドがパークされるシリンダーです。最近のハード ディスク ドライブはヘッドを自動的にパークするため、現在ではほとんど必要ありません。
- 変換モード: 504 MB を超えるハードディスクをサポートするために使用される BIOS 変換モード。
- ブロック モード:ブロック単位でディスク転送を実行する BIOS の機能を制御します。
- プログラム I/O (DMA) モード:ハード ディスクとの間の転送を実行するために使用されるプログラム I/O モードまたは DMA モード。
- 32 ビット転送モード:より高性能な 32 ビット データ転送の使用を制御します。
ファイルシステムの制限
各ファイル システムは、最大ボリューム サイズ、ファイル サイズ、およびボリュームあたりのファイル数をサポートします。
たとえば、一般的に FAT16 および FAT32 ボリュームはそれぞれ 4 GB と 32 GB (一般的に) に制限されています。FAT ファイル システムに関連する、知っておく必要のある制限がいくつかあります。以下に示します。
- FAT12: 16 MB 未満の FAT ボリュームは FAT12 としてフォーマットされます。これは最も古い FAT タイプで、12 ビットのバイナリを使用してクラスター番号を保持します。FAT12 を使用してフォーマットされたボリュームは、最大 4,086 クラスターを保持できます。これは、2 12 から FAT で使用されるいくつかの予約値を引いた値に相当します (この章の次のディスクの論理構造で詳しく説明します)。したがって、FAT12 は小さいボリュームに最適です。これは、約 16 MB 未満のフロッピー ディスクおよびハード ディスク パーティションで使用されます。
- FAT16: FAT16 は、16 ビットの 2 進数を使用してクラスター番号を保持します。FAT16 を使用するボリュームは、最大 65,526 個のクラスターを保持できます。これは、2 16 から FAT で使用されるいくつかの予約値を引いた値に相当します (この章の次のディスクの論理構造で詳しく説明します)。FAT16 は、サイズが 16 MB から 2,048 MB のハード ディスク ボリュームに使用されます。2 GB を超える FAT16 ボリュームは、MS-DOS、Windows 95/98/ME、および他の多くのオペレーティング システムを実行しているコンピューターからはアクセスできません。この制限は、これらのオペレーティング システムが 32 KB を超えるクラスター サイズをサポートしていないために発生し、2 GB の制限が生じます (この章の次のクラスター制限を参照してください)。
- FAT32:理論上、FAT32 ボリュームの最大サイズは 2048 GB (約 2 テラバイト) です。FAT32 は、Windows 95 の OEM SR2 リリースと Windows 98/ME でサポートされています。FAT32 は 28 ビットのバイナリ クラスター番号を使用します (32 ビットではなく、32 ビットのうち 4 ビットが「予約済み」であることに注意してください)。したがって、理論上、FAT32 は 2 億 6,800 万以上のクラスター (実際には 2 億 6,843 万 5,456 クラスター) を持つボリュームを処理でき、最大 2 TB のドライブをサポートします。ただし、これを行うには FAT のサイズが非常に大きくなります (この章の次のトピックでこれについて説明します)。
FAT タイプの比較を次の表に示します。
NTFS: NTFS は New Technology File System の略です。Windows 2000/XP で使用されます。理論上、NTFS パーティションの最大サイズは (2 64 – 1) クラスターです。
NTFS ファイル システムの詳細な説明はこの本の範囲を超えていますが、次の表にその制限の一部を示します。
説明
|
制限 |
最大ファイルサイズ
|
16 エクサバイト – 1 KB (2 64 バイト – 1 KB) |
最大ボリュームサイズ
|
(2 64 – 1)クラスター |
ボリュームあたりのファイル数(およびフォルダ数)
|
4,294,967,295 (2 32 – 1 ) フライとフォルダー |
クラスタ
ハードディスク上の割り当てスペースのうち、ソフトウェアがアクセスできる最小単位はセクターで、512 バイトで構成されます。ディスクの割り当てシステムでは、各ファイルに必要な数のセクターを割り当てることができます。たとえば、1 MB のファイルには、データを格納するために約 2,048 個のセクターが必要です。
FAT ファイル システムの場合、またはほとんどのファイル システムでは、個別のセクターは使用されません。これにはパフォーマンス上の理由がいくつかあります。DOS がハード ディスクに情報を書き込むとき、セクター単位でスペースを割り当てるのではなく、クラスターと呼ばれる新しいストレージ ユニットを使用します。
FAT は何年も前に設計されたシンプルなファイル システムであり、個々のセクターを管理することはできません。代わりに、FAT はセクターをクラスターまたは割り当て単位と呼ばれる大きなブロックにグループ化します。
クラスターは、ファイルに割り当てることができるディスク領域の最小単位です。クラスターが割り当て単位と呼ばれるのは、このためです。ファイルが 512 バイトの断片に分割されると、ディスクの管理が非常に難しくなる可能性があります。
個別に管理される 512 バイトのセクターを使用する 20 GB のディスク ボリュームには、4,100 万を超える個別のセクターが含まれるため、これだけ多くの情報を追跡するには時間とリソースを消費します。ただし、一部のオペレーティング システムではセクターごとにファイルにスペースを割り当てますが、これを適切に実行するには高度なインテリジェンスが必要です。
クラスターは、ディスクに情報を保存するときに DOS によって割り当てられる最小のスペースです。ディスクに 1 バイト長の情報だけを保存する場合でも、ディスク表面に最低 1 つのクラスター領域が必要です。
1 つのクラスターに 512 バイトの情報を格納できる場合、513 バイトを格納するには 2 つのクラスターが必要になります。すべてのファイルには、整数個のクラスターを割り当てる必要があります。つまり、ボリュームが 4,096 バイトを含むクラスターを使用する場合、610 バイトのファイルは 1 つのクラスターを使用するため、ディスク上で 4,096 バイトになりますが、4,097 バイトのファイルは 2 つのクラスターを使用するため、ディスク上で 8,192 バイトになります。
これが、ディスクの効率的な使用を最大限にするためにクラスター サイズが非常に重要である理由です。したがって、クラスター サイズが大きいほど、無駄なスペースが増えることがわかります。
次の図は、BINARY.C というファイルのプロパティを示しており、ディスク内でファイルが使用しているスペースの事実を明らかにしています。ファイルの実際のサイズは 610 バイトですが、1 つのクラスターは 4,096 バイトであるため、ファイルはディスク内の 1 つのクラスター (4,096 バイト) を使用します。
クラスターは 1 つ以上のセクターで構成できます。これは、使用されているディスクの種類によって異なります。クラスターは複数のセクターで構成できるため、割り当て単位としてクラスターを使用すると、使用済みおよび空のディスク領域の情報を保持するために DOS が使用するファイル割り当てテーブルのサイズが削減されます。
クラスター サイズは、主にディスク ボリュームのサイズによって決まります。厳密に言うと、一般的にボリュームが大きいほどクラスター サイズも大きくなります。ハード ディスク ボリュームの場合、各クラスターのサイズは 4 セクタ (2,048 バイト) から 64 セクタ (32,768 バイト) の範囲です。
フロッピー ディスクでは、はるかに小さいクラスターが使用され、場合によっては 1 セクターのみのサイズのクラスターが使用されます。クラスター内のセクターは連続しているため、各クラスターはディスク上の連続した領域のブロックになります。
クラスター サイズとパーティションまたはボリューム サイズは直接関連しているため、パフォーマンスとディスク使用率に重要な影響を及ぼします。クラスター サイズは、ディスク ボリュームがパーティション分割されるときに決定されます。
Partition Magic のようなユーティリティを使用すると、特定の条件の制限内で既存のパーティションのクラスター サイズを変更できますが、一般的なケースでは、パーティション サイズとクラスター サイズを選択すると、それが固定されます。
前に説明したように、シリンダー番号またはトラック番号は 0 から始まり、最初のセクター番号は常に 1 とみなされます。また、最初のクラスター番号は常に 2 とみなされることも覚えておく必要があります。
クラスターサイズ
クラスターは、データ領域のみのストレージ領域を割り当てるために使用されます。FAT およびディレクトリ領域は、クラスター サイズに従って割り当てられません。512 バイトのセクターを使用するディスクでは、512 バイトのクラスターには 1 つのセクターが含まれ、4 KB のクラスターには 8 つのセクターが含まれます。
次の表は、さまざまなディスク フォーマットに対して DOS が使用するデフォルトのクラスタ サイズを示しています。ただし、状況によってはクラスタのサイズがデフォルトのサイズと異なる場合があります。
フロッピー ディスク ドライブ (FDD) |
ドライブの種類 |
セクター/クラスター |
合計クラスター サイズ (バイト単位) (各セクター 512 バイト) |
5.25” 360Kb FDD |
2セクター |
1,024 |
5.25”1.2Mb FDD |
1セクター |
512 |
3.5” 720Kb FDD |
2セクター |
1,024 |
3.5”1.44Mb FDD |
1セクター |
512 |
3.5”2.88MB FDD |
2セクター |
1,024 |
FAT16、FAT32、および NTFS はそれぞれ、パーティションのサイズに応じて異なるクラスター サイズを使用し、各ファイル システムにはサポートできるクラスターの最大数があります。クラスター サイズが小さいほど、クラスター内の未使用領域は他のファイルによって使用できないため、ディスクはより効率的に情報を保存できます。
次の表は、FAT16、FAT32、および NTFS ファイル システム パーティションの既定のクラスター サイズを示しています。FAT 32 では、より効率的なストレージと大容量ハード ドライブの使用が可能になります。32 ビット FAT は、Windows 95 OSR-2 および Windows 98/ME とのみ互換性があります。FAT 16 は、MS-DOS、Windows 3.1、Windows 95、および Windows NT でサポートされています。Windows 2000/XP オペレーティング システムは、NTFS ファイル システムを使用します。
注:ここで 1 KiB は 1 バイナリ キロバイトとして表記されています。つまり、1 KiB は 1024 バイト、または 512 バイトの 2 つのセクターが 1 KiB に相当すると言えます。
FAT16 パーティションのサイズが大きくなるにつれて、ディスク領域の無駄も増えます。FAT32 を使用すると、クラスター サイズが小さくなり、効率的なストレージが実現します。FAT32 では、より大きなハード ディスクの使用と大幅に縮小されたクラスター サイズが実現しますが、FAT32 を使用する際には、数十ギガバイトの巨大なハード ディスクによって、新しいシステムでは FAT32 が不可欠になっているという重要なパフォーマンス上の考慮事項があります。むしろ、FAT16 と FAT32 のどちらを選択するかという現実的な選択肢はもはや存在しないと言っても過言ではありません。
FAT16 がサポートできる最大の 2,048 MB のパーティションを考えてみましょう。このパーティションを FAT16 で設定すると、65,526 個のクラスターを含むファイル アロケーション テーブルが作成され、各クラスターは 32 KiB のディスク領域を占有します。
クラスター サイズが大きいと、ディスク領域が大量に浪費されます。したがって、このパーティションでは FAT32 を使用することをお勧めします。これにより、クラスター サイズが 32 KiB から 4 KiB に削減されます。
実際、これによりディスクの空き容量が大幅に削減され、最大 30% 削減され、以前は無駄になっていた数百メガバイトのディスク領域が解放される可能性があります。通常、この状況ではこれが正しい方法です。ただし、別の側面もあります。クラスター サイズが削減されるのは、無料のことではありません。
各クラスターが小さくなるため、同じ量のディスクをカバーするにはクラスターの数を増やす必要があります。そのため、クラスターの数は 65,526 個ではなく、524,208 個になります。
さらに、FAT32 の FAT エントリは 32 ビット幅 (各エントリは 4 バイト) ですが、FAT16 のエントリは 16 ビット幅 (各エントリは 2 バイト) です。その結果、FAT のサイズは FAT32 の方が FAT16 よりも 16 倍大きくなります。次の表にまとめます。
2,048 MB ディスク ボリュームの FAT 16 および FAT 32 |
FATタイプ |
脂肪16 |
ファット32 |
クラスターサイズ |
32 KB |
4 KB |
FATエントリの数 |
65,526 |
524,208 |
FATのサイズ |
131052 バイト
(~ 128 KiB) |
2096832 バイト
(~ 2 MiB) |
FAT32 ボリュームのサイズを 2 GB から 8 GB に増やすと、FAT のサイズは約 2 MiB から 8 MiB に増えます。このことの重要性は、FAT32 ボリュームが FAT を保持するためにディスク上の数メガバイトのスペースを無駄にしなければならないという事実ではありません。これを行うだけで、FAT のサイズを縮小するよりもはるかに多くのスペースを節約できるからです。実際の問題は、FAT がボリューム内のすべてのファイルのすべてのクラスター ポインターを保持していることです。FAT のサイズが大幅に増加すると、システム速度に悪影響を与える可能性があります。
このため、ファイル アロケーション テーブルのサイズを適切なサイズに制限することが重要です。実際、ほとんどの場合、クラスタ サイズと FAT サイズのバランスを取ることが重要です。このことをよく表すのが、FAT32 自体が選択するクラスタ サイズです。
FAT32 は最大約 2 億 6,800 万のクラスターを処理できるため、4 KiB のクラスター サイズは概念的には 1 TiB (1,024 GiB) のディスク ボリュームをサポートできますが、その場合の問題は、エントリあたり 2 億 6,800 万バイト × 4 バイトであるため、FAT サイズが 1 GB を超えてしまうことです。
このため、FAT32 では、8 GiB までのボリュームに対して 4 KiB のクラスターのみを使用し、それより大きいクラスターは、前述の表のクラスター サイズに示されているように使用されます。FAT32 でサポートされるパーティションの最大サイズは、公式には 2,048 GiB (2 TiB) と宣言されています。
ハードディスクの論理構造
基本的に、ハードディスクの論理構造は次の 5 つの論理用語に分類できます。
- MBR (マスター ブート レコード)
- DBR (DOS ブート レコード)
- FAT (ファイルアロケーションテーブル)
- ルートディレクトリ
- データ領域
次の図は、ハードディスクの論理構造を形成するこれらの論理用語の概念的な配置を表しています。
ハードディスクの論理構造
マスター ブート レコード (MBR) またはマスター パーティション テーブル (MPT) と呼ばれるものには、ハード ディスク ドライブからアクティブな (または起動可能な) パーティションをロードして起動するための小さなプログラムが含まれています。マスター ブート レコードには、開始セクター、終了セクター、パーティションのサイズなど、ハード ディスク ドライブ上の 4 つのプライマリ パーティションすべてに関する情報が含まれています。
MBR は絶対セクター 0、つまりシリンダ 0、ヘッド 0、セクター 1 にあります。ディスクに複数のパーティションが存在する場合は、各拡張パーティション ボリュームの先頭に拡張マスター ブート レコードが存在します (次の図を参照)。
MBR は、DOS の FDISK.EXE コマンドを実行することによってハードディスク ドライブ上に作成されます。ただし、同じタスクを実行するソフトウェアは他にも多数あります。FDISK を使用すると、これらのパーティションのいずれかをアクティブまたは起動可能にすることができます。
これにより、システムの起動時にアクティブ パーティションのブート セクターが制御を受け取ることができます。フロッピーにはパーティションがないため、フロッピーには MBR がありません。
DOS では、パーティション名に大文字のアルファベット 1 文字を使用するため、DOS で許可されるすべてのタイプのパーティションの最大数は、ドライブ文字 C (C:) からドライブ文字 Z (Z:) まで、合計 24 です。したがって、物理ハード ディスク ドライブが複数存在する場合でも、すべてのドライブのパーティションの合計数は 24 を超えることはできません。
電源投入時セルフテスト (POST) の後、BIOS はハード ディスクから MBR (マスター ブート レコード) をメモリにロードして実行します。最初に MBR はハード ディスクのアクティブ パーティションをチェックし、次に DOS ブート レコード (DBR) をメモリにロードして、オペレーティング システム ブート コードに制御を移します。その後、オペレーティング システム ブート レコード コードがオペレーティング システムの残りの部分をメモリにロードします。
マスターブートレコードフォーマット
マスターブートレコードフォーマット
ハード ディスク ドライブを複数の論理ドライブにパーティション分割することができます。これらの論理ドライブには通常、DOS によって独自のドライブ文字が割り当てられます。アクティブ (または起動可能) パーティションとしてマークできるのは、一度に 1 つのパーティションだけです。
マスターブートレコードフォーマット
マスター ブート レコードには、マスター パーティション テーブル内のエントリが 4 つまでという制限があります。ただし、拡張マスター ブート レコードの場所は、ブート コードがないことを除けばメイン パーティション テーブルとまったく同じ形式である拡張パーティション テーブルを含むマスター ブート レコードを使用して取得できます。
拡張マスター ブート レコードでは、この 446 バイトの領域は通常ブート コード用に予約されており、空のままです。マスター ブート レコードの 512 バイトはすべて、表に示すように次のように分割されます。
オフセット |
説明 |
サイズ |
000H |
初期プログラム ローダー (IPL)、実行可能コード (コンピューターの最初の起動を提供します) |
446 バイト |
1BEH |
最初のパーティションエントリ(次の表を参照) |
16 バイト |
1CEH |
2番目のパーティションエントリ |
16 バイト |
1DEH |
3番目のパーティションエントリ |
16 バイト |
1EEH |
4番目のパーティションエントリ |
16 バイト |
1FEH |
実行可能マーカーまたはブート可能セクター署名またはマジックナンバー (AAH 55H) |
2 バイト |
合計 = 512 バイト |
すべての拡張パーティションは、拡張パーティション エントリによって予約されたスペース内に存在する必要があります。拡張パーティションのうち 2 つだけが使用されることになっています。1 つ目は通常のパーティションとして、2 つ目は存在する場合は別の拡張パーティションとして使用されます。したがって、1 つのマスター パーティション テーブルを使用して、その隣にある別の拡張マスター パーティション テーブルの場所を取得できます (存在する場合)。
パーティション テーブル エントリ形式
MBR 内の任意のパーティションのパーティション テーブル エントリの形式は、次の表に示されています。任意の MBR のすべてのパーティション エントリは、特定の意味を持つ次のバイトに分割できます。
ブート タイプ インジケータ バイト (1 バイト):このバイトが 00H の場合、パーティションがアクティブではないことを意味し、バイトが 80H の場合、パーティションがアクティブ パーティションまたはブート可能なパーティションであることを意味します。これら以外のバイトが存在することは予想されませんが、他のバイトが存在する場合は、パーティション テーブルの破損またはパーティション テーブルへのウイルス攻撃が原因である可能性があります。
パーティションの開始シリンダ - ヘッド - セクター番号 (3 バイト): ディスクの CHS (シリンダ、ヘッド、セクター) を計算する場合、物理 CHS は次のようにカウントされます。
- 物理セクターは 1 からカウントされます。
- 物理ヘッドは 0 からカウントされます。
- 物理シリンダーは0からカウントされます(詳細は前の章を参照)
- オフセット 01H のバイトは、パーティションの開始ヘッド番号を 16 進数で表します。
オフセット 02H のバイトの最下位 6 ビットはパーティションの開始セクター番号を構成し、残りの 2 ビット (最上位 2 ビット) とオフセット 03H の別のバイトの 8 ビット (10 ビット番号の残りの最下位 8 ビット) の組み合わせはパーティションの開始シリンダ番号を構成します。
オフセット |
意味 |
サイズ |
説明 |
00H |
ブートタイプインジケータバイト |
1 バイト |
バイトが00Hの場合、パーティションは非アクティブであり、バイトが80Hの場合、パーティションはアクティブ(または起動可能)です。 |
01H |
パーティションの先頭のヘッド番号 |
1 バイト |
16進数によるパーティションの開始ヘッド番号 |
02H |
パーティション開始のセクターとシリンダ番号 |
2 バイト |
最初のバイトの6ビットは開始セクター番号となり、残りの2ビット(2つの最上位ビット)と別のバイトの8ビット(10ビット番号の残りの8つの最下位ビット)の組み合わせはパーティションの開始シリンダ番号となります。 |
04時間 |
ファイルシステムインジケーターバイト |
1 バイト |
16 進数によるファイル システム インジケーター バイト (インジケーターについては次の表を参照してください) |
05H |
パーティションの終了のヘッド番号 |
1 バイト |
16進数によるパーティションの終了ヘッド番号 |
06時間 |
パーティションの終了のセクターとシリンダ番号 |
2 バイト |
最初のバイトの6ビットは終了セクター番号となり、残りの2ビット(2つの最上位ビット)と別のバイトの8ビット(10ビット番号の残りの8つの最下位ビット)の組み合わせはパーティションの終了シリンダ番号となります。 |
08時間 |
パーティション開始の相対セクタ番号 |
4 バイト |
MBR とパーティションの最初のセクター間のセクター数 |
0CH |
パーティションのセクター数 |
4 バイト |
パーティション内のセクター数 |
合計 = 16 バイト |
シリンダーとセクターのエンコーディングは、次に実行されるサンプル パーティション テーブル スタディの例で示されています。
ファイル システム インジケータ バイト (1 バイト):オフセット 04H のファイル システム インジケータ バイトは、そのパーティションのファイル システムを表します。さまざまなファイル システムのファイル システム インジケータ バイトをリストした表は、この章の次の部分にあります。
パーティションの終了シリンダ - ヘッド - セクター番号 (3 バイト):エンコーディングは、パーティションの開始シリンダ - ヘッド - セクター番号と同じです。
パーティションの先頭の相対セクター番号 (4 バイト): MBR とパーティション内の最初のセクター間のセクター数を 16 進数で表します。
パーティションのセクター数 (4 バイト):パーティション内のセクター数を 16 進数で表します。
シリンダ、ヘッド、セクター番号は BIOS に渡される番号であることを常に覚えておいてください。したがって、BIOS が変換 (LBA モードまたは INT 13H 拡張サポート) を使用している場合、値は物理的な CHS 値を表さない可能性があります。大容量ハード ドライブ (8.4 GB 以上) の場合、CHS 値は無効である可能性があります。これらの値は通常無視され、代わりに絶対セクター値が使用されます。
次の図は、FAT32 パーティションを持つディスクの MBR を示しています。図の末尾の 64 バイトの強調表示された領域は、MBR のマスター パーティション テーブルを表します。
開始および終了 CHS のエンコーディングは次のとおりです。
- オフセット 00H、80 (16 進数) は、パーティションがアクティブ パーティションであることを表します。
- オフセット 01H では、01 (16 進数) は開始ヘッド番号 = 1 を表します。
- オフセット 02H と 03H の 2 バイトの組み合わせは、次に示すエンコーディングに従ってパーティションの開始セクターとシリンダー番号を形成します。
FAT32 パーティションを持つディスクの MBR
したがって、パーティションの開始 CHS は 0-0-1 です。
同様に、パーティションの終了のヘッド番号は FE (16 進数) で、これは 254 です。パーティションの終了シリンダとセクター番号のエンコーディングは次の表に示されています。
したがって、パーティションの終了 CHS は 701-254-63 になります。
オフセット 04H のバイト 0B (16 進数) は、パーティションのファイル システム インジケーター バイトです。バイト 0B (H) は、パーティションが FAT32 ファイル システムを持っていることを表します。さまざまなファイル システムとそのファイル システム インジケーター バイトの表を次に示します。
ファイルシステムインジケーターバイト(16進数) |
パーティション/ファイルシステムの説明 |
00H |
未使用/空のパーティション テーブル エントリ
(これはディスク上の未使用領域を指定するために使用されるのではなく、未使用のパーティション テーブル エントリをマークすることに注意してください) |
01H |
DOS 12 ビット fat
(タイプ01Hは最大 15 MB のパーティション用) |
02H |
XENIX: ルートファイルシステム |
03H |
XENIX /usr ファイルシステム (廃止)
(XENIX は Unix V7 の古い部分です。Microsoft XENIX オペレーティング システムは 1980 年 8 月に発表されました。これは、Intel 8086、Zilog Z8000、Motorola M68000、および Digital Equipment PDP-11 用の Unix オペレーティング システムのポータブルかつ商用バージョンでした。Microsoft は 1983 年 4 月に XENIX 3.0 を導入しました。SCO は 1983 年に 8088/8086 用の最初の XENIX を出荷しました。) |
04時間 |
16 ビット FAT、DOS 3.0+ (パーティション サイズ < 32M)
(古い DOS バージョンには、このパーティションをハードディスクの最初の 32 MB に配置する必要があるというバグがありました) |
05H |
DOS 拡張( DOS 3.3+ 拡張ボリューム)
最大 8.4 GB のディスクをサポートします。このタイプ05Hでは、DOS/Windows は拡張 BIOS 呼び出しが使用可能であってもそれを使用しません。 |
06時間 |
16 ビット FAT、DOS Big、DOS 3.31+ (パーティション サイズ >= 32M)
(DOS および Windows 95/98 の場合、パーティションは最大 2 GB で、最大 65536 個のクラスターがあり、各クラスターは最大 32 KB です。Windows NT は、64 KB のクラスターを使用して最大 4 GB の FAT16 パーティションを作成できます。) |
07H |
OS/2 IFS (インストール可能なファイル システム) (HPFS はこのファイル システムの最もよく知られた例です。OS/2 は、インストールされている IFS の ID 7 のパーティションのみを参照します。これが、EXT2 IFS パケットに特別な「Linux パーティション フィルター」デバイス ドライバーが含まれており、OS/2 に Linux パーティションの ID が 07 であると思わせるためです)。 |
07H |
高度な Unix |
07H |
Windows NT NTFS |
07H |
QNX2.x (1988 年以前)
(パーティション タイプ 07H の実際のファイル システムについては、パーティション ブート レコードを調べる必要があります) |
08時間 |
OS/2 (v1.0 から v1.3 のみ) |
08時間 |
AIX ブート パーティション
[AIX (Advanced Interactive Executive) は IBM の Unix バージョンです] |
08時間 |
スプリットドライブ |
08時間 |
複数のドライブにまたがる DELL パーティション |
08時間 |
コモドールDOS |
08時間 |
QNX 1.x および 2.x
(QNX パーティションに応じて「qny」) |
09時間 |
AIX データ パーティション |
09時間 |
Coherent ファイル システム
[Coherent は、286-386-486 システム用の UNIX ライクなオペレーティング システムで、Bob Swartz 率いる Mark Williams Company が販売していました。ドキュメントが充実していることで有名でした。1980 年に導入され、1995 年 2 月 1 日に廃止されました。最後のバージョンは、286-386-486 用の V3.2 と、386-486 のみ用の V4.0 (1992 年 5 月、保護モードを使用) です。1 コピーあたり 99 ドルで販売され、40,000 コピーが販売されたと噂されています。Coherent パーティションはプライマリである必要があります。] |
09時間 |
QNX 1.x および 2.x ( QNX パーティションによると「qnz」) |
0aH |
OS/2 ブート マネージャ
(OS/2 は、Microsoft と IBM が MS-DOS の後継として設計したオペレーティング システムです) |
0aH |
一貫性のあるスワップパーティション |
0aH |
OPUS
(オープンパラレルユニシスサーバー) |
0bH |
WIN95 OSR2 32 ビット FAT
(OSR2 は Microsoft の「OEM Service Release 2」の略です。最大 2047 GB のパーティション用です。ほとんどの場合、Windows 95/98/ME は同じパーティション制限内で FAT-32 という同じファイル システムを持っています) |
0cH |
LBA マップされた WIN95 OSR2 32 ビット FAT ( 論理ブロックアドレス指定 - 割り込み 13H 拡張モード
を使用しているため、これは0BHの拡張 INT 13H に相当すると言えます。ほとんどの場合、Windows 95/98/ME は同じパーティション制限内で FAT-32 という同じファイル システムを持っています) |
0eH |
LBA マップ WIN95: DOS 16 ビット FATまたは論理ブロック アドレス可能 VFAT ( 06H
と同じですが、INT 13H の LBA モードを使用します) |
0fH |
LBA マップされた WIN95: 拡張パーティションまたは論理ブロック アドレス可能 VFAT
( 05Hと同じですが、INT 13H の LBA モードを使用します。Windows 95 では、06Hと05Hの拡張 INT13H として0EHと0FH を使用します。Windows NT は、Windows 95/98/ME の 4 つのタイプ0BH、0CH、0EH、および0FH を認識しません) |
10時間 |
OPUS
(オクタルプログラム更新システム) |
11時間 |
隠し DOS 12 ビット FATまたはOS/2 ブート マネージャー隠し 12 ビット FAT パーティションまたはOS/2 から見た DOS (OS/2 ブート マネージャーが DOS パーティションを起動すると、起動されたパーティションを除くすべてのプライマリ DOS パーティションが ID を変更して非表示になり、01H、04H、06H、07Hはそれぞれ11H、14H、16H、17Hになります。 |
12時間 |
Compaq 構成/診断パーティション
(Compaq が構成ユーティリティ パーティションとして使用します。これは、ユーティリティを起動する FAT 互換パーティションであり、MS-DOS のように LILO メニューに追加できます。) |
14時間 |
(隠し DOS 16 ビット FATまたはOS/2 ブート マネージャー隠し DOS 16 ビット FAT) <32M パーティション
(パーティション サイズは 32M 未満です。ID 14H は、Novell DOS 7.0 FDISK を使用して Linux ネイティブ パーティションを削除した結果です。) |
15時間 |
隠しDOS拡張 |
16時間 |
(隠し DOS 16 ビット FATまたはOS/2 ブート マネージャ 隠し 16 ビット FAT) >=32M パーティション |
17時間 |
OS/2 ブート マネージャーの隠し HPFS パーティションまたは隠し IFS (例: HPFS) |
17時間 |
隠し NTFS パーティション |
18時間 |
AST SmartSleep パーティションまたはAST 特殊 Windows スワップ ファイル (「ゼロ ボルト サスペンド」パーティション)
[AST Research, Inc. (創設者 Albert Wong、Safi Qureshey、Thomas Yuen の頭文字から命名)。Ascentia ラップトップには、サイズが 2MB+メモリ サイズの「ゼロ ボルト サスペンド パーティション」または「SmartSleep パーティション」があります。] |
ファイルシステムインジケーターバイト(16進数) |
パーティション/ファイルシステムの説明 |
19時間 |
Willowtech Photon COS
(コード 19H は Willow Schlanger によって Willowtech Photon COS として請求されています。) |
1bH |
隠し WIN95 OSR2 32 ビット FATまたは隠し Windows 95 FAT32 パーティション |
1cH |
LBA マップされた 隠し WIN95 OSR2 32 ビット FAT
(INT 13H 拡張の LBA モードを使用した隠し Windows95 FAT32 パーティションです) |
1eH |
LBA マップされた隠し WIN95 16 ビット FATまたは隠し LBA VFAT パーティション |
1FH |
LBA マップされた隠し WIN95 拡張または隠し拡張 LBA VFAT パーティション |
20時間 |
OFSI
(Willowsoft Overture ファイル システム) |
21時間 |
正式には予約済みとしてリストされています
(HP Volume Expansion、SpeedStor バリアント)。 |
21時間 |
FSO2
( Dave Poirier によるFSO2 (Oxygen File System)のクレーム) |
22時間 |
FSO2 拡張パーティション
(Dave Poirier が Oxygen 拡張パーティションを主張) |
23時間 |
公式に予約済みとしてリストされている |
24時間 |
NEC DOS 3.x |
26時間 |
公式に予約済みとしてリストされている |
31時間 |
公式に予約済みとしてリストされている |
32時間 |
NOS (ネットワーク オペレーティング システム)
( 32H は、オーストラリアのメルボルンにある Alien Internet Services が開発しているオペレーティング システム NOS で使用されています。ID 32H が選択された理由は、使用可能な ID が数少ないためというだけでなく、32k が元々 OS が対象としていた EEPROM のサイズでもあるためです。 |
33時間 |
公式に予約済みとしてリストされている |
34時間 |
公式に予約済みとしてリストされている |
35時間 |
OS/2 または eCS 上の JFS
[ 35Hは、OS/2 Warp Server for e-Business、OS/2 Convenience Pack (別名バージョン 4.5)、および eComStation (eCS、OS/2 Convenience Pack の OEM バージョン) によって、JFS (IBM AIX Journaling File System) の OS/2 実装に使用されます] |
36時間 |
公式に予約済みとしてリストされている |
38時間 |
THEOS v3.2 (2GB パーティション) |
39時間 |
プラン9パーティション
( Plan 9 は、ベル研究所で多くのアーキテクチャ向けに開発されたオペレーティング システムです。 元々Plan 9 は、ディスクの末尾の未割り当て部分を使用していました。 Plan 9 の第 3 版では、タイプ39Hのパーティションが使用され、パーティションの 2 番目のセクターのPlan 9パーティション テーブルで説明されているサブパーティションに分割されています。) |
39時間 |
THEOS v4 スパンドパーティション |
3aH |
THEOS v4 (4GB パーティション) |
3bH |
THEOS v4 拡張パーティション
( THEOSは、1983 年に Timothy Williams によって設立された PC 用のマルチユーザー マルチタスク オペレーティング システムです。) |
3cH |
PartitionMagic リカバリパーティション
( Partition MagicやDrive ImageなどのPowerQuest製品がディスクに変更を加えると、まずタイプ フラグが 3CH に変更され、オペレーティング システムが変更できないようになります。プロセスの最後に、最初の状態に戻ります。したがって、3CH タイプ フラグが表示されるのは、電源オフ、ユーザーの再起動など、プロセスが何らかの理由で中断された場合のみです。パーティション テーブル エディターまたはディスク編集プログラムを使用して手動で元に戻すと、ほとんどの場合は問題ありません。) |
3dH |
隠されたネットウェア |
40時間 |
Venix 80286
(PC 用の非常に古い Unix ライクなオペレーティング システムです。) |
41時間 |
Linux/MINIX (DR-DOS とディスクを共有)
(DR-DOS は Digital Research-Disk Operating System の略です。) |
41時間 |
パーソナルRISCブート |
41時間 |
PPC PReP (Power PC リファレンス プラットフォーム) ブート パーティション |
42時間 |
Linux スワップ (DR-DOS とのディスク共有) |
42時間 |
SFS (セキュア ファイル システム)
( SFSは、Peter Gutmann によって作成された、386 以上の PC 上の DOS 用の暗号化ファイル システム ドライバーです。) |
ファイルシステムインジケーターバイト(16進数) |
パーティション/ファイルシステムの説明 |
42時間 |
Windows 2000 ダイナミック拡張パーティション マーカー(タイプ 42H
のパーティション テーブル エントリが従来のパーティション テーブルに存在する場合、Windows 2000 は従来のパーティション テーブルを無視し、独自のパーティション テーブルと独自のパーティション スキーム (LDM または DDM) を使用します。純粋なダイナミック ディスク (ハードリンクされたパーティションを含まないディスク) には、ディスク全体を定義する 1 つのパーティション テーブル エントリ (タイプ42H)のみがあります。ダイナミック ディスクは、各ダイナミック ディスクの末尾にある 1 MB のプライベート領域にあるデータベースにボリューム構成を保存します。) |
43時間 |
Linux ネイティブ (DR-DOS とのディスク共有) |
44時間 |
GoBack パーティション
( GoBackは、ディスクに加えられた変更を記録し、以前の状態を表示したり、以前の状態に戻ったりできるユーティリティです。ディスク マネージャーのようにディスク I/O を引き継ぎ、ログを独自のパーティションに保存します。) |
45時間 |
Boot-US ブート マネージャー
( Boot-US (Ulrich Straub) ブート マネージャーは、MBR、別のプライマリ パーティション、またはディスケットにインストールできます。プライマリ パーティションにインストールされると、このパーティションの ID は45Hになります。このパーティションにはファイル システムは含まれず、ブート マネージャーのみが含まれ、1 つのシリンダー (8.4 GB 未満) を占有します。) |
45時間 |
直接 |
45時間 |
EUMEL/お知らせ |
46時間 |
EUMEL/お知らせ |
47時間 |
EUMEL/お知らせ |
48時間 |
EUMEL/Elan
( EUMEL は、後にErgos L3として知られるようになり、GMD の Jochen Liedtke がElanプログラミング言語を使用して開発したマルチユーザー マルチタスク システムです。ドイツの学校でコンピューター サイエンスの教育に使用されました。) |
4aH |
アダオス アクイラ |
4aH |
DOS 用のALFS/THIN 軽量ファイルシステム |
4cH |
オベロン分割 |
4dH |
QNX4.x |
4eH |
QNX4.x 2番目のパーティション |
4fH |
QNX4.x 3 番目のパーティション
( QNXは、386 以降に対応したPOSIX ( Portable Operating System Interface for Unix ) 認定のマイクロカーネル、分散型、フォールト トレラント オペレーティング システムであり、組み込みアプリケーションでの 386EX のサポートも含まれています。) |
4fH |
Oberon ブート/データ パーティション |
50時間 |
OnTrack ディスク マネージャー (旧バージョン)、読み取り専用パーティション(ディスク マネージャーは、 DOS で 504 MB を超える IDE ディスクを使用できるようにするOnTrackのプログラムです。1.3.14 より古い Linux カーネル バージョンは DM と共存しません。) |
50時間 |
Lynx RTOS (リアルタイム オペレーティング システム)
( Lynx RTOS を使用すると、SCSI ドライブと IDE ドライブの両方に最大 14 個の 2 GB のパーティションを配置でき、合計で最大 28 GB のファイル システム領域を確保できます。) |
50時間 |
ネイティブオベロン |
51H |
OnTrack ディスク マネージャー (DM6.0 Aux1) 、読み取り/書き込みパーティション |
51H |
ノベル |
52時間 |
CP/M |
52時間 |
Microport SysV/ATまたはMicroport System V/386 |
53時間 |
OnTrack ディスク マネージャー (DM6.0 Aux3)、書き込み専用パーティション |
54時間 |
OnTrack ディスク マネージャー 6.0 ダイナミック ドライブ オーバーレイ |
55時間 |
EZ-Drive パーティション
( EZ-Driveは、1992 年にMicroHouseによって開発された別のディスク マネージャーのようなプログラムです。現在はStorageSoftによって販売されています。) |
56時間 |
Golden Bow VFeature パーティション ボリューム。
(これもディスク マネージャーのようなユーティリティ ソフトウェアです。これは非標準の DOS ボリュームです。) |
56時間 |
DMをEZ-BIOSに変換 |
57時間 |
DrivePro
( DrivePro は1992 年にMicroHouseによって開発されました。現在はStorageSoftによって販売されています。) |
57時間 |
VNDI パーティション |
5ch |
Priam EDisk パーティション ボリューム
( Priam EDiskはディスク マネージャー タイプのユーティリティ ソフトウェアです。これは非標準の DOS ボリュームです。) |
61H |
SpeedStor
(ストレージディメンション SpeedStorパーティションボリューム。これは非標準の DOS ボリュームです。ディスク マネージャー タイプのユーティリティ ソフトウェアです。) |
63時間 |
Unix System V/386、386/ix、SCO、ISC Unix、UnixWare、Mach、MtXinu BSD 4.3 on Mach、GNU Hurd |
64時間 |
Novell NetWare 286、2.xx |
ファイルシステムインジケーターバイト(16進数) |
パーティション/ファイルシステムの説明 |
64時間 |
PC-ARMOUR で保護されたパーティション
( 64Hは、A. Solomon 博士によるPC-ARMOURディスク保護によって使用され、正しいパスワードが入力されるまでディスクにアクセスできないようにし、その後、0-0-1 が要求されたときに、実際のパーティション テーブルのコピーとともに CHS = 0-0-2 を示す INT 13H フックがメモリの先頭より上にロードされます)。 |
65時間 |
Novell NetWare 3.86、3.xx、または 4.xx
Novell Netware 3.0以降のバージョンでは、ドライブごとに 1 つのパーティションを使用します。これらのパーティション内に論理ボリュームを割り当てます。ボリュームは複数のドライブに分割できます。使用されるファイル システムはTurbo FATと呼ばれ、DOS FAT ファイル システムに非常に漠然と似ています。Novell Netware は、利用可能な主要なネットワーク オペレーティング システムでした。Netware 68またはS-Net (1983) は Motorola 68000 用、Netware 86はIntel 8086 または 8088 用でした。Netware 286 はIntel 80286 用で、さまざまなバージョンが存在し、後にNetware 2.2に統合されました。Netware 386 はIntel 386 用に C で書き直されたもので、後にNetware 3.x (3.0、3.1、3.10、3.11、3.12 など) バージョンに名前が変更されました。その後継のNetware 4.xxにはバージョン 4.00、 4.01、4.02、4.10、4.11。その後、イントラネットウェアが登場しました。 |
66時間 |
Novell Netware SMS パーティション
( SMSは Storage Management Services の略です。現在は使用されていません。) |
67H |
ノベル |
68時間 |
ノベル |
69時間 |
Novell Netware 5+およびNovell Netware NSS パーティション
( NSS はNovell Storage Services の略です。) |
70時間 |
DiskSecure マルチブート |
71H |
正式に予約済みとして登録 |
73H |
正式に予約済みとして登録 |
74時間 |
正式に予約済みとして登録 |
74時間 |
Scramdisk パーティション
( Scramdiskはディスク暗号化ソフトウェアです。コンテナ ファイル、専用パーティション タイプ74H、WAV オーディオ ファイルに隠されたディスクをサポートします。) |
75時間 |
IBM PC/IX |
76時間 |
正式に予約済みとして登録 |
77H |
M2FS/M2CS パーティション |
77H |
QNX 4.x |
78時間 |
XOSL ファイル システム
( XOSLブート ローダー ファイル システム) |
78時間 |
QNY4.x について |
79H |
4.x の |
7EH |
修理 |
7Fh |
Alt-OS 開発パーティション標準 |
80時間 |
古い MINIX、MINIX v1.1 から v1.4a |
81H |
MINIX 1.4b 以降
( MINIXは、1989 年から 1991 年頃にアムステルダム自由大学の Andy Tanenbaum と学生によって書かれた Unix ライクなオペレーティング システムです。PC (8086 以上)、Macintosh、Atari、Amiga、Sparc で動作します。 |
81H |
初期のLinux |
81H |
Mitac アドバンスド ディスク マネージャー |
82時間 |
プライム |
82時間 |
Solaris x86
( Solaris はID 82Hの単一のパーティションを作成し、パーティション内で Sun ディスク ラベルを使用してさらに分割します。) |
82時間 |
Linux スワップパーティション |
83H |
Linux ネイティブ パーティション、Linux ネイティブ ファイル システム、またはLinux Ext2fs
(Linux は、1991 年以降 Linus Torvalds 氏とインターネット上の多くの人々によって作成された Unix ライクなオペレーティング システムです。PC 386 以降およびさまざまな他のハードウェアで動作します。GPL (General Public License) に基づいて配布されています。xiafs、ext2、ext3、reiserfs などのさまざまなファイル システム タイプはすべて ID 83Hを使用します。) |
84時間 |
OS/2 隠し C: ドライブまたはOS/2 再番号付けタイプ 04 パーティション。
( OS/2 再番号付けタイプ 04h パーティションは DOS C: ドライブの非表示に関連します) |
84時間 |
休止状態パーティション
(MKS2D ユーティリティを使用する Dell Latitude (Dell BIOS 搭載) など、さまざまなラップトップ モデルで報告されています。) |
85時間 |
Linux 拡張パーティション |
86H |
古い Linux RAID パーティション スーパー ブロック |
86H |
FAT16 ボリューム/ストライプ セット (Windows NT)またはNTFS ボリューム セット
(レガシー フォールト トレラント FAT16 ボリュームです。) |
87H |
HPFS フォールト トレラント ミラー パーティションまたはNTFS ボリューム セットまたはNTFS ボリューム/ストライプ セット
(レガシー フォールト トレラント NTFS ボリューム。HPFS フォールト トレラント ミラー パーティション。) |
8aH |
Linux カーネル パーティション
(AiR-BOOT によって使用されます) |
ファイルシステムインジケーターバイト(16進数) |
パーティション/ファイルシステムの説明 |
8bH |
レガシーフォールトトレラントFAT32ボリューム |
8cH |
BIOS 拡張 INT 13H を使用するレガシー フォールト トレラント FAT32 ボリューム。 |
8dH |
Free FDISK は、プライマリ DOS FAT12 パーティションを非表示にします
( Free FDISK は、 FreeDOSで使用される FDISK です。10進数140 (8CH)を追加することで、タイプ01H、04H、05H、06H、0BH、0CH、0EH、および0FHを非表示にします。) |
8eH |
Linux 論理ボリューム マネージャー パーティション |
90時間 |
FDISK の隠しプライマリ DOS FAT16 パーティションを解放する |
91H |
無料のFDISK隠しDOS拡張パーティション |
92時間 |
空き FDISK 隠しプライマリ DOS 大容量 FAT16 パーティション |
93H |
隠されたLinuxネイティブパーティション |
93H |
アメーバファイルシステム |
94時間 |
Amoeba 不良ブロック テーブル
(Amoeba は、1981 年以来 Andy Tanenbaum が Frans Kaashoek、Sape Mullender、Robert van Renesse らと共同で作成した分散オペレーティング システムです。PC (386 以上)、Sun3、Sparc、68030 で動作します。大学では研究および教育の目的で無料で使用できます。) |
95時間 |
MIT EXOPC ネイティブ パーティション |
97H |
FDISK の隠しプライマリ DOS FAT32 パーティションを解放する |
98時間 |
FDISK の隠しプライマリ DOS FAT32 パーティション (LBA) を解放する |
99時間 |
Mylex EISA SCSIまたはDCE376 論理ドライブ (ドライブの 1024 シリンダーを超えるパーティション用にMylex DCE376 EISA SCSI アダプター
によって使用されます。) |
9aH |
FDISK の隠しプライマリ DOS FAT16 パーティション (LBA) を解放する |
9bH |
FDISK 隠し DOS 拡張パーティション (LBA) を解放する |
9fH |
BSD/OS |
0H |
Phoenix NoteBIOS 電源管理「ディスクに保存」パーティションまたはラップトップの休止状態パーティション
( IBM Thinkpad、Phoenix NoteBIOS、Toshibaなどのさまざまなラップトップでは、ゼロボルト サスペンドパーティション、ディスクへのサスペンドパーティション、ディスクへの保存パーティション、電源管理パーティション、休止状態パーティションなどの名前で報告されており、通常はディスク領域の先頭または末尾にあります。) |
1H |
ラップトップの休止状態パーティション
(NEC 6000H ノートブックの「ディスクに保存」パーティションとして使用されます。タイプA0HおよびA1HはPhoenix BIOSを搭載したシステムで使用されます。これらではPhoenix PHDISKユーティリティが使用されます。) |
1H |
HP ボリューム拡張 (SpeedStor バリアント) |
a3H |
公式に予約済みとしてリストされている |
4H |
公式に予約済みとしてリストされている |
a5H |
BSD/386、386BSD、NetBSD、FreeBSD
(386BSD は Unix ライクなオペレーティング システムで、1991 年頃に Bill Jolitz によって 4.3BSD Net/2 が PC に移植されました。) |
a6H |
OpenBSD
(Theo de Raadt が率いる OpenBSD は NetBSD から分離しました。セキュリティを重視しています。) |
a7H |
NEXTSTEP
( NEXTSTEPはMach 2.6とMach 3.0の機能に基づいています。真のオブジェクト指向のオペレーティング システムおよびユーザー環境です。 |
a8H |
Mac OS-X
( Apple の OS-X はファイルシステムパーティションにこのタイプを使用します) |
a9H |
ネットBSD |
ああ |
Olivetti Fat 12 1.44MB サービス パーティション (DOS 6.22 と、パーティション テーブル内のタイプ06HとAAH
を交換するユーティリティが含まれています。) |
アブH |
Mac OS-X ブート パーティション
(Apple の OS-X (Darwin Intel) は、ブート パーティションにこのタイプを使用します。) |
アブH |
GO! パーティション |
死んだ |
ShagOS ファイルシステム |
Hより |
ShagOS スワップ パーティション |
ボH |
BootStar ダミー
(ブート マネージャー BootStar は、最大 15 個のプライマリ パーティションを持つ独自のパーティション テーブルを管理します。MBR 内の未使用のエントリを BootStar ダミー値で埋めます。) |
b1H |
公式に予約済みとしてリストされている |
b3H |
公式に予約済みとしてリストされている |
b4H |
公式に予約済みとしてリストされている |
b6H |
公式に予約済みとしてリストされている |
B6H |
Windows NT ミラー セット (マスター)、FAT16 ファイル システム |
b7H |
BSDI ファイルシステム (二次スワップ)、BSDI BSD/386 ファイルシステム |
B7H |
Windows NT ミラー セット (マスター)、NTFS ファイル システム |
ファイルシステムインジケーターバイト(16進数) |
パーティション/ファイルシステムの説明 |
8H |
BSDI BSD/386 スワップ パーティション (二次ファイル システム)
(BSDI (Berkeley Software Design, Inc.) は、CSRG (UCB Computer Systems Research Group) の元メンバーによって設立されました。Net/2 をベースにした同社のオペレーティング システムは、BSD/386 と呼ばれていました。) |
bbH |
ブートウィザードが非表示 |
良い |
Solaris 8 ブートパーティション |
0H |
DR-DOS/Novell DOS セキュア パーティション |
CONH |
CTOS |
0H |
REAL/32 セキュア スモール パーティション |
0H |
NTFT パーティション |
c1H |
DR DOS 6.0 LOGIN.EXE で保護された 12 ビット FAT パーティション |
c2H |
DR-DOS 7+ 用に予約済み |
c2H |
隠されたLinux |
c3H |
隠された Linux スワップ |
4H ... |
DR DOS 6.0 LOGIN.EXE で保護された 16 ビット FAT パーティション |
c5H |
DRDOS/セキュア(拡張) |
c6H |
DRDOS/secured (FAT-16、>= 32M)
( DR-DOS 6.0 は、 LOGIN.EXE で保護されたパーティションのパーティション タイプにC0Hを追加し、ユーザーが MS-DOS フロッピーから起動してパスワード チェックを回避できないようにします。それ以外の場合は、タイプC1H、C4H、C5H、C6HおよびD1H、D4H、D5H、D6Hが1H、4H 、 5H 、および6Hとまったく同じように使用されるようです。) |
c6H |
破損した FAT16 ボリューム/ストライプ セット (Windows NT) (NTFS は、フォールト トレラント セットの無効な部分のパーティション タイプにC0H
を追加します。したがって、タイプはC6H、C7Hになります。) |
c7H |
Windows NT の破損した NTFS ボリューム/ストライプ セット |
c7H |
シリンクスブーツ |
c8H |
公式に予約済みとしてリストされている |
c9H |
公式に予約済みとしてリストされている |
caH |
公式に予約済みとしてリストされている |
cbH |
DR-DOS で保護された FAT32 用に予約済み |
ccH |
DR-DOS で保護された FAT32 (LBA) 用に予約済み |
cdH |
CTOS メモリダンプ |
ceH |
DR-DOS で保護された FAT16 (LBA) 用に予約済み |
d0H |
REAL/32 セキュア ビッグ パーティション
(REAL/32 は DR マルチユーザー DOS の継続です。) |
d1H |
古いマルチユーザー DOS セキュア FAT12 |
d4H |
古いマルチユーザー DOS で保護された FAT16 <32M |
d5H |
古いマルチユーザー DOS のセキュリティ保護された拡張パーティション |
d6H |
古いマルチユーザー DOS で保護された FAT16 >=32M |
d8H |
CP/M-86 |
すでに |
非FSデータ |
デシベルH |
デジタルリサーチ CP/M、コンカレント CP/M、コンカレント DOS |
デシベルH |
CTOS (コンバージェント テクノロジー OS -Unisys) |
デシベルH |
KDG テレメトリ SCPU ブート
(KDG テレメトリは、 ID DBHを使用して、DT800 シリーズの x86 ベースの SCPU (Supervisory CPU) モジュールで実行されるコードの保護モード バイナリ イメージを保存します。) |
ddH |
隠し CTOS メモリダンプ |
デH |
Dell PowerEdge サーバー ユーティリティ (FAT) |
dfH |
DG/UX 仮想ディスク マネージャー パーティション |
dfH |
BootIt EMBRM
(ブート マネージャーBootIt は、最大 255 個のプライマリ パーティションを持つ独自のパーティション テーブルを管理します。) |
え0H |
ST MicroelectronicsによってST AVFS と呼ばれるファイル システム用に予約されています。 |
1H |
DOS アクセスまたは SpeedStor 12 ビット FAT 拡張パーティション
(1023 を超えるシリンダー上の SSTOR パーティションです。) |
E2H |
DOS 読み取り専用 |
3H |
保管寸法 |
電子4H |
SpeedStor 16 ビット FAT 拡張パーティション < 1024 シリンダ |
5H |
公式に予約済みとしてリストされている |
5H |
論理セクタ化された FAT を備えた Tandy DOS |
6H |
公式に予約済みとしてリストされている |
ebH |
BeOS BFS (BFS1)
( BeOSは Power PC 上で動作するオペレーティング システムです) |
エドH |
マティアス・ポールのSprytix用に予約 |
おい |
このレガシーMBRの後にEFIヘッダーが続くことを示す |
もしH |
EFI ファイルシステムを含むパーティション |
0H |
Linux/PA-RISC ブートローダー |
1H |
保管寸法 |
2H |
DOS 3.3+ セカンダリ パーティション |
2H |
論理セクタ化された FAT を備えた Unisys DOS |
3H |
公式に予約済みとしてリストされている |
4H |
SpeedStor 大型パーティション |
F4H |
プロローグ単一ボリュームパーティション |
ファイルシステムインジケーターバイト(16進数) |
パーティション/ファイルシステムの説明 |
f5H |
プロローグ マルチボリューム パーティション
(タイプF4Hパーティションには 1 つのボリュームが含まれており、現在は使用されていません。タイプF5Hパーティションには、MD0からMD9と呼ばれる 1 から 10 のボリュームが含まれています。1 つ以上のシステムをサポートします。各ボリュームには、NGFファイル システムまたはTwinFSファイル システムをファイル システムとして使用できます。) |
6H |
公式に予約済みとしてリストされている |
F6H |
ストレージ寸法 SpeedStor |
ファH |
MandrakeSoft のBochs x86 エミュレータ |
翻訳 |
VMware ファイル システム パーティション |
fcH |
VMware スワップ パーティション
(VMware は、Linux、Windows、FreeBSD を実行できる仮想マシンを提供しています。) |
フッド |
永続的なスーパーブロックを使用した自動検出機能を備えたLinux RAID パーティション |
フェH |
SpeedStor 1024シリンダー以上 |
フェH |
LANステップ |
フェH |
IBM PS/2 IML (Initial Microcode Load) パーティション
(ディスクの最後にあります。) |
フェH |
Windows NT ディスク アドミニストレータの隠しパーティション
(Windows NT ディスク アドミニストレータは、隠しパーティション (つまり、存在するがアクセスできないパーティション) をタイプFEHとしてマークします。) |
フェH |
Linux 論理ボリューム マネージャー パーティション (古い) |
ffH |
XENIX 不良ブロックテーブル |
DOS ブートレコード (DBR) / DOS ブートセクター
パーティションテーブルの次に、DOSブートレコード(DBR)またはDOSブートセクタと呼ばれることもある情報は、ハードドライブ上で2番目に重要な情報です。ほとんどの市販のディスクリカバリアプリケーションは、破壊されたブートレコードを再生することができます。
ハード ディスクの最初のパーティションの DOS ブート レコード (DBR) は、通常、絶対セクター 63 (ディスク ドライブの 64 番目のセクター) にあります。または、CHS 形式では、ほとんどのドライブで C–H–S = 0–1–1 になります。
ただし、この場所はドライブの SPT (トラックあたりのセクター数) によって異なる場合があります。たとえば、31 SPT しかない古い 245MB ドライブでは、ブート レコードは 32 番目のセクター (絶対セクター 31) に配置されていました。
DBR は、DOS の FORMAT コマンドによって作成されます。このプログラムは、DOS フロッピー ディスクから (または、一部の OS 制限に従って別のボリュームから直接) 実行して、FDISK コマンドを使用してパーティション分割を行った後に DBR を作成できます。
DBR が存在するセクターは、DOS の特定のパーティションの論理セクター 1 になります。DOS で使用されるセクター番号は、DBR が配置されている物理セクターから始まります。
各 DOS パーティションの最初の論理セクターには、DOS ブート レコード (DBR) または DOS ブート セクターが含まれます。DBR の役割は、オペレーティング システムをハード ディスク ドライブからコンピューターのメイン メモリにロードし、ロードされたプログラムにシステム制御を与えることです。
これを実現するために、DBR にはマスター ブート レコード (MBR) 実行可能プログラムによって実行される小さなプログラムが含まれています。すべての DOS パーティションには、マシンを起動する (つまりオペレーティング システムをロードする) プログラム コードが含まれていますが、パーティション テーブル エントリでアクティブ パーティションとして指定されているマスター ブート レコードによって制御されるのは、そのパーティションだけです。
DBR のブート プログラムは、パーティションのルート ディレクトリで、IBMBIO.COM または IO.SYS と IBMDOS.COM または MSDOS.SYS の 2 つのプログラム ファイルを検索します。IBMBIO.COM と IBMDOS.COM は、PC-DOS システムまたはオリジナルの IBM システム上の 2 つの隠しシステム プログラム ファイルです。一方、IO.SYS と MSDOS.SYS は、IBM 互換システムに付属する MS-DOS オペレーティング システム上の 2 つの隠しシステム プログラム ファイルです。
その後、IO.SYS (または IBMBIO.COM) プログラムは、MSDOS.SYS (または IBMDOS.COM) プログラムと COMMAND.COM プログラムをロードします。このプロセス全体をコンピュータの「ブート」と呼びます。これらのシステム ファイルがディレクトリ内に存在しない場合、この MBR プログラムは次のようなエラー メッセージを表示します。
「無効なシステムディスクまたはディスクI/Oエラーです。
ディスクを交換して、任意のキーを押してください…」
画面上で、ユーザーが上記のプログラムが入った起動ディスクをフロッピー ドライブに挿入し、キーを押すのを待ちます。
フロッピーにはパーティションがないため、絶対セクター 0 には MBR (マスター パーティション テーブル) がなく、代わりに最初のセクターに DBR が含まれています。
次の表は、FAT12 ファイル システムでフォーマットされた後の 3½ インチ、1.44 MB フロッピー ディスクのレイアウトの簡単なマップを示しています。ブート レコード、FAT の両方のコピー、ルート ディレクトリ、およびデータ領域の先頭が配置されている場所を示しています。
3½ インチ、1.44 MB フロッピー ディスクの論理マップ。FAT12ファイル システムでフォーマットされ、トラックあたり 18 セクター、80 トラック、2 面、セクターあたり 512 バイト (クラスターあたり 1 セクターを使用) です。 |
絶対セクター |
コンテンツ |
0 |
ブートレコード |
1 – 9 |
脂肪1 |
10 – 18 |
脂肪2 |
19 – 32 |
ルートディレクトリ |
33 – 2879 |
データ領域 |
データ領域にサブディレクトリを作成し、その中にファイルが含まれているように見せることもできます。実際、サブディレクトリは、このディレクトリ内に含まれているすべてのファイルと、各ファイルの開始クラスターの場所、日付、時刻、ファイル サイズなど、各ファイルに関するすべての関連データを一覧表示する特別なファイルにすぎません。
DBR には、ディスク ジオメトリに関する重要な情報も含まれています。この情報は、各パーティションの最初のセクターに次のように保存されています。
- ジャンプコード + NOP
- OEM 名とバージョン
- セクターあたりのバイト数
- クラスターあたりのセクター数
- 予約セクター
- FATのコピー数
- ルート ディレクトリ エントリの最大数 (ただし FAT32 では利用できません)
- パーティション内のセクター数が 32 MB 未満 (したがって FAT32 では使用できません)
- メディア記述子 (ハードディスクの場合は F8h)
- FAT あたりのセクター数 (古い FAT システムで、FAT32 では利用できません)
- トラックあたりのセクター数
- ヘッドの数
- パーティション内の隠しセクターの数
- パーティション内のセクター数
- FAT あたりのセクター数
- FAT 情報記述子フラグ
- FAT32ドライブのバージョン
- ルートディレクトリの開始クラスタ番号
- ファイルシステム情報セクターのセクター番号
- バックアップブートセクターのセクター番号
- 予約済み
- パーティションの論理ドライブ番号
- 拡張署名 (29H)
- パーティションのシリアル番号
- パーティションのボリューム名
- FAT名
- 実行可能コード
- 実行可能マーカーまたはマジックナンバー (AAH 55H)
DBR の最初の 3 バイトには、情報をスキップして拡張を可能にする JMP 命令が含まれています。これは、MBR がこのセクターをメモリにロードし、実行をそこに転送するためです。通常、これらの 3 バイトは、E9 XX XX (Hex)やEB XX 90 (Hex) のような形式の 16 進数です。
最初の JMP 命令の後に続く OEM ID は、Microsoft が OEM 識別用に予約している 8 ビット フィールドです。OEM ID は、ブート レコードを作成したプログラムを表します。これは通常、Windows 95/98/ME の場合は「MSWIN4.0」 、 OS/2 の場合は「IBM 20.0」 、 MS-DOS 4.0 以降の場合は「MSDOS5.0」です。
ブート セクターの 3 番目の主要コンポーネントは、BIOS パラメータ ブロック (BPB) です。ディスク パラメータ ブロックは、DOS にとって非常に重要なデータ領域です。DOS が次のものを見つけるのに役立ちます。
- セクターあたりのバイト数
- クラスターあたりのセクター数
- 予約セクター
- FATの数
- ルートディレクトリエントリの数
FAT32 DOS ブートレコードフォーマット |
オフセット |
説明 |
サイズ |
00H |
ジャンプコード + NOP |
3 バイト |
03H |
OEM 名とバージョン |
8 バイト |
0BH |
セクターあたりのバイト数 |
2 バイト |
0DH |
クラスターあたりのセクター数 |
1 バイト |
0EH |
予約セクター |
2 バイト |
10時間 |
FATのコピー数 |
1 バイト |
11時間 |
ルート ディレクトリ エントリの最大数 (ただし FAT32 では利用できません) |
2 バイト |
13時間 |
パーティション内のセクター数が 32 MB 未満 (したがって FAT32 では使用できません) |
2 バイト |
15時間 |
メディア記述子 (ハードディスクの場合は F8H) |
1 バイト |
16時間 |
FAT あたりのセクター数 (古い FAT システムで、FAT32 では利用できません) |
2 バイト |
18時間 |
トラックあたりのセクター数 |
2 バイト |
1AH |
ヘッドの数 |
2 バイト |
1CH |
パーティション内の隠しセクターの数 |
4 バイト |
20時間 |
パーティション内のセクター数 |
4 バイト |
24時間 |
FAT あたりのセクター数 |
4 バイト |
28時間 |
フラグ (ビット 0-4 はアクティブな FAT コピーを示します) (ビット 7 は FAT ミラーリングが有効か無効かを示します <クリアが有効>) (FAT ミラーリングが無効の場合、FAT 情報はビット 0-4 で示されるコピーにのみ書き込まれます) |
2 バイト |
2AH |
FAT32 ドライブのバージョン (上位バイト = メジャー バージョン、下位バイト = マイナー バージョン) |
2 バイト |
2CH |
ルートディレクトリの開始クラスタ番号 |
4 バイト |
30時間 |
ファイルシステム情報セクターのセクター番号(パーティションの先頭から参照) |
2 バイト |
32時間 |
バックアップ ブート セクターのセクター番号 (パーティションの先頭から参照) |
2 バイト |
34時間 |
予約済み |
12 バイト |
40時間 |
パーティションの論理ドライブ番号 |
1 バイト |
41時間 |
未使用 (前のエントリの上位バイトである可能性があります) |
1 バイト |
42時間 |
拡張署名 (29H) |
1 バイト |
43時間 |
パーティションのシリアル番号または 32 ビット バイナリ ID
(OS 自体によって提供される 32 ビットのバイナリ ID) |
4 バイト |
47時間 |
パーティションのボリューム名 |
11 バイト |
52時間 |
FAT名(この場合はFAT32) |
8 バイト |
5AH |
実行可能コード |
420 バイト |
1FEH |
実行可能マーカーまたはマジックナンバー (AAH 55H) |
2 バイト |
- 論理ボリュームの合計セクター数 (小、論理ボリューム サイズが 32 MB 以下の場合)
- メディア記述子バイト
- FA あたりのセクター数
この情報は、FAT の場所やその他の重要な値を見つけるのに役立ちます。ここに間違った情報を入力したり、これらの値を壊したりすると、ハード ディスク ドライブからの起動が不可能になります。ディスク パラメータ ブロックに間違った情報があると、ハード ディスク ドライブだけでなくフロッピー ディスク ドライブからも起動できなくなる場合があります。
セクターあたりのバイト数は、ほとんどの場合 512 です。そうでない場合でも、2 の整数乗 (例: 64、128、256) である必要があります。
クラスターあたりのセクター数は、クラスターのサイズによって異なります。(この章の前の「クラスター」セクションを参照してください)。FAT のコピー数は、ほぼ常に 2 です。
ルート ディレクトリの数:ファイル システムとボリューム サイズによって異なります。(前述のファイル システムの制限と次のルート ディレクトリの説明を参照してください)。
セクターの総数: 隠しセクターは除外されます。BPB で 0 の場合、拡張ブート レコード情報のフィールドが使用され、その逆も同様です。オフセット 26H の署名バイトを調べることで、拡張情報 (DOS 4.0 以降) が使用可能かどうかを判断できることに注意してください。
論理 DOS ドライブのブート セクターの前のセクターは、「隠し」セクターとみなされます。DOS は隠しセクターを解釈しません。通常のフロッピー ドライブには隠しセクターはありません。ハード ドライブのパーティションには、ドライブ上の位置を反映する番号が付けられます。実際に使用されるのは最初のセクターだけですが、通常、最初のシリンダの最初のヘッド全体がパーティション テーブル用に予約されていることに注意してください。
メディア記述子: メディアまたはディスクの種類を示すために使用されます。通常の値は、拡張 DOS パーティションの場合は 0、ハード ドライブの場合は F8H です。メディア記述子バイトの値は、次の表に示されています。
メディア記述子 |
タイプ |
容量 |
サイズとタイプ |
フォア |
2.88MB |
3.5 インチ、両面、トラックあたり 36 セクター |
フォア |
1.44MB |
3.5 インチ、両面、トラックあたり 18 セクター |
F9H |
720 KB |
3.5 インチ、両面、トラックあたり 9 セクター |
F9H |
1.2MB |
5.25 インチ、両面、トラックあたり 15 セクター |
FDH |
360 KB |
5.25 インチ、両面、トラックあたり 9 セクター |
FFH |
320 KB |
5.25 インチ、両面、トラックあたり 8 セクター |
フランス |
180KB |
5.25 インチ、片面、トラックあたり 9 セクター |
FEH |
160KB |
5.25 インチ、片面、トラックあたり 8 セクター |
F8H |
--------- |
固定ディスク |
FAT のセクター数: 計算する必要があります。FAT のサイズを計算する方法は、この章の FAT の説明に記載されています。
FAT32 ファイル システムの DBR は次の図に示されています。
FATのセクター
トラックあたりのセクター数 (またはヘッドあたりのセクター数): ヘッドあたりのセクター数は、1 つのヘッドにグループ化されたセクターの数です。同様に、シリンダあたりのヘッド数は、ヘッドあたりのシリンダ数を反映します。このパーティションが CHS パーティションの場合、これらの値は BIOS によって返される値と同じである必要があります。同じでない場合は、ディスクが誤って構成されており、パーティションが使用できない可能性があると考える必要があります。
隠しセクター: すでに説明したように、これはボリュームの開始、つまりブート セクター自体の前の物理ディスク上のセクターの数です。これは、ルート ディレクトリとデータ領域への絶対オフセットを計算するために、ブート シーケンス中に使用されます。このパーティションの先頭とパーティション テーブル自体の間のセクター数と考えてください。
このフィールドは、パーティション テーブルの「パーティションの前のセクター数」と同じである必要があります。セカンダリ パーティションが存在する可能性があるため、必ずしも最初のセクターの物理 LBA アドレスであるとは限りません。
隠しセクターがパーティション テーブルのものと同じでない場合は、ブート セクターが破損しており、パーティションが使用できないと考えられます。また、古いバージョンの DOS では、上位ワードに通常、ゴミが含まれていることにも注意してください。
ブート セクターが破損している疑いがある場合は、上記のいくつかのフィールドをチェックして、そこにリストされている値が意味をなすかどうかを確認できます。
たとえば、ほとんどの場合、セクターあたりのバイト数は 512 になります。また、ブート セクターの実行可能コード セクションに、ディスクをフォーマットしたオペレーティング システムに適したテキスト文字列が表示されることもあります。
たとえば、MS-DOS でフォーマットされた FAT ボリューム上の一般的なテキスト文字列には、「無効なシステム ディスクです」、「ディスク I/O エラーです」、「ディスクを交換して、任意のキーを押してください」、「非システム ディスクまたはディスク エラーです」、「交換して準備ができたら任意のキーを押してください」、「ディスクの起動に失敗しました」などがあります。Windows NT でフォーマットされた FAT ボリューム上のテキスト文字列には、「ブート: NTLDR が見つかりません (または見つかりませんでした)」、「ディスクの読み取り中に I/O エラーが発生しました」、「別のディスクを挿入してください」などがあります。
ただし、このリストがすべてを含むものではないことに注意してください。ブート セクターに他のメッセージが見つかった場合、必ずしもブート セクターに問題があることを示すわけではありません。MS-DOS と Windows NT のバージョンによって、ブート セクターのメッセージ文字列が若干異なる場合があります。
一方、テキストがまったく見つからない場合、またはテキストが明らかに MS-DOS または Windows NT に関連していない場合は、ブート セクターがウイルスに感染しているか、または何らかの形でデータが破損している可能性を考慮する必要があります。
ウイルスに感染したブート セクターから回復するには、通常、市販のウイルス対策プログラムを使用するのが最適です。多くのウイルスやトロイの木馬は、ブート セクターにデータを書き込む以上のことを行います。そのため、ブート セクターを手動で修復することはお勧めしません。ウイルスやトロイの木馬を完全に除去できない可能性があり、場合によっては、害の方が大きい場合があります。ただし、この本のプログラミング セクションでは、DBR について取り上げます。
ブート セクタが他の理由で破損したと思われる場合は、上記のフィールドを手動で変更することで、ドライブを再フォーマットせずにブート セクタの破損から回復できる可能性があります。 本書の回復のプログラミング手法では、プログラミングによるこのような問題の克服を試みます。
ファイルアロケーションテーブル (FAT)
DBR の次はファイル アロケーション テーブルです。ファイル アロケーション テーブル (FAT) は、Microsoft スタンドアロン Disk Basic のフロッピー ディスクにデータを保存するために 1977 年に導入されました。FAT は、拡大するニーズに対応するために何度も変更されてきました。FAT は、リムーバブル メディアと固定メディアの両方でデータを管理するための高速で柔軟なシステムの要件を満たすように開発されました。
1996 年に、FAT32 は Windows 95 OSR2 で導入されました。前述したように、Windows 98/ME はハード ドライブのサイズで FAT32 をサポートしています。現在、これらのオペレーティング システムでは FAT32 ファイル システムが一般的に使用されています。
最初の DOS FAT ファイル システム (DOS 1.x) では、フロッピー ディスクで現在も使用されている 12 ビット FAT システムを使用しました。DOS 2.x ではハード ディスクのサポートが追加され、ボリュームが大きくなったため 16 ビット FAT エントリに移行しました。
1987 年頃、DOS 4.0 では、ファイル システムの制限についてすでに説明したように、大容量ディスクのサポート問題を克服するために、低レベルのセクター処理が 32 ビット パラメータを使用するように変更されました。
FAT は、ディスク ドライブの完全な表面のマップを保持し、どの領域が空いているか、どの領域が不良か、どの領域がどのファイルによって占有されているかなどを示します。ディスク表面に保存されているデータにアクセスする場合、DOS は FAT を参照して、ハード ディスク表面のどの領域にデータが含まれているかを調べます。
使用される FAT のタイプは、ハードディスク ドライブのパーティション作成時に FDISK プログラムによって決定されます。ただし、実際の FAT は DOS の FORMAT プログラムによって書き込まれます。
FAT はディスク表面上のすべてのセクターを追跡するのではなく、「クラスター」または「割り当て単位」と呼ばれるセクターのグループでディスク領域を管理します (同じ章で前述したクラスターを参照してください)。
クラスタは、DOS がファイルに割り当てるハードディスク ドライブ スペースの最小単位で、ドライブ サイズに応じて 1 つ以上のセクターで構成されます。クラスタ サイズは、ハードディスク ドライブの高レベル フォーマット中に DOS FORMAT プログラムによって決定され、固定されます。(前述の「クラスタのサイズ」の説明を参照してください)
実際、FAT はボリューム全体のクラスタのインデックスです。FAT にはクラスタごとに 1 つのエントリがあります。FAT の最初の 2 つのエントリには、FAT に関する情報が含まれています。FAT の 3 番目以降のエントリは、ファイルで使用できる最初のクラスタから始まるディスク領域のクラスタに割り当てられます。
FAT は非常に重要な項目であるため、DOS では FAT のコピーを 2 つ (プライマリ FAT または FAT1 とセカンダリ FAT または FAT2) 保持します (通常は 2 つのコピーがありますが、多くの新しいオペレーティング システムでは 3 つ以上の FAT のコピーが作成されます)。
各 FAT はディスク上の連続したセクターを占有し、1 番目の FAT の直後に 2 番目の FAT が続くと、DOS は 2 番目の FAT を使用して問題を修正しません。代わりに、1 番目の FAT が更新されると、DOS はそれを 2 番目の FAT にコピーし、その過程で 2 番目の FAT も破損します。
この更新は、DOS が 1 番目と 2 番目の FAT が一致しないことを検出するたびに実行されます。したがって、1 番目の FAT が破損している場合は、ディスク エディター ソフトウェアを使用して 1 番目の FAT と 2 番目の FAT を比較し、すぐに修復する必要があります。これは、DOS が破損した FAT を 2 番目の FAT にコピーする前に行う必要があります。
FAT32 の導入により、FAT エントリとセクター番号は両方とも 32 ビットになりました。つまり、4,294,967,296 の異なる 32 ビット値にセクターあたり 512 バイトを掛けると、FAT32 で可能な最大ディスク サイズは 2 テラバイト (2,199,023,255,552 バイト) になります。
FAT 32 の各ファイルのディレクトリ エントリのサイズは、FAT16 で必要な 2 バイトではなく、ファイルの開始クラスターの値を格納する 4 バイトです。値が大きいほど、収容可能なクラスターの数が多くなります。
従来、各ディレクトリ エントリは 32 バイトのレコードであり、これは変わりません。ディレクトリ レコードの中央には、Microsoft が将来使用するために予約した 10 バイト (バイト 12 ~ 21) があります。これらのバイトのうち 2 つは、FAT32 で開始クラスターを指定するために必要な追加バイトを収容するために現在使用されています。
すでに説明したように、FAT には 12 ビット、16 ビット、32 ビットのバージョンがあります。32 ビット FAT では、ストレージの効率が大幅に向上し、最大 30% の効率化と、より大きなハード ドライブの使用が可能になります。
プログラムがファイルの内容を検索するためにオペレーティング システムのファイル システムを呼び出すと、そのファイルのディレクトリ エントリの最初のクラスター値が読み取られ、FAT チェーンの検索に使用されます。FAT チェーンは、ファイルに属するデータを含むクラスターのリストです。
FAT32 ドライブレイアウト |
オフセット |
説明 |
パーティションの開始 |
ブートセクター |
パーティションの開始 + 予約済みセクターの数 |
FAT テーブル |
パーティションの開始 + 予約済みセクターの数 + (FAT あたりのセクター数 * 2)
[FAT ミラーリングが有効になっていると仮定すると、これはほぼ常に当てはまります] |
ルートディレクトリ |
パーティションの開始 + 予約済みセクターの数 + (FAT あたりのセクター数 * 2) + ルート ディレクトリのセクター数 |
データ領域 |
FAT エントリには、次のことを示す値を含めることができます。
- 特定のファイルのFATチェーン内の次のクラスター
- 空きクラスタ、つまりどのファイルでも使用されていないクラスタ
- 不良セクタの情報、つまり物理的に損傷しているため使用すべきではない 1 つ以上のセクタを含むクラスター。
- ファイルの最終クラスター
FAT テーブルのエントリ |
数値(16進数) |
説明 |
0 |
フリークラスター |
???? |
クラスターは使用中、チェーン内の次のクラスター |
FF0-FF6 / FFF0-FFF6 |
クラスターは予約済みです |
FF7 /FFF7 |
クラスタに不良セクタが含まれています |
FF8-FFF / FFF8-FFFF |
ファイルの終わり |
各 FAT エントリはクラスター アドレスを表し、ファイルの次のクラスター アドレス (FAT エントリ) へのポインターが含まれています。ファイルの最後の FAT エントリには、ポインターではなく最終クラスター値が含まれています。FAT の最初の 2 つのエントリには、FAT に関する情報が含まれています。FAT のこれらのバイトには、メディア記述子バイトが含まれています。このバイトを使用して、この FAT エントリのディスク メディアの種類を見つけることができます。
FAT の 3 番目以降のエントリは、ファイルで使用できる最初のクラスタから始まるディスク領域のクラスタに割り当てられます。FAT エントリには、伝達する情報に基づいて、上記の表に示されている値のいずれかを設定できます。
12 ビット FAT の 000H または 16 ビット FAT の 0000H は、この FAT 位置に対応するクラスターが未割り当てまたは空であることを示します。12 ビット FAT の FF8H から FFFH までの値、または 16 ビット FAT の FFF8H から FFFFH までの値はすべて、このクラスターがファイルのクラスター チェーンの最後のクラスターであることを示します。
12 ビット FAT の FF0H から FF7H の値は予約済みのクラスターを示します。12 ビット FAT の FF7H または 16 ビット FAT の FFF7H は、FAT の場所に対応するクラスターが不良クラスターであることを示します。つまり、これは基本的に不良セクターを含むクラスターです。このクラスターはデータ ストレージには使用されません。
FAT テーブル内のその他の値は、ファイル割り当てチェーン内の次のクラスターへのポインターです。
Windowsが不適切なシャットダウンを検出する仕組み
これは非常によくあることで、Windows を使用しているときに何度も気づいたことがあると思いますが、停電、ソフトウェアの破損、偶発的なシャットダウンなど、何らかの理由でコンピューターが不適切にシャットダウンした場合、コンピューターをさらに再起動すると、起動プロセス中に不適切にシャットダウンしたというメッセージが画面に表示され、オペレーティング システムがディスクをスキャンしてエラーを探します。
次の 2 つの図は、32 ビット FAT の先頭の 256 バイトを示していますが、これについて説明するには最初の 8 バイトだけが必要です。
実際には、Windows オペレーティング システムがメモリにロードされると、つまり Windows が起動すると、FAT の 8 番目のバイト (またはオフセット 7H) は 0FH または FFH から 07H または F7H になります。
Microsoft は、実行中のオペレーティング システムを含むボリュームに対してのみバイト 0FH を使用し、アクセスしているその他のボリュームに対してはバイト FFH を使用します。
Windows の起動が開始されると、8 番目のバイトは 07H または F7H に変更され、Windows が正常にシャットダウンされた場合にのみ 0FH または FFH に設定されます。
停電が発生した場合、またはコンピュータの電源スイッチが誤ってオフになった場合、あるいは何らかのソフトウェアの問題によりシステムが手動で再起動された場合、このバイトは 07H または F7H のままになり、次回の起動時に Windows オペレーティング システムに何らかの不適切なシャットダウンがあったことを通知し、Windows はディスク スキャン プログラム (スキャンディスク) を使用してディスクのエラーを検証します。

ルートディレクトリ
最後の FAT の次にはルート ディレクトリがあります。ルート ディレクトリは、ハード ディスク ドライブに保存されている情報の目次のようなものです。ルート ディレクトリは FAT の次に配置されているため、ブート レコードの値を加算することで簡単に場所を特定できます。
ディレクトリ領域には、ファイル名、ファイル作成日時、ファイル属性、ファイル サイズ、および特定のファイルの開始クラスターに関する情報が保存されます。ファイルに関するこの情報を記述する各ディレクトリ エントリは、32 バイトの情報です。
ルート ディレクトリには、ルート ディレクトリから分岐するファイルとディレクトリに関する情報が含まれます。それ以降のすべてのディレクトリは、ルート ディレクトリと同じ形式でファイルとして保存されます。以前は、ルート ディレクトリのサイズは固定で、ディスク上の固定位置に配置されていましたが、現在はファイルとして扱われるため、必要に応じて自由に拡張できます。
ルート ディレクトリに保存できるファイルの数は、使用されている FAT の種類によって異なります。たとえば、12 ビット FAT の 3½ インチ 1.44 MB フロッピー ディスクの場合、エントリ数は 224 に制限されており、225 番目のファイルを保存しようとすると、DOS に「ファイル作成エラー」が表示されます。16 ビット FAT を使用すると、ルート ディレクトリに合計 512 のエントリを保存できます。フロッピー ディスクまたはハード ディスク上の各メイン ディレクトリも、ルート ディレクトリ エントリとして機能します。
次の表は、さまざまなメディアと FAT のルート エントリの制限を示しています。
メディアとファイルシステムの説明 |
ルートディレクトリエントリの最大数 |
片面 5¼ インチ 180K FDD |
64 |
両面5¼インチ320K FDD |
64 |
両面5¼インチ360K FDD |
112 |
両面3½インチ720K FDD |
112 |
両面 5¼ インチ 1.2 メガバイト FDD |
224 |
両面 3½ インチ 1.44 メガバイト FDD |
224 |
両面 3½ インチ 1.68 メガバイト DMF 形式ディスク (Microsoft が CAB ファイルを作成したのはこのためです) |
16 |
両面 3½ インチ 2.88 メガバイト FDD |
240 |
ハードドライブ (FAT12 および FAT16) |
512 |
FAT 32 のハードドライブ (ルートディレクトリをファイルとして扱うため) |
65,536 |
これは、16 ビット FAT ではハード ディスク ドライブに保存できるファイルが 512 個に制限されるという意味ではありません。サブディレクトリを使用すると、ドライブのサイズによってのみ制限される任意の数のファイルを保存できます。
フロッピーのボリューム ラベルは通常ブート セクター内に保存されますが、ハード ドライブのボリューム ラベルはルート ディレクトリ エントリとして保存され、ブート セクターに予約されている領域はスペースで空白のままになります。DOS の DIR コマンドは、ディレクトリが存在する場合はディレクトリ内のラベルを返し、存在しない場合はブート セクター内のラベルを返します。
ディレクトリ エントリには、クラスターのチェーンへのエントリとファイル名が含まれます。したがって、最も重要なディレクトリ エントリはルート ディレクトリです。これは、ルート ディレクトリにはすべてのサブ ディレクトリを指すクラスター インデックスが含まれているためです。
すべてのディレクトリには、現在のディレクトリ (このサブディレクトリ) を表す "." と親ディレクトリ (このサブディレクトリの親ディレクトリ) を表す ".." の 2 つのエントリが含まれています。クラスターにディレクトリが含まれている場合、これらのエントリは常にクラスターの先頭に配置されるため、簡単に追跡できます。次の表は、ルート ディレクトリのディレクトリ エントリの形式を示しています。次の表は、ルート ディレクトリ内のファイルの 32 バイトのディレクトリ エントリがスライスされて、そのファイルに関するさまざまな情報を格納する方法を示しています。
オフセット |
サイズ |
説明 |
00H |
8 バイト |
ファイル名
(ファイル名の最初の文字の特別な意味については次の表も参照してください) |
08時間 |
3 バイト |
拡大 |
0BH |
1 バイト |
ファイル属性(ファイル属性表を参照) |
0CH |
10 バイト |
予約済み |
16時間 |
2 バイト |
作成または最終更新日時(日付と時刻の形式表を参照) |
18時間 |
2 バイト |
作成日または最終更新日(日付と時刻の形式表を参照) |
1AH |
2 バイト |
ファイルの開始または最初のクラスター
(値 0000H は親ディレクトリ (' .. ') エントリで使用され、親ディレクトリがルート ディレクトリであることを示します) |
1CH |
4 バイト |
ファイル サイズ (バイト単位)。 |
ファイル名には大文字の名前が含まれ、ファイル名のサイズが 8 文字より小さい場合は、スペースが ASCII 番号 32 のスペース文字で埋められます。拡張子フィールドには、ファイルの拡張子が大文字で含まれます。
ファイル名が 8 文字より長い場合、Windows は長いファイル名を 6 つの大文字に切り捨て、基本ファイル名の末尾に「~1」を追加して短いファイル名を作成します。
最初の 6 文字が同じファイル名がすでに存在する場合、番号が増分されます。拡張子はそのままで、以前のバージョンの Windows および DOS で無効であった文字はアンダースコアに置き換えられます。
長いファイル名は、属性バイトが 0FH に設定された、特別にフォーマットされた 32 バイトの長いファイル名 (LFN) ディレクトリ エントリに保存されます。特定のファイルまたはサブディレクトリの場合、1 つ以上の長いファイル名ディレクトリ エントリのグループが、ディスク上の単一の 8.3 ディレクトリ エントリの直前に配置されます。
各 LFN ディレクトリ エントリには最大 13 文字の長いファイル名が含まれており、オペレーティング システムは長いファイル名全体を構成するために必要な文字数を連結します。
これが、長いファイル名によってファイル システム内のルート ディレクトリ エントリの最大数が減少する原因です。Windows が長いファイル名をサポートする方法については、この章の後半で詳しく説明します。
ファイル名の最初のバイトには、ファイルに関する重要な情報も含まれる場合があります。このバイトで提供される情報は、次の表に示すもののいずれかです。
ファイル名の最初の文字 |
価値 |
意味 |
00H |
このディレクトリ エントリが未使用であることを示します。 |
05H |
ファイル名の最初の文字が E5H であることを示しますが、実際にはファイルは削除されていません。(E5H の意味を参照してください) |
E5H |
ファイルは消去されており、このディレクトリ エントリは削除されたファイルのディレクトリ エントリです。このファイルによって以前占有されていたデータ領域は、別の新しいファイルに割り当てるために解放されます。 |
2EH |
これはサブディレクトリです。このエントリのクラスター番号フィールドには、ディレクトリのクラスター番号が含まれます。 |
2EH 2EH |
ディレクトリ エントリ内の 2 つの 2EH は、サブディレクトリの親ディレクトリ エントリを示します。このエントリのクラスター番号には、このディレクトリの親ディレクトリのクラスター番号が含まれます。親ディレクトリがルート ディレクトリの場合、クラスター番号は 0000H になります。 |
属性は 8 ビットのバイナリ コード フィールドです。次の表は、指定されたファイルの属性フラグのステータスを示しています。
属性ビット |
属性 |
少し |
バイナリ |
ヘックス |
読み取り専用ファイルフラグ |
0 |
……? |
01H |
隠しファイルフラグ |
1 |
……? |
02H |
システムファイルフラグ |
2 |
……? |
04時間 |
ボリューム ラベル フラグ
(エントリがボリューム ラベルであることを示します) |
3 |
….?… |
08時間 |
サブディレクトリ
(ディレクトリと同じ形式) |
4 |
…?… |
10時間 |
アーカイブ ビット
(最後のバックアップ以降に変更されたファイル) |
5 |
……?…… |
20時間 |
予約済み(0 個含む) |
6 |
.0....... |
- |
予約済み(0 個含む) |
7 |
0……。 |
- |
1 つのファイルに複数の属性がある場合があります。たとえば、1 つのファイルが読み取り専用かつ隠しファイルである場合や、1 つのファイルがシステム ファイルと隠しファイルの両方の属性を持つ場合があります (ディレクトリ エントリのエンコーディングについては、次の例を参照してください)。
時間と日付は、32 ビット (16 ビットの時間、16 ビットの日付) の特別にコード化されたフィールドです。ファイルの作成または最終更新の時間と作成または最終更新の日付を構成するこれらのビット エンコードの分割は、次の表に示されています。
ファイルの作成時刻または最終更新時刻のエントリは、ディレクトリ エントリの 16 番目と 17 番目のバイトであり、上記の表に示す形式になります。エンコードは次のとおりです。
- Hは時間を表す2進数で、0から23までの範囲になります。
- Mは分を表す2進数で、0から59までの範囲になります。
- Sは2秒単位の2進数です。
- ファイルの作成または最終更新のデータのエントリは18番目と
- ディレクトリ エントリの 19 番目のバイトの形式は次のとおりです。
- Yは0から127までの2進数または1980年から2107年までです
- Mは月を表す2進数で、1から12までの範囲になります。
- Dは日付を表す2進数で、1から31までの範囲になります。
このディレクトリ エントリは、最初のクラスター値に基づいて FAT エントリにリンクされます。DOS がディレクトリから任意のファイルの開始クラスター値を取得すると、DOS は FAT を使用して完全なファイルを見つけることができます。チェーン内のエントリ クラスターは、ファイルを構成する最初のクラスターです。属性のディレクトリ フラグが設定されている場合、このフィールドは新しいディレクトリ エントリを指します。
ファイルサイズのエントリは 4 バイトです。これにより、FAT32 が最大 4,294,967,295 バイト (約 4 GiB) までのファイルサイズをサポートしていることが計算できます。4 バイトは 32 ビットで、32 ビットバイナリで構成された最大ファイルサイズは次のようになります。
= 11111111 11111111 11111111 11111111 (B) バイト
= 4,294,967,295 (D) バイト
~ 4GiB
したがって、FAT32 は最大 4 GiB までのファイル サイズをサポートします。
ルートディレクトリエントリ
ファイルのサイズとファイルの開始クラスターは、ファイルがいくつのクラスターで構成されているかを計算できるため、破損したファイルを回復する際のデータ回復にとって貴重なリソースとなる可能性があります。
前の図は、7 つの異なるファイルのルート ディレクトリ エントリを示しています。これらのエントリのエンコーディングは次の表に示されています。
長いファイル名 (LFN)
ルート ディレクトリの説明ですでに説明したように、以前はルート ディレクトリのサイズは固定されており、ディスク上の固定位置に配置されていましたが、現在はファイルとして扱われるため、必要に応じて自由に拡張できます。
これは長いファイル名にとって非常に重要です。長いファイル名はそれぞれ複数のディレクトリ エントリを使用するためです。8.3 ファイル名を使用するオペレーティング システムに長いファイル名のサポートを追加することは、ディレクトリ エントリを拡張して 11 文字を超える文字を保持するほど簡単ではありません。
この新しいオペレーティング システムが 255 文字のファイル名を返す場合、11 文字を超えるファイル名を受け取ることを想定していない多くの古いアプリケーションはクラッシュします。これは、プログラムが読み取ったファイル名を保存するためにメモリを確保する必要があり、ファイル名用に 16 バイトを確保し、オペレーティング システムが (たとえば) 32 文字をそのスペースにコピーすると、他のデータが上書きされるためです。アプリケーションを壊す確実な方法は、データ スペースにランダム データをコピーすることです。
この問題を克服するために、Windows 95 では、以前のバージョンの DOS および Windows アプリケーションとの互換性を維持しながら長いファイル名をサポートするという問題に対する巧妙な解決策が見つかりました。
ほとんどのアプリケーション (Norton Disk Doctor などの低レベルのディスク ユーティリティを除く) がシステムに対してファイル名やサブディレクトリ名を照会する場合、ディスクから直接ディレクトリ エントリを読み取るのではなく、オペレーティング システムに組み込まれている列挙関数を使用します。
ディレクトリ エントリは、読み取り専用、隠し、システム、およびボリューム ラベルの属性ビットの組み合わせでマークされていることはご存じのとおりです。おそらく、ディレクトリ エントリの属性バイトが値 0FH を保持している場合、既存のすべてのバージョンの DOS および Windows 95 以前のすべてのバージョンの Windows に組み込まれている列挙関数は、そのディレクトリ エントリが存在しないかのようにスキップします。
そこで、解決策として、すべてのファイルとサブディレクトリに 2 つの名前 (すべてのアプリケーションで表示される短い名前と、Windows 95 (およびそれ以降) のアプリケーションと、長いファイル名のサポートを追加するように書き換えられたアプリケーションでのみ表示される長い名前) を保存することにしました。短いファイル名は、従来の 32 バイトのディレクトリ エントリに 8.3 形式で保存されます。
Windows では、長いファイル名を大文字 6 文字に切り捨て、基本ファイル名の末尾に「~1」を追加することで、短いファイル名を作成することについてはすでに説明しました。
最初の 6 文字が同じファイル名がすでに存在する場合、番号が増分されます。拡張子はそのままで、以前のバージョンの Windows および DOS で無効であった文字はアンダースコアに置き換えられます。
長いファイル名は、属性バイトが 0FH に設定された、特別にフォーマットされた 32 バイトの長いファイル名 (LFN) ディレクトリ エントリに保存されます。特定のファイルまたはサブディレクトリの場合、1 つ以上の長いファイル名ディレクトリ エントリのグループが、ディスク上の単一の 8.3 ディレクトリ エントリの直前に存在します。
各 Long File Name ディレクトリ エントリには最大 13 文字の長いファイル名が含まれており、オペレーティング システムは長いファイル名全体を構成するために必要な文字数を連結します。
長いファイル名のディレクトリ エントリの場合、ファイル名は Unicode 形式で保存されます。Unicode では、ASCII の 1 バイトではなく、文字ごとに 2 バイトが必要です。ファイル名の文字は、次の 3 つの別々のフィールドに分散されます。
- 最初の10バイト(5文字)の長さは、
- 2番目の12バイト(6文字)
- 3 番目の 4 バイト (2 文字)。
- ディレクトリエントリの最初のバイトの下位5ビットは、他のディレクトリエントリに対するディレクトリエントリの位置を識別するシーケンス番号を保持します。
- 同じファイルに関連付けられた長いファイル名のディレクトリ エントリ。
長いファイル名に 3 つの LFN ディレクトリ エントリが必要な場合、最初のシーケンス番号は 1、2 番目のシーケンス番号は 2、3 番目のシーケンス番号は 3 となり、3 番目のエントリの最初のバイトのビット 6 は 1 に設定され、それがシーケンスの最後のエントリであることを示します。
属性フィールドは、LFN ディレクトリ エントリでも 8.3 ディレクトリ エントリと同じ場所に表示されます。これは、ファイル システムが、属性バイトを調べるまで、どのタイプのディレクトリ エントリを扱っているかがわからないためです。開始クラスター番号フィールドも同じ場所に表示されますが、LFN ディレクトリ エントリではその値は常に 0 です。タイプ インジケーター フィールドも、すべての長いファイル名で 0 を保持します。
長いファイル名の問題の 1 つは、短いファイル名よりも多くのディスク領域を消費することです。長いファイル名がサブディレクトリに保存されている場合、これは大きな問題ではありません。ディスク領域が利用可能である限り、サブディレクトリは追加されたディレクトリ エントリを収容するために拡張できますが、ルート ディレクトリで利用可能なディレクトリ エントリの最大数は固定されており、長いファイル名はサイズが制限されているルート ディレクトリの領域を無駄にするためです。
たとえば、ハード ディスクのルート ディレクトリに最大 512 個のディレクトリ エントリが含まれている場合、128 文字の名前には 11 個のエントリ (長い名前に 10 個、短い名前に 1 個) が必要なので、それぞれに 128 文字の名前を付けると、ルート ディレクトリに作成できるファイルとサブディレクトリは 46 個だけになります。
FAT32 システムではルート ディレクトリがサイズが拡大できるファイルとして扱われるため、FAT32 の下のルート ディレクトリも拡大できるため、この問題は FAT32 でも発生しません。
データ領域(またはファイル領域)
ルート ディレクトリの次にデータ領域 (またはファイル領域) が始まります。むしろ、ルート ディレクトリの後のボリュームの残りがデータ領域であると言えます。
データ領域には、ディスク表面に保存される実際のデータが含まれます。DOS は、データ領域の最初のセクターにクラスター番号 2 を使用するため、さまざまな計算を実行する際には、クラスター番号が 2 から始まることを念頭に置く必要があります。
ハード ディスク ドライブをフォーマットする場合、DOS の FORMAT コマンドはデータ領域のデータを破壊したり上書きしたりしません。FORMAT コマンドはディレクトリ エントリと FAT エントリを削除するだけで、実際のデータ領域には影響しません。
これにより、誤ってフォーマットされたハード ディスク ドライブの回復が可能になります。これは、誤ってフォーマットされたフロッピー ディスクのすべてのケースで可能というわけではありません。Windows による完全なフォーマットと同様に、フロッピーのデータ領域は F6H 文字で埋められ、すべての情報が上書きされます。
DOS は、「最後に使用されたクラスター」(LCU) ポインターと呼ばれる 16 ビット/32 ビット ポインターを使用して、最後に使用されたクラスター番号を保存します。このポインター値は最初 0 ですが、特定のクラスターに何らかの情報が書き込まれると、そのクラスター番号が LCU ポインターに保存されます。
その後、新しい情報を書き込むたびに、DOS は LCU 番号以降から空きクラスターを検索します。これにより、ディスクに書き込まれる新しいデータは、新しい未使用領域に書き込まれるため、連続した状態が維持されます。
ファイルがディスク上の 1 つの連続した領域にあるため、誤って削除された場合にデータを把握することがはるかに簡単になります。ディスクの終わりに達するか、システムがリセットされると、LCU ポインター値はゼロにリセットされます。
しかし、問題はこれだけではありません。ディスクに新しいファイルを作成するだけで、以前保存したファイルを削除したり変更したりしないことは、実際には不可能です。LCU のみを使用すると、ファイルの作成と削除を頻繁に行う場合に問題が発生します。これは、新しいデータがハード ディスクの内部トラックの奥へとどんどん移動してしまうためです。
したがって、ディスクに保存されたファイルが移動または削除されると、そのファイルによって占有されていたデータ領域のクラスターは、データ領域で使用可能な未割り当てクラスターとして設定され、新しいデータを書き込む準備が整います。これにより、オペレーティング システムはすべてのデータをディスクの内側のトラックに移動する必要がなくなります。
しかし、ファイルの削除や作成を頻繁に行うと、ディスク上のデータが断片化され、データの断片化が発生します。
断片化されたデータと断片化されたデータ
ディスク内の各ファイルは、ファイルに含まれるデータをディスク上の任意の場所に配置できるクラスターのリンク リストとして保存されることはすでに説明しました。4,096 バイトのクラスターを使用してディスク上に 10 MB のファイルを保存する場合、2,560 個のクラスターが使用されています。これらのクラスターは、ディスク上の異なるトラックや異なるプラッター上に配置でき、実際にはどこにでも配置できます。
ファイルはディスク全体に分散できますが、これは決して望ましい状況ではありません。その理由は、パフォーマンスが望ましくないためです。ハード ディスクは、主に機械部品が内蔵されているため、比較的低速なデバイスです。ハード ディスクがヘッドを別のトラックに移動させるたびに、数千のプロセッサ サイクルに相当する時間がかかります。
したがって、各ファイルがディスク上に分散される程度を最小限に抑える必要があります。理想的なケースでは、すべてのファイルは実際に完全に連続しています。つまり、使用する各クラスターはディスク上で次々に配置されます。これにより、必要に応じて、ハード ディスクによる機械的な動きをほとんど行わずに、ファイル全体を読み取ることができます。
実際、ファイル システムは、すべてまたはほとんどのファイルが連続した状態で始まりますが、一定期間にわたるファイルの作成と削除の結果として、ディスク上のデータはますます断片化されます。
断片化を理解するために簡単な例を考えてみましょう。以下の表は 12 個のクラスターの使用状況を表しています。最初は、表は空です。
クラスター 1 |
クラスター2 |
クラスター3 |
クラスター4 |
クラスター5 |
クラスター6 |
クラスター 7 |
クラスター8 |
クラスター9 |
クラスター10 |
クラスター11 |
クラスター 12 |
ここで、このディスクにファイル A、B、C、D の 4 つのファイルを作成したとします。ファイル A は 1 つのクラスター、ファイル B は 4 つのクラスター、ファイル C は 2 つのクラスター、ファイル D は 3 つのクラスターを使用します。これらのファイルは使用可能な空き領域に保存され、次の図に示すように、すべて連続して開始されます。
しばらくしてからファイル C を削除します。これにより、ファイル C によって占有されていた両方のクラスターが解放され、未割り当てになります。これにより、ディスクは次の図のようになります。
ここで、3 つのクラスターを必要とする新しいファイル E を作成します。ただし、ディスク上に 3 つのクラスターの長さの連続したブロックが残っていないため、C が以前占有していたスペースの一部を使用して、E を 2 つのフラグメントに分割する必要があります。これで、ディスクは次の図のようになります。
あ |
B |
B |
B |
B |
そして |
そして |
だ |
だ |
だ |
そして |
|
一定期間が経過したら、ファイル A と E を削除し、5 つのクラスターを占めるファイル F を作成します。ディスクは、次の図のようになります。
ここで、ファイル F が 3 つのフラグメントに分割されることがわかります。ディスク内のこのタイプのデータは、フラグメント化されたデータと呼ばれます。上記の例は、フラグメント化の非常に単純化された例です。実際のディスクには何千ものファイルと何千ものクラスターがあるため、問題は拡大されます。ただし、これにより、何が起こるかの概要がわかります。
デフラグ プログラム (Microsoft の DEFRAG プログラム、Norton の SpeedDisk など) は、ディスクを再配置してファイルを連続した形式に戻します。ディスク デフラグ ユーティリティを実行すると、ディスク上のデフラグされたデータは、次の図のようになります。
多くの場合、断片化されたデータと断片化されたデータは、データ復旧時に非常に重要です。
データ復旧のためにクラッシュしたディスクが 2 つあり、1 つはデータが断片化しており、もう 1 つは最近デフラグされたとします。ファイルの FAT とルート情報が破損しているため、両方のディスクの表面からデータを収集してデータ復旧を行う必要があります。このような場合、復旧率はディスク内のデータのデフラグの程度に比例します。
明らかに、デフラグされたディスクからのデータ復旧は簡単で、データ復旧率も高くなりますが、一方で、断片化されたディスクからのデータ復旧は困難で時間がかかり、復旧されたデータの割合も期待外れになります。
データ破損の原因を特定する
いくつかの特定の手順を順番に実行すると、破損した領域を見つけるのに役立つ場合があります。これらの手順は、回復手順とともに次のように説明されています。
起動可能なフロッピーでシステムを起動する
使用していたオペレーティング システムの起動可能なフロッピーまたは CD を使用してシステムを起動します。論理ドライブ C: または D: などを読み取ってみます。ドライブにアクセスできる場合は、ドライブからすべてのデータをコピーします。これで、ストレスを軽減しながら、ディスクが正しく起動しない理由を突き止めることができます。
MBR情報を確認する
ハード ディスク上の最初の、そして最も重要なデータは、MBR とその中にあるテーブル、つまりパーティション テーブルです。この本に付属のディスクには、「TTEDITOR.EXE」という小さなディスク編集ツールが入っています。または、他のプログラムを使用してハード ディスクを分析することもできます。
Diskedit は、データ復旧の目的でディスクを分析するのに最適なプログラムです。使いやすいと思うプログラムを選んでください。MBR、特にパーティション テーブルを読み取ってみてください。
この章で説明した MBR の説明で見たように、MBR の後半部分には、何か問題がある場合、これによってエラー メッセージとして表示される読み取り可能なテキストがあります。これらのテキスト メッセージは、次のように表示されます。
これらのエラーメッセージがない場合は、MBR が破損していることを示します。また、これの代わりに「システムがハッキングされました...」などの不正なメッセージや、その他の予期しないメッセージが表示される場合もあります。これは、MBR に深刻な問題があることを示し、おそらくウイルス感染が原因です。
ここで、最初の 446 バイト以降の MBR のパーティション テーブルを確認します。パーティション テーブルが空の場合、起動時にエラー メッセージは表示されません。DOS はパーティション化されていないドライブを無視します。ドライブ A: に起動可能なフロッピーがない場合、システムはドライブ A: に起動可能なフロッピーを挿入するように要求します。
ここで注意すべき重要な点は、以前は動作していたドライブのパーティション テーブルが空になってはいけないということです。つまり、何かによって消去されたということです。パーティション テーブルが空の場合は、バックアップから MBR を復元します。
復元プロセスが正常に完了した後でもバックアップが機能しない場合は、このセクターに物理的な損傷があります。次の章で説明するデータ復旧のプログラミング手法を試して、データを復旧してください。プログラマーでない場合は、優れたデータ復旧センターに依頼することをお勧めします。
MBR のバックアップがない場合は、Diskedit などのディスク編集ツールを使用してパーティション テーブルを手動で書き込んでみてください。ただし、場合によっては、これが非常に困難になることがあります。
プログラマーではなく、バックアップも持っていないユーザーは、私が大学時代のデータ復旧プロジェクト開発時から使用してきた方法を使用できます。
あなたがしなければならないことは、あなたのコンピューターとほぼ同じサイズのディスク、同じ数のパーティション、そして最も重要なことは同じオペレーティング システムを持つ、あなたのコンピューターの近くにあるコンピューターを検索するだけです。
ただし、ほとんどの場合、完全に機能します。そうでない場合は、少なくともディスクの最初のパーティションにアクセスするのに役立ちます。最初のパーティションにインストールされ、他の情報が破損していない場合は、オペレーティング システムも正常に起動します。
MBRが正常であれば、DBRを検証します
MBR が正常であれば、DBR (DOS ブート レコード) を確認します。すでに説明したように、これは DOS パーティションの最初のセクターであり、隠しファイルをロードしてオペレーティング システムを起動する小さなプログラムが含まれています。
DBR には、FAT、ルート ディレクトリ クラスター、パーティションのサイズなどに関する重要な情報も多数含まれています。DBR が破損しているか不正な情報が含まれている場合は、Diskedit のようなユーティリティを使用して DBR 情報を読み取り、バックアップから DBR を復元します。
データ復旧用のすべての専門ソフトウェアは、DBR を書き換えることができます。プログラミングを使用してパーティションの DBR を書き換える方法については、本書の次の章で説明します。
適切な情報を提供することで、Diskedit を使用してパーティションの DBR を書き換えることもできます。
破損の領域を見つける非常に簡単な方法もあります。画面に表示されるエラー メッセージには、表示される特定の原因があります。いくつかの重要なエラー メッセージの説明は次のとおりです。
メッセージ |
説明 |
「ドライブの読み取り中にセクターが見つかりません」 |
このメッセージは、DOS 操作中に表示されることがあります。通常、これはセクター ID のフェードまたは損失によって発生します。 |
「ドライブの読み取り中にデータエラーが発生しました」 |
このメッセージは、DOS 操作中に表示されることがあります。これは、データ チェック (CRC (巡回冗長検査) または ECC (誤り訂正コード)) に失敗した場合に発生します。この「データ チェック」とは、ディスクから読み取ったデータが信頼できるかどうかを確認するために使用されるメカニズムを指します。 |
「ハードディスクが 0 個見つかりました」 |
ハードディスクがコンピュータの BIOS によって検出されない場合に表示されます。ハードディスクの電源ケーブルとデータ ケーブルの接続を確認してください。接続に問題がない場合は、ハードディスクのハードウェア エラーが原因である可能性があります。 |
「ハードドライブに障害が発生しました。続行するには F1 キーを押してください」 |
同上 |
「ドライブの指定が無効です」 |
システムがハードウェアを認識していないか、パーティション情報が存在しないか、ドライブのデバイス ドライバーが見つからない場合に表示されます。 |
「無効な設定です。続行するには F1 を押してください」 |
ハードディスクが使用可能な場合は、マザーボードのバッテリーが切れてシステムが構成のセットアップ情報を失っているか、ディスクが応答していません。 |
「パーティションテーブルが無効です」 |
これは MBR エラー メッセージです。MBR のパーティション テーブルに有効なパーティション情報がない場合に表示されます。 |
「オペレーティング システムの読み込みエラー」 |
これは MBR エラー メッセージです。これは、何らかの MBR 情報の破損により表示されます。 |
「オペレーティング システムが見つかりません」 |
同上。 |
「ディスクの起動に失敗しました」 |
これは DBR エラー メッセージです。通常、フロッピー ディスクから起動する場合はハード ドライブにアクセスできるはずです。起動可能ではありませんが、ディスク上のデータへのアクセスには影響しません。 |
「非システムディスクまたはディスクエラー」 |
同上。 |
「コマンドインタープリタが不良または見つかりません」 |
このメッセージは、コマンド インタープリターが不良または見つからないために表示されます。たとえば、オペレーティング システムが現在のパスで command.com を見つけられない場合、または command.com が破損している場合などです。 |