| 開発者 | マイクロソフト、SCP、IBM、コンパック、デジタルリサーチ、ノベル、カルデラ |
|---|---|
| フルネーム | ファイルアロケーションテーブル:FAT12(12ビット 版)、FAT16(16ビット 版)、FAT32(28ビット使用の32ビット 版 )、exFAT(64ビット 版) |
| 紹介された | 1977年 (スタンドアロン ディスク BASIC-80 ) FAT12: 1980年8月 (SCP QDOS ) FAT16: 1984年8月 (IBM PC DOS 3.0) FAT16B: 1987年11月 ( Compaq MS-DOS 3.31) FAT32: 1996年8月 ( Windows 95 OSR2 ) exFAT: 2006年11月 ( Windows Embedded CE 6.0 ) |
| パーティションID | MBR / EBR : FAT12 : ea FAT16 : ea FAT32 : ea exFAT : ea BDP : 0x01 0x040x060x0E 0x0B0x0C 0x07EBD0A0A2-B9E5-443387C0-68B6B72699C7 |
| 構造物 | |
| ディレクトリの内容 | テーブル |
| ファイル割り当て | リンクリスト |
| 不良ブロック | クラスタータグ付け |
| 制限 | |
| 最大容量サイズ | FAT12: 32 MB ( 64 KBクラスターの場合は 256 MB ) FAT16: 2 GB ( 64 KBクラスターの場合は 4 GB ) FAT32: 2 TB ( 4 KBセクターの場合は16 TB ) |
| 最大ファイルサイズ | FAT16BとFAT32の場合、4,294,967,295バイト(4GB - 1) [ 1 ] |
| ファイルの最大数 | FAT12: 8KBクラスターで4,068個、 FAT16: 32KBクラスターで65,460個、FAT32: 32KBクラスターで268,173,300個 |
| ファイル名の最大長 | 8.3 ファイル名、またはLFNを使用する場合は255 UCS-2文字 |
| 特徴 | |
| 記録された日付 | 変更日時、作成日時(DOS 7.0以降のみ)、アクセス日時(ACCDATEが有効になっている場合のみ利用可能)、[ 2 ]削除日時(DELWATCH 2のみ) |
| 日付範囲 | 1980年1月1日から2099年12月31日(2107年12月31日)まで |
| 日付解決 | 最終更新時刻は2秒、作成時刻は10ミリ秒、アクセス日は1日、削除時刻は2秒 |
| フォーク | ネイティブではない |
| 属性 | 読み取り専用、非表示、システム、ボリューム、ディレクトリ、アーカイブ |
| ファイルシステムのアクセス許可 | FAT12/FAT16: ファイル、ディレクトリ、ボリュームの読み取り、書き込み、実行、削除のアクセス権は、DR-DOS、PalmDOS、Novell DOS、OpenDOS、FlexOS、4680 OS、4690 OS、Concurrent DOS、Multiuser DOS、System Manager、REAL/32でのみ有効です(実行権限は FlexOS、4680 OS、4690 OS でのみ有効。個別のファイル/ディレクトリのパスワードは FlexOS、4680 OS、4690 OS では無効。ワールド/グループ/所有者のアクセス許可クラスは、マルチユーザーセキュリティがロードされている場合のみ有効)。FAT32: 部分的、DR-DOS、REAL/32、4690 OS でのみ有効 |
| 透明な圧縮 | FAT12/FAT16: ボリュームごと、SuperStor、Stacker、DoubleSpace、DriveSpace FAT32: なし |
| 透過的な暗号化 | FAT12/FAT16: DR-DOSでのみボリュームごとに利用可能FAT32: 不可 |
FATファイルシステムは、 MS-DOSおよびWindows 9xファミリーのオペレーティングシステムで使用されるファイルシステムです。[ 3 ]モバイルデバイスや組み込みシステムでも引き続き使用されており、1981年から現在に至るまで、ほぼあらゆる種類と年代のコンピュータとデバイス間のデータ交換に適したファイルシステムです。
FATファイルシステムは、以下の4つの領域で構成されています。
FAT は、ヘッダーのすべてのエントリ (明示的に記載されている場合は Atari ST ブート セクタの一部のエントリを除く) と FAT に対してリトルエンディアン形式を使用します。 [ 5 ]クラスタの数に必要な数よりも多くの FAT セクタを割り当てることができます。対応するクラスタがない場合、各 FAT コピーの最後のセクタの末尾は使用されません。セクタの総数 (ブート レコードに記録されている数) は、データ (クラスタ × クラスタあたりのセクタ数)、FAT (FAT の数 × FAT あたりのセクタ数)、ルート ディレクトリ (FAT32 の場合は該当なし)、およびブート セクタを含む隠しセクタで使用されるセクタ数よりも大きくなる可能性があります。この場合、ボリュームの末尾に未使用のセクタが発生します。パーティションにファイルシステムが占めるセクタの総数よりも多くのセクタが含まれている場合も、ボリュームの後のパーティションの末尾に未使用のセクタが発生します。
フロッピーディスクなどの非パーティション化ストレージデバイスでは、ブートセクタ(VBR)は最初のセクタ(物理CHSアドレス0/0/1またはLBAアドレス0の論理セクタ0)です。ハードディスクなどのパーティション化ストレージデバイスでは、ブートセクタはデバイスのパーティションテーブルで指定されたパーティションの最初のセクタです。
DOS 3.0 BPB:
以下の拡張機能はDOS 3.0以降文書化されていますが、DOS 2.11の一部の版ですでにサポートされていました。[ 28 ] MS-DOS 3.10はDOS 2.0フォーマットをサポートしていましたが、DOS 3.0フォーマットも使用できました。
DOS 3.2 BPB:
公式には、MS-DOS 3.20 は依然として DOS 3.0 フォーマットを使用していたが、 6 バイト長いフォーマットをサポートするように既に適応されていSYSたFORMAT(ただし、すべてのエントリが使用されたわけではない)。
DOS 3.31 BPB:
DOS 3.31で正式に導入され、DOS 3.2では使用されなかったこの形式ですが、一部のDOS 3.2ユーティリティは既にこの新しい形式を認識するように設計されています。公式ドキュメントでは、オフセット0x013の論理セクタエントリがゼロの場合にのみ、これらの値を信頼することを推奨しています。
ボリュームの指定されたクラスタ番号をCN論理セクター番号に変換する簡単な式は次のとおりですLSN。[ 24 ] [ 25 ] [ 26 ]
SSA=RSC+FN×SF+ceil((32×RDE)/SS)RSCFNSFRDESSceil(x)LSN=SSA+(CN−2)×SCSCパーティション化されていないメディアでは、ボリュームの隠しセクター数はゼロであるため、ボリュームの論理セクターサイズが基となるメディアの物理セクターサイズと同一である限り、アドレスは同じになります。このような条件下では、アドレスとアドレス間の変換もLSN簡単です。LBACHSLSNs
LSN=SPT×(HN+(NOS×TN))+SN−1ここで、トラックごとのセクター数SPTはオフセット0x018に、側面数はオフセット0x01Aに格納されます。トラック番号、ヘッド番号、セクター番号はシリンダーヘッドセクターに対応します。この式は、既知の CHS からLBAへの変換を示します。NOSTNHNSN
OS/2 1.0およびDOS 4.0以降、FAT12およびFAT16で使用されている追加構造。拡張BIOSパラメータブロック(EBPB)とも呼ばれる(セクターオフセット0x024より下のバイトはDOS 3.31 BPBと同じ)。
本質的に、FAT32 は 28 バイトを EBPB に挿入し、その後に FAT12 および FAT16 の場合と同様に残りの 26 (または場合によっては 7) EBPBバイトを挿入します。Microsoft および IBM のオペレーティングシステムは、ボリュームで使用される FAT ファイルシステムのタイプを、使用される BPB フォーマットや指定されたファイルシステム タイプではなく、クラスタの数のみによって決定します。つまり、技術的には、FAT12 および FAT16 ボリュームにも「FAT32 EBPB」を使用すること、また、小さな FAT32 ボリュームに DOS 4.0 EBPB を使用することも可能です。このようなボリュームは、Windows オペレーティングシステムによって奇妙な条件下で作成されることが判明したため、[ nb 7 ]オペレーティングシステムは、これらのハイブリッド形式に対応できるように準備しておく必要があります。
DOS 3.2 より前のバージョンでは、 BPB が存在する場合でも、FAT12 フロッピーディスクのフォーマットを判断するために、BPB 内のメディア記述子バイトまたは最初の FAT のクラスタ 0 内のFAT IDバイトに完全にまたは部分的に依存していました。検出された FAT ID とドライブの種類に応じて、BPB に実際に格納されている値を使用する代わりに、以下のいずれかの BPB プロトタイプをデフォルトで使用します。[ nb 1 ]
当初、FAT ID は、80 トラック (40 トラックではなく) フォーマットを示すためにビット 2 以外のすべてのビットがクリアされ、9 セクタ (8 セクタではなく) フォーマットを示すためにビット 1 がクリアされ、片面 (両面ではなく) フォーマットを示すためにビット 0 がクリアされたビット フラグとなることを意図していました[ 7 ]。しかし、この方式はすべての OEM で採用されたわけではなく、ハードディスクと高密度フォーマットの導入により廃止されました。また、86-DOSおよび MS-DOS でサポートされているさまざまな 8 インチ フォーマットもこの方式には適合しません。
Microsoft は、FAT ID 0xFEの 2 つの 8 インチ フォーマットを区別するために、単一密度のアドレス マークを読み取ろうとすることを推奨しています。これによりエラーが発生する場合は、メディアが二重密度である必要があります。[ 23 ]
この表には、86-DOSでサポートされている互換性のない8インチおよび5.25インチFAT12フロッピーフォーマットは記載されていません。これらのフォーマットは、ディレクトリエントリのサイズ(16バイト対32バイト)または予約セクタ領域の範囲(複数のトラック全体対1つの論理セクタのみ)が異なります。
Apricot PCおよびF1e [ 34 ]用のMS-DOSで使用されていた片面 315 KB FAT12 フォーマットの実装では、そのコンピュータの非 IBM 互換 BIOS に対応するため、ブート セクタのレイアウトが異なっていました。ジャンプ命令と OEM 名は省略され、MS-DOS BPB パラメータ (標準ブート セクタのオフセット0x00B - 0x017 ) はオフセット0x050に配置されていました。Portable 、F1、PC duo、およびXi FD は、代わりに非標準の両面 720 KB FAT12 フォーマットをサポートしていました。[ 34 ]ブート セクタのレイアウトとメディア ID の違いにより、これらのフォーマットは他の多くのオペレーティングシステムと互換性がありませんでした。これらのフォーマットのジオメトリ パラメータは次のとおりです。
Apricot MS-DOSの後のバージョンでは、Apricot独自のブートセクタを持つディスクに加え、標準ブートセクタを持つディスクの読み書きにも対応するようになった。これらのフォーマットは、 Apricot ACTシリーズ向けのDOS Plus 2.1e/gでもサポートされていた。
BBC Master 512用の DOS Plus 適応版は、従来のブート セクタをまったく使用しない 80 トラック、両面、倍密度 5.25 インチ ドライブで 2 つの FAT12 フォーマットをサポートしていました。 800 KB データ ディスクはブート セクタを省略し、単一の FAT コピーで開始しました。[ 35 ]論理セクタ 0 に再配置された FAT の最初のバイトを使用して、ディスクの容量が決定されました。 640 KB ブート ディスクは、ブート ローダを含むミニチュアADFSファイルシステムで開始し、その後に単一の FAT が続きます。 [ 35 ] [ 36 ]また、640 KB フォーマットは、物理 CHS セクタ番号が 0 から始まる (一般的な 1 ではない) こと、およびセクタがセクタ - トラック - ヘッドの順序でインクリメントされる (一般的なセクタ - ヘッド - トラックではない) 点で異なっていました。[ 36 ] FAT は次のトラックの先頭から開始されました。これらの違いにより、これらのフォーマットは他のオペレーティングシステムでは認識されません。これらのフォーマットのジオメトリパラメータは次のとおりです。
Master 512 用の DOS Plus は、論理セクター 1 の FAT の最初のバイトを使用して容量を判断することにより、180 KBまたは360 KBにフォーマットされた標準的な PC ディスクにもアクセスできました。
DEC Rainbow 100(全バリエーション)は、80トラック、片面、4倍密度の5.25インチドライブでFAT12フォーマットをサポートしていました。最初の2トラックはブートローダー用に予約されていましたが、MBRもBPBも含まれていませんでした(MS-DOSは代わりに静的なメモリ内BPBを使用していました)。ブートセクタ(トラック0、サイド0、セクタ1)は、DI 0xF3で始まるZ80コードでした。8088ブートストラップはZ80によってロードされました。トラック1、サイド0、セクタ2は、メディア/FAT IDバイト0xFAで始まります。フォーマットされていないディスクでは、代わりに0xE5が使用されます。ファイルシステムは、トラック2、サイド0、セクタ1から始まります。FATのコピーが2つあり、ルートディレクトリには96個のエントリがあります。さらに、2:1のセクタインターリーブを実現するために、物理トラックと論理トラックのマッピングがあります。ディスクは、物理セクタの順にフォーマットされていました。予約トラックの後のトラックには1から10までの番号が振られているが、1から10までの論理セクターは物理セクター1、6、2、7、3、8、4、9、5、10に格納されている。[ 37 ]
「FS情報セクター」は、特定の操作(特に空き容量の取得)のアクセス時間を短縮するためにFAT32 [ 38 ]で導入されました。これは、FAT32 EBPBブートレコードで指定された論理セクター番号の位置0x030(通常はブートレコードの直後の論理セクター1)にあります。
セクターのデータは古くなっている可能性があり、現在のメディアの内容を反映していない場合があります。これは、すべてのオペレーティングシステムがこのセクターを更新または使用するわけではなく、また、更新または使用する場合でも、ボリュームを適切にアンマウントせずにメディアを取り出した場合や、電源障害後にメディアを取り出した場合には、その内容が有効ではないためです。したがって、オペレーティングシステムは、まずクラスター 1の FAT エントリまたはオフセット0x041の FAT32 EBPBにあるボリュームのオプションのシャットダウン ステータス ビット フラグを調べ、これらのビット フラグがボリュームが以前に適切にアンマウントされていなかったことを示している場合は、FS 情報セクターに格納されているデータを無視する必要があります。これにより、最初の空き領域クエリまたはデータ クラスター割り当ての速度が低下する可能性がある以外に問題は発生しません。断片化を参照してください。
このセクターが FAT32 ボリュームに存在する場合、最小の論理セクターサイズは 512 バイトですが、そうでない場合は 128 バイトになります。一部の FAT32 実装では、オフセット0x030のエントリに0xFFFF [ 19 ] (または0x0000 )の値を指定することで FS 情報セクターをオプションにすることで、Microsoft の仕様のわずかな変更をサポートしています。
ボリュームのデータ領域は、同じサイズのクラスタ(連続した小さな領域のブロック)に分割されます。クラスタのサイズは、使用されている FAT ファイルシステムの種類とドライブのサイズによって異なります。一般的なクラスタのサイズは 2~32 KiBです。[ 39 ]
各ファイルは、そのサイズに応じて 1 つ以上のクラスタを占有する場合があります。そのため、ファイルは FAT では単方向連結リストで表現されます。FAT は、FAT12、FAT16、FAT32 のいずれであるかに応じて、12、16、または 32 ビット長のエントリで構成されます。連続するエントリは連続するクラスタに対応し、エントリの値は、特定のファイル内の次のクラスタが何であるかを示すリンクです。そのクラスタに対応するエントリを見ると、次のクラスタがどこにあるかがわかります。このようにして、そのファイルを含むクラスタチェーンの最後のクラスタに対応するエントリが見つかるまで続きます。クラスタは必ずしもディスク表面上で互いに隣接しているわけではなく、多くの場合、データ領域全体に断片化されています。
FATファイルシステムの各バージョンでは、FATエントリのサイズが異なります。エントリ数が小さいほどFATのサイズは小さくなりますが、大きなパーティションでは大きなクラスタで割り当てる必要があるため、スペースが無駄になります。
FAT12ファイルシステムは、 FATエントリごとに12ビットを使用するため、2つのエントリで3バイトになります。これは一貫してリトルエンディアンです。つまり、3バイトを1つのリトルエンディアン24ビット数とみなした場合、最下位12ビットが最初のエントリ(クラスタ0など)を表し、最上位12ビットが2番目のエントリ(クラスタ1など)を表します。言い換えれば、行の最初のクラスタの下位8ビットは最初のバイトに格納され、上位4ビットは2番目のバイトの下位4ビットに格納されます。一方、行の次のクラスタの下位4ビットは2番目のバイトの上位4ビットに格納され、上位8ビットは3番目のバイトに格納されます。
FAT16ファイルシステムはFATエントリごとに16ビットを使用するため、1つのエントリはリトルエンディアンのバイト順で2バイトにまたがります。
FAT32ファイルシステムは、 FATエントリごとに32ビットを使用するため、1つのエントリはリトルエンディアンのバイト順で4バイトに相当します。各エントリの上位4ビットは他の用途のために予約されており、フォーマット時にクリアされるため、それ以外の場合は変更しないでください。エントリを28ビットクラスタアドレスとして解釈する前に、これらのビットをマスクする必要があります。
ファイルアロケーションテーブル(FAT)は、予約済みセクター領域の直後に続く連続したセクター群です。これは、ボリューム上の各クラスタに対応するエントリのリストを表します。各エントリには、次の4つのうちの1つが記録されます。
DOSの初期バージョンでファイルシステムを認識するには、システムがボリュームから起動されているか、ボリュームのFATがボリュームの2番目のセクター(物理CHSアドレス0/0/2またはLBAアドレス1の論理セクター1)から始まっている必要があります。つまり、ブートセクターの直後から始まっている必要があります。オペレーティングシステムは、有効なBPBが見つからないDOS 1.0~1.1 FATフロッピーディスクのFATのクラスタ0エントリからFAT IDを見つけるために、FATのこの固定位置を前提としています。
FATストアの最初の2つのエントリは、特別な値を保存します。
最初のエントリ(FAT のクラスタ 0)には、MS-DOS 1.20およびPC DOS 1.1以降、ビット 7~0 に FAT ID が格納されます(許容値は0xF0~0xFF 、 0xF1~0xF7は予約済み)。この値は、DOS 2.0 以降、ブート セクタの BPB のオフセット0x015にもコピーされます。このエントリの残りの 4 ビット(FAT12 の場合)、8 ビット(FAT16 の場合)、または 20 ビット(FAT32 の場合、上位 4 ビットはゼロ)は常に 1 です。これらの値は、値がゼロであるすべてのデータ クラスタの「トラップ オール」エンド オブ チェーン マーカーとしても機能するように配置されています。さらに、 0xFF (および0x00 )以外の FAT ID については、ファイルシステム ドライバが使用する正しいニブルとバイトの順序を判別できますが、FAT ファイルシステムは公式にはリトルエンディアン表現のみを使用しており、代わりにビッグエンディアン値を使用するバリアントの既知の実装はありません。86 -DOS 0.42 から MS-DOS 1.14 までは、FAT ID の代わりにハードワイヤード ドライブ プロファイルを使用していましたが、86-DOS 0.42より前に使用されていた 32 バイトまたは 16 バイトのディレクトリ エントリでフォーマットされたメディアを区別するためにこのバイトを使用していました。
2 番目のエントリ (FAT のクラスタ 1) には、フォーマッタで使用されるクラスタチェーンの終了マーカーが格納されますが、通常は常に0xFFF / 0xFFFF / 0x0FFFFFFFが保持されます。つまり、FAT32 ボリュームのビット 31 ~ 28 を除き、これらのビットは通常常に設定されます。ただし、一部の Microsoft オペレーティングシステムでは、ボリュームが実行中のオペレーティングシステムを格納するボリュームでない場合 (つまり、ここで0x0FFFFFFFの代わりに0xFFFFFFFFを使用する場合) にこれらのビットを設定します。[ 40 ] (代替のチェーン終了マーカーと併用して、最低ビット 2-0 は、許可されている最低のチェーン終了マーカー0xFF8 / 0xFFF8 / 0x?FFFFFF8に対してゼロにすることができます。クラスター0xFF0 / 0xFFF0 / 0x?FFFFFF0以上が公式に予約されているため、ビット 3 も予約する必要があります。これらのビットのいずれかが設定されていない場合、一部のオペレーティングシステムではボリュームをマウントできない可能性があるため、デフォルトのチェーン終了マーカーは変更しないでください。) DOS 1 および 2 では、エントリは将来の使用のために予約されていると文書化されていました。
DOS 7.1 以降、このクラスタエントリの最上位 2 ビットには、FAT16 および FAT32 の現在のボリュームの状態を表す 2 つのオプションのビットフラグが保持される場合がありますが、FAT12 ボリュームでは保持されません。これらのビットフラグはすべてのオペレーティングシステムでサポートされているわけではありませんが、この機能をサポートするオペレーティングシステムでは、シャットダウン時にこれらのビットが設定され、起動時に最上位ビットがクリアされます。ボリュームをマウントするときに ビット 15 (FAT16 の場合) またはビット 27 (FAT32 の場合) [ 41 ]が設定されていない場合、シャットダウンまたはイジェクトの前にボリュームが適切にアンマウントされておらず、不明で、場合によっては「ダーティ」な状態になっています。[ 27 ] FAT32 ボリュームでは、FS 情報セクターに古いデータが含まれている可能性があるため、使用しないでください。オペレーティングシステムは通常、次の起動時にSCANDISKまたはCHKDSKを実行します[ nb 10 ] [ 41 ] (ただし、リムーバブル メディアの挿入時には実行されません)、ボリュームの整合性を確保し、場合によっては再確立します。 ビット 14 (FAT16 の場合) またはビット 26 (FAT32 の場合) [ 41 ]がクリアされている場合、オペレーティングシステムは起動時にディスク I/O エラーを検出しており[ 41 ]、不良セクタの可能性を示しています。この拡張機能を認識しているオペレーティングシステムは、これを次回の起動時にサーフェス スキャン ( SCANDISK ) を実行するように推奨するものと解釈します。 [ 27 ] [ 41 ] (同様のビット フラグ セットが、オフセット0x1Aの FAT12/FAT16 EBPB またはオフセット0x36の FAT32 EBPBに存在します。クラスタ 1 エントリは、ファイルシステム ドライバがボリュームをマウントするとアクセスできますが、EBPB エントリはボリュームがマウントされていない場合でも使用できるため、ディスク ブロック デバイス ドライバやパーティショニング ツールで使いやすくなっています。)
BPB内のFATの数が2に設定されていない場合、 TFAT対応オペレーティングシステムでは、最初のFAT(クラスタ1)の2番目のクラスタエントリがTFATボリュームの状態を反映することもあります。そのFATのクラスタ1エントリの値が0の場合、 2番目のFATが最後に確認された有効なトランザクション状態を表しており、最初のFATにコピーする必要があることを示しています。一方、すべてのビットが設定されている場合は、最初のFATが2番目のFATにコピーされる必要があります。
非標準の FAT12/FAT16 実装の中には、クラスタ 1 エントリを使用して可変サイズのルート ディレクトリの開始クラスタ (通常 2 [ 33 ] ) を格納するものがあります。これは、 BPB のルート ディレクトリ エントリの数が0 であり、FAT32 EBPB が見つからない場合 (オフセット0x042にシグネチャ0x29または0x28がない場合) に発生する可能性があります。[ 20 ]ただし、この拡張機能は、クラスタ 1 エントリの他の使用方法と競合するため、主流のオペレーティングシステムではサポートされていません。 [ 20 ]この拡張機能を、クラスタ数が0xFEF未満の FAT12 ボリュームと、クラスタ数が0x3FEF未満でFAT が 2 個の FAT ボリュームのみに許可すれば、ほとんどの競合は排除できます。
これらの最初の 2 つの FAT エントリには特殊な値が格納されるため、データ クラスタ 0 または 1 は存在しません。最初のデータ クラスタ (FAT12/FAT16 の場合はルート ディレクトリの後) はクラスタ 2 であり、[ 33 ]データ領域の開始を示します。
FATエントリ値:
FAT32では、クラスタ番号に28ビットを使用します。32ビットのFATエントリの残りの4ビットは通常ゼロですが、予約済みであり、変更してはいけません。標準に準拠したFAT32ファイルシステムドライバまたはメンテナンスツールは、上位4ビットがゼロであることを前提としてはならず、クラスタ番号を評価する前にこれらのビットを削除する必要があります。これは、将来的にこれらのビットが他の用途に使用される可能性がある拡張に対応するためです。ファイルシステムドライバは、新しいクラスタを割り当てる際にこれらのビットをクリアしてはなりませんが、再フォーマット時にはクリアする必要があります。
FAT12およびFAT16ファイルシステムにおけるルートディレクトリテーブルは、特別なルートディレクトリ領域に配置されます。
FAT12およびFAT16ファイルシステムでは、ルートディレクトリテーブルは特別なルートディレクトリ領域に格納されますが、それ以外のすべてのディレクトリテーブルはデータ領域に格納されます。データ領域に格納されるディレクトリのエントリ数は、FATのチェーンに別のクラスタを追加することで増やすことができます。
ディレクトリテーブルは、ディレクトリ(フォルダとも呼ばれる)を表す特殊なファイルです。86 -DOS 0.42以降、[ 46 ]各ファイル、または (MS-DOS 1.40 および PC DOS 2.0 以降) ファイル内に格納されているサブディレクトリは、テーブル内の 32 バイトのエントリで表されます。各エントリには、名前、拡張子、属性 (アーカイブ、ディレクトリ、隠し、読み取り専用、システム、ボリューム)、ファイル/ディレクトリ データの最初のクラスタのアドレス、ファイル/ディレクトリのサイズ、日付[ 46 ]、および (PC DOS 1.1 以降) 最終更新時刻が記録されます。86-DOS の以前のバージョンでは、16 バイトのディレクトリ エントリのみが使用され、16 MB を超えるファイルや最終更新時刻はサポートされていませんでした。[ 46 ]
FATファイルシステム自体は、サブディレクトリを割り当てるための空きクラスタがある限り、サブディレクトリツリーの深さに制限を設けませんが、MS-DOS/PC DOSの内部Current Directory Structure (CDS)は、ディレクトリの絶対パスを66文字(ドライブ文字を含むが、NULバイト区切り文字は除く)に制限します[ 24 ] [ 25 ] [ 26 ]。そのため、サブディレクトリの最大サポート深度は、いずれにせよ32に制限されます。Concurrent DOS、Multiuser DOS、およびDR DOS 3.31から6.0(1992-11アップデートを含むまで)は、作業ディレクトリへの絶対パスを内部的に保存しないため、この制限は表示されません[ 47 ] 。Atari GEMDOSにも同じことが当てはまりますが、Atari Desktopは8レベルを超えるサブディレクトリをサポートしていません。この拡張機能を認識しているほとんどのアプリケーションは、少なくとも127 バイトまでのパスをサポートしています。 FlexOS、4680 OS、4690 OSも最大127 バイトの長さをサポートしており、最大60レベルの深さまで対応しています。[ 48 ] PalmDOS、DR DOS 6.0(BDOS 7.1以降)以降、Novell DOS、OpenDOSはMS-DOS互換のCDSを備えているため、MS-DOS/PC DOSと同じ長さ制限があります。
各エントリの前には、 VFATロングファイル名(LFN)をサポートするために「ダミーエントリ」を追加できます。詳細は後述します。
DOSの短いファイル名に使用できる文字は以下のとおりです。
A–Z0–9MKDIRMDRMDIRRD! # $ % & ' ( ) - @ ^ _ ` { } ~ 以下のASCII文字は除外されます。
" * / : < > ? \ | Windows/MS-DOSにはシェルエスケープ文字がありません+ , . ; = [ ]長いファイル名でのみ許可されていますa-zとして保存されますA- Z; 長いファイル名で使用できますDOS 1および2では、フリーエントリマーカーとして使用される文字229(0xE5)をファイル名の最初の文字として使用することは許可されていませんでした。DOS 3.0以降では、この制限を回避するための特別な措置が追加されました。
AtariのGEMDOSでは以下の追加文字が使用可能ですが、MS-DOS/PC DOSとの互換性を保つためには使用を避けるべきです。
" + , ; < = > [ ] |DR DOS 3.31 以降、PalmDOS、Novell DOS、OpenDOS、Concurrent DOS 、Multiuser DOS、System Manager、および REAL/32では、ファイル名にセミコロン ( ;) を使用することは避けるべきです。これは、ファイルおよびディレクトリのパスワードを指定する構文 " " と競合する可能性があるためです。オペレーティングシステムは、ファイル名をディスクに保存する前に、セミコロンを1 つ[ 47 ] (DR-DOS 7.02 以降では 2 つ)と保留中のパスワードを削除します。(コマンドプロセッサ4DOS は、インクルードリストにセミコロンを使用し、ワイルドカードをサポートするコマンドでパスワード保護されたファイルの場合は、セミコロンを二重にする必要があります。[ 47 ] ) ...\DIRSPEC.EXT;DIRPWD\FILESPEC.EXT;FILEPWD
アットマーク文字(@)は、多くの DR-DOS、PalmDOS、Novell DOS、OpenDOS、Multiuser DOS、System Manager、REAL/32 コマンド、および 4DOS でファイル リストに使用されるため、ファイル名に使用するのが難しい場合があります。[ 47 ]
マルチユーザーDOSおよびREAL/32では、感嘆符(!)は単一のコマンド行内の複数のコマンドを区切るために使用されるため、有効なファイル名文字ではありません。[ 47 ]
IBM 4680 OSおよび4690 OSでは 、ファイル名に以下の文字は使用できません。
? * : . ; , [ ] ! + = < > " - / \ |さらに、ファイル名の1文字目、4文字目、5文字目、8文字目には、ホストコマンドプロセッサ(HCP)および入力シーケンステーブル構築ファイル名と競合するため、以下の特殊文字は使用できません。
@ # ( ) { } $ &DOS ファイル名は現在のOEM 文字セットCHCPに基づいています。特定のコードページで処理される文字が、別のコードページ (DOS コマンド) では大文字と小文字、ソート、ファイル名文字としての有効性に関して異なる方法で解釈される場合、予期せぬ影響が生じる可能性があります。
Microsoftが長いファイル名と作成/アクセス時刻のタイムスタンプのサポートを追加する前は、ディレクトリエントリのバイト0x0C~0x15は、他のオペレーティングシステムによって追加のメタデータを格納するために使用されていました。特に、Digital Researchファミリーのオペレーティングシステムは、ファイルのパスワード、アクセス権、所有者ID、およびファイルの削除データをそこに格納していました。Microsoftの新しい拡張機能は、デフォルトではこれらの拡張機能と完全には互換性がありませんが、そのほとんどはサードパーティのFAT実装(少なくともFAT12およびFAT16ボリューム上)で共存できます。
ルートディレクトリ領域とサブディレクトリの両方における 32 バイトのディレクトリエントリは、次の形式になります ( 8.3 ファイル名も参照)。
FlexOSベースのオペレーティングシステムであるIBM 4680 OSおよびIBM 4690 OS は、ディレクトリエントリ内の以前に予約された領域の一部に格納された独自の配布属性をサポートしています。[ 62 ]
一部のオペレーティングシステムで見られる互換性のない拡張機能には、以下のようなものがあります。
FATファイルシステムのFAT12、FAT16、FAT16B、およびFAT32の各バリアントには、クラスタ数とクラスタあたりのセクタ数(1、2、4、…、128)に基づく明確な制限があります。セクタあたりの一般的な値である512バイトの場合:
FAT12 の要件 : 1,024 クラスターごとに FAT のコピーごとに 3 セクタ FAT16 の要件 : 256 クラスターごとに FAT のコピーごとに 1 セクタ FAT32 の要件 : 128 クラスターごとに FAT のコピーごとに 1 セクタ FAT12 の範囲 : 1 ~ 4,084 クラスター : FAT のコピーごとに 1 ~ 12 セクタ FAT16 の範囲 : 4,085 ~ 65,524 クラスター : FAT のコピーごとに 16 ~ 256 セクタ FAT32 の範囲 : 65,525 ~ 268,435,444 クラスター : FAT のコピーごとに 512 ~ 2,097,152 セクタ FAT12 の 最小値 : 1 セクタ/クラスター × 1 クラスター = 512 バイト (0.5 KiB) FAT16 の最小値 : 1 セクタ/クラスター × 4,085 クラスター = 2,091,520 バイト (2,042.5 KB) FAT32 最小 : クラスターあたり 1 セクタ × 65,525 クラスター = 33,548,800 バイト (32,762.5 KB) FAT12 最大 : クラスターあたり 64 セクタ × 4,084 クラスター = 133,824,512 バイト (≈ 127 MB) [FAT12 最大 : クラスターあたり 128 セクタ × 4,084 クラスター = 267,694,024 バイト (≈ 255 MB)] FAT16 最大 : クラスターあたり 64 セクタ × 65,524 クラスター = 2,147,090,432 バイト (≈2,047 MB) [FAT16 最大 : クラスターあたり 128 セクタ × 65,524 クラスター = [ FAT32 最大 : クラスターあたり 8 セクタ × 268,435,444 クラスター = 1,099,511,578,624 バイト (約 1,024 GB)] FAT32 最大 : クラスターあたり 16 セクタ × 268,173,557 クラスター = 2,196,877,778,944 バイト (約 2,046 GB) [FAT32 最大 : クラスターあたり 32 セクタ × 134,152,181 クラスター = 2,197,949,333,504 バイト (約 2,047 GB)] [FAT32 最大 : クラスターあたり 64 セクタ × 67,092,469 クラスター = 2,198,486,024,192 [FAT32 最大 : 128 セクター/クラスター × 33,550,325 クラスター = 2,198,754,099,200 バイト(約 2,047 GB) ]
FAT32の各エントリは32ビット(4バイト)を占めるため、最大クラスタ数(268435444)では、512バイトのセクタサイズに対して2097152個のFATセクタが必要になります。2097152は0x200000であり、この値を格納するには2バイト以上が必要です。そのため、FAT32では、FAT16Bバリアントで導入されたセクタ総数を表す32ビット値の直後に、FAT32ブートセクタに新しい32ビット値が導入されました。
DOS 4.0で導入されたブートレコードの拡張機能は、マジックナンバー40(0x28)または41(0x29)で始まります。通常、FATドライバはクラスタ数のみを参照してFAT12、FAT16、FAT32を区別します。ブートレコード内のFATバリアントを識別する人間が読める文字列は、DOS 4.0以降でフォーマットされたメディアにのみ存在するため、無視されます。
クラスタあたりのディレクトリ エントリ数を決定するのは簡単です。各エントリは 32 バイトを占めます。これにより、セクタ サイズが 512 バイトの場合、セクタあたり 16 エントリになります。DOS 5 RMDIR/RDコマンドは、サブ ディレクトリの最初の " ." (このディレクトリ) と " .." (親ディレクトリ) エントリを直接削除するため、RAM ディスクでは FAT12 でセクタ サイズ 32 が可能ですが、クラスタあたり 2 つ以上のセクタが必要です。DOS 4 拡張機能のない FAT12 ブート セクタは、最初の不要な FAT16B 32 ビット数の隠しセクタの前に 29 バイトを必要とし、これにより (RAM ディスクでは使用されない) ブート コードとすべてのブート セクタの末尾にあるマジック0x55 0xAA用に 3 バイトが残ります。Windows NTでサポートされている最小のセクタ サイズは 128 です。
Windows NTオペレーティングシステムでは、FORMATコマンドオプション/A:128Kと は、それぞれセクターサイズ1024と2048で/A:256K最大クラスタサイズ0x80(128)に対応します。一般的なセクターサイズ512の場合、/A:64Kクラスタあたり128セクターになります。
ECMA-107 [ 24 ]と ISO/IEC 9293 [ 25 ] [ 26 ]のどちらの版も、式によって決定される最大クラスタ番号 を指定し、将来の標準化のために最大 4086 ( 0xFF6、FAT12) および後に 65526 ( 0xFFF6 、FAT16)までのクラスタ番号を予約しています。MAXMAX=1+trunc((TS-SSA)/SC)MAX+1
Microsoft の EFI FAT32 仕様[ 4 ]では、4085 クラスター未満の FAT ファイルシステムは FAT12、65,525 クラスター未満の FAT ファイルシステムは FAT16、それ以外の場合は FAT32 であると規定されています。FAT の先頭にあるクラスター 0 のエントリは、BPB にあるメディア記述子バイトと同一でなければなりませんが、クラスター 1 のエントリは、フォーマッタがクラスター チェーンに使用するチェーン終了値 ( 0xFFF、0xFFFFまたは0x0FFFFFFF ) を反映します。クラスター番号 0 と 1 のエントリは、FAT12 の場合でもバイト境界で終了します。たとえば、メディア記述子0xF9の場合は0xF9FFFFとなります。
最初のデータクラスタは 2 であり、[ 33 ]なので、最後のクラスタにはMAX番号が与えられますMAX+1。これにより、FAT12 ではデータクラスタ番号 2...4085 ( 0xFF5 )、FAT16 では 2...65525 ( 0xFFF5 )、FAT32 では 2...268435445 ( 0x0FFFFFF5 ) となります。
したがって、将来の標準化のために予約されている利用可能な値は、0xFF6 (FAT12) と0xFFF6 (FAT16) のみです。以下に述べるように、「4085 未満」は Linux の実装にも使用されています[ 44 ]またはMicrosoftの FAT 仕様では次のように表現されています。[ 4 ]
… 「< 」と表示されていても、それは「< =」を意味するものではありません。また、数値は正しいことに注意してください。FAT12の最初の数値は4085、FAT16の2番目の数値は65525です。これらの数値と「<」記号は間違っていません。
FATファイルシステムには、新しく書き込まれたファイルがパーティション全体に散らばるのを防ぐ組み込みのメカニズムがありません。[ 65 ]ファイルが頻繁に作成および削除されたり、ファイルの長さが頻繁に変更されたりするボリュームでは、時間の経過とともにメディアの断片化が進みます。
FATファイルシステムの設計では、外部フラグメンテーションの場合のように、ディスク構造に組織的なオーバーヘッドが発生したり、フラグメンテーションの増加に伴って空きストレージ容量が減少したりすることはありませんが、フラグメンテーションされたファイルの読み書きに必要な時間は増加します。これは、オペレーティングシステムがFAT内のクラスタチェーンをたどり(特に大容量ボリュームでは、まず一部をメモリにロードする必要がある)、メディア全体に物理的に分散された対応するデータを読み取る必要があるためです。これにより、低レベルのブロックデバイスドライバがマルチセクタディスクI/Oを実行したり、より大きなDMA転送を開始したりする機会が減少し、結果としてI/Oプロトコルのオーバーヘッド、ディスクドライブ内のアーム移動時間、ヘッドの安定時間が実質的に増加します。また、フラグメンテーションが増加するにつれて、オペレーティングシステムがファイルや空きクラスタを見つけるのに時間がかかるようになるため、ファイル操作も遅くなります。
HPFSやexFATなどの他のファイルシステムでは、使用済みおよび使用可能なクラスタを示す空き領域ビットマップを使用し、これらを素早く参照することで連続した空き領域を見つけることができます。別の解決策としては、すべての空きクラスタを1つ以上のリストにリンクする方法があります( Unixファイルシステムで行われているように)。一方、FATでは、空きクラスタを見つけるために配列としてスキャンする必要があり、大容量ディスクではパフォーマンスが低下する可能性があります。
実際、大きなサブディレクトリ内のファイルを検索したり、FAT ボリューム上の空きディスク容量を計算したりすることは、ディレクトリ テーブルや FAT 全体を線形に読み込む必要があるため、最もリソースを消費する操作の 1 つです。FAT12 および FAT16 ボリュームでは、クラスタの総数と FAT のエントリのサイズがまだ小さかったため、より高度なディスク構造を導入すると、FAT が元々設計および最適化された、最小合計メモリ要件が 128 KB 以下 (DOS など) のリアル モード オペレーティングシステムの複雑さとメモリ フットプリントも増加することを考慮すると、ほとんどの場合、FAT12 および FAT16 ボリュームでは許容範囲内でした。
FAT32 の導入により、特に大容量のボリュームでは、シークやスキャンに時間がかかることがより顕著になりました。Microsoft のRaymond ChenがWindows で作成される FAT32 パーティションの最大サイズを制限する理由として提案した可能性のあるものは、「 」操作の実行に必要な時間でしたDIR。この操作では、常にディスクの空き領域が最後の行に表示されます。[ 66 ]クラスターの数が増えるにつれて、この行の表示に時間がかかりました。そのため、FAT32 では、以前に計算された空き領域の量が電源サイクルを超えて保持される特別なファイルシステム情報セクターが導入されました。これにより、FAT32 フォーマットのリムーバブル メディアを最初にアンマウントせずに取り出すか、オペレーティングシステムを適切にシャットダウンせずにシステムをシャットダウンした場合にのみ、空き領域カウンタを再計算する必要があります。この問題は、ATX以前のスタイルの PC 、通常の DOS システム、および一部のバッテリー駆動の消費者向け製品でよく見られます。
より大きな FAT パーティションによって強制される巨大なクラスタ サイズ (16 KB、32 KB、64 KB) では、クラスタのオーバーハングによるファイルのスラック (ファイルサイズがクラスタ サイズの正確な倍数になることはまれであるため) によるディスク スペースの無駄という形での内部断片化も問題になり始めます。特に、小さなファイルが非常に多い場合に顕著です。
FATファイルシステムドライバ、ブロックデバイスドライバ、ディスクツールの実装に対するさまざまな最適化と調整が考案され、ディスク上の構造のレイアウトを変更することなく、ファイルシステムの固有の設計におけるパフォーマンスのボトルネックのほとんどを克服しています。[ 67 ] [ 68 ]これらはオンライン方式とオフライン方式に分類でき、まずファイルシステムの断片化を回避し、既存の断片化にうまく対処する方法を展開し、ディスク上の構造を並べ替えて最適化することで機能します。最適化が適用されると、FATボリュームのパフォーマンスは、実際のシナリオではより高度なファイルシステムのパフォーマンスに匹敵することが多く、同時に、非常に小規模なシステムや古いシステムでもアクセスできるという利点を維持します。
DOS 3.0 以降では、削除されたファイルのディスク領域を新しい割り当てにすぐに再利用するのではなく、以前に削除されたファイルのディスク領域の使用を開始する前に、以前に使用されていない領域を探します。これにより、削除されたファイルの整合性をできるだけ長く維持できるだけでなく、以前に割り当てられたことのないディスク領域は常に断片化されていないため、ファイルの割り当てが高速化され、断片化が回避されます。DOS は、各マウントされたボリュームの最後に割り当てられたクラスタへのポインタをメモリに保持し、DOS 2.x で行われていた FAT の先頭ではなく、この場所から上に向かって空き領域の検索を開始することでこれを実現します。 [ 13 ] FAT の末尾に達した場合は、空き領域が見つかるか、空き領域が見つからずに元の位置に戻るまで、FAT の先頭から検索を続行します。[ 13 ]これらのポインタは起動後に FAT の開始を指すように初期化されますが、[ 13 ] FAT32 ボリュームでは、DOS 7.1 以降はFS 情報セクタから最後の位置を取得しようとします。ただし、アプリケーションが一時ファイルを頻繁に削除して再作成すると、オペレーティングシステムが void データの整合性を維持しようとするため、このメカニズムは無効になり、結果的に断片化がさらに増加します。[ 13 ]一部の DOS バージョンでは、一時ファイルを作成するための特別な API 関数を使用することで、この問題を回避できます。
さらに、 DOS 3.0 以降では、削除されたファイルのディレクトリ エントリは0xE5とマークされます。 [ 42 ] DOS 5.0 以降では、テーブル内で以前使用されていなかったディレクトリ エントリが使い果たされ、システムがテーブル自体を拡張する必要が生じた場合にのみ、これらのエントリが再利用されるようになります。[ 6 ]
DOS 3.3以降、オペレーティングシステムは、FASTOPEN最近開いたファイルやディレクトリの位置をさまざまな形式のリスト(MS-DOS/PC DOS)またはハッシュテーブル(DR-DOS)で追跡することにより、ファイル操作のパフォーマンスを向上させる手段を提供しており、ファイルのシーク時間とオープン時間を大幅に短縮できます。DOS 5.0より前のバージョンでは、ファイルシステムやディスクドライバをバイパスするディスクデフラグソフトウェアと併用する場合、このようなメカニズムを使用する際には特別な注意が必要です。
Windows NTはFAT上のファイルに事前にディスク領域を割り当て、大きな連続領域を選択しますが、障害が発生した場合、追記中のファイルは実際に書き込まれたときよりも大きくなり、末尾に大量のランダムなデータが付加されます。
その他の高レベルメカニズムでは、起動時または必要に応じてオンデマンドで、より大きな部分または完全な FAT を読み込んで処理し、ディスク上の構造とは異なるボリュームのファイル構造のメモリ内ツリー表現を動的に構築することができます。[ 67 ] [ 68 ]空きクラスタが多いボリュームでは、これは FAT 自体のイメージよりもさらに少ないメモリしか占有しない可能性があります。特に、高度に断片化または満杯のボリュームでは、FAT のイメージがメモリに格納されていても、実際の FAT に対する線形スキャンよりもシークがはるかに高速になります。また、セクタまたはトラックレベルではなく、ファイルとクラスタチェーンの論理的に高いレベルで動作することで、そもそもある程度のファイル断片化を回避したり、バックグラウンドでローカルなファイル断片化の解消やディレクトリ エントリの名前またはアクセス パターンに基づく並べ替えを実行したりすることが可能になります。
FATファイルシステムの断片化に関する問題の一部は、基盤となるブロックデバイスドライバのパフォーマンス制限に起因するものであり、セクターバッファリングやトラックのブロッキング/デブロッキングに利用できるメモリが少ないほど、その影響は顕著になる。
シングルタスクのDOSには、マルチセクター読み取りとトラックのブロッキング/デブロッキングの機能が備わっていましたが、オペレーティングシステムと従来のPCハードディスクアーキテクチャ(一度に未処理の入出力要求は1つのみで、DMA転送はなし)には、アプリケーションが前のチャンクを処理している間に次のデータを非同期的にプリフェッチすることで断片化を軽減できるメカニズムが当初は含まれていませんでした。このような機能は後に利用可能になりました。後のDOSバージョンでは、セクターバッファリングの先読みサポートが組み込まれ、物理セクターレベルまたは論理セクターレベルで動作する動的にロード可能なディスクキャッシュプログラムが付属していました。これらのプログラムは、多くの場合EMSまたはXMSメモリを使用し、適応型キャッシュ戦略を提供したり、 DPMSまたはクローキングを介して保護モードで実行して、従来のDOS APIではなく線形メモリ内のキャッシュデータに直接アクセスすることでパフォーマンスを向上させたりしました。
マイクロソフトのソフトウェアでは、停電やシステムクラッシュが発生した場合にデータ損失が発生する可能性があるため、書き込みキャッシュはデフォルトでは有効になっていないことが多かった(存在する場合)。これは、アプリケーションとシステム間のハードウェアによる保護が不足しているために、データ損失が起こりやすくなるという問題があった。

VFATロングファイル名 (LFN) は、通常のファイルエントリの前にディレクトリに追加のエントリを追加するというトリックを使用して FAT ファイルシステムに保存されます。追加エントリには、ボリューム ラベル、システム、隠し、読み取り専用属性 ( 0x0Fを生成) が付けられますが、これは MS-DOS 環境では想定されていない組み合わせであるため、MS-DOS プログラムやサードパーティ ユーティリティによって無視されます。特に、ボリューム ラベルのみを含むディレクトリは空とみなされ、削除が許可されます。このような状況は、長い名前で作成されたファイルが通常の DOS から削除された場合に発生します。この方法は、DR DOS 6.0 (1991 年) 以降、ボリューム属性を使用して保留中の削除ファイルを隠し、将来的に復元できるようにする DELWATCH メソッドと非常によく似ています。また、1992 年に Ataris および Linux で長いファイル名を保存するために公に議論された方法にも似ています。[ 69 ] [ 70 ]
古いバージョンのDOSでは、ルートディレクトリ内のLFN名をボリュームラベルと誤認する可能性があったため、VFATは(ボリュームラベルが既に存在しない場合)LFN名エントリを追加する前に、ルートディレクトリに空のボリュームラベルを作成するように設計されました。[ nb 14 ]
各ダミーエントリは、ファイルサイズまたはタイムスタンプを含むレコードのフィールドを使用することで、最大 13文字 (26 バイト) のUCS-2文字を含めることができます (ただし、ディスクユーティリティとの互換性のために、開始クラスタフィールドは 0 に設定されています。詳細については、 8.3 ファイル名を参照してください)。これらの 13 文字のエントリは最大 20 個まで連結でき、最大 255 文字の UCS-2 文字の長さをサポートします。[ 55 ]
LFNの最後の文字の位置がディレクトリエントリの境界(13、26、39など)にない場合、次の文字位置に0x0000の終端文字が追加されます。その後、その終端文字も境界にない場合、残りの文字位置は0xFFFFで埋められます。終端文字のみを含むディレクトリエントリは存在しません。
LFNエントリは以下の形式を使用します。
ファイル名を表すために複数のLFNエントリが必要な場合、ファイル名の末尾を表すエントリが最初に配置されます。このエントリのシーケンス番号は、ビット6(0x40 )が設定されており、これが最後の論理LFNエントリであることを示し、シーケンス番号は最大です。以降のエントリではシーケンス番号が減少します。ファイル名の先頭を表すエントリのシーケンス番号は1です。エントリが削除されたことを示すには、0xE5の値が使用されます。
FAT12およびFAT16ボリュームでは、 0x1Aの値がゼロで、0x1Cの値がゼロ以外であることをテストすることで、VFAT LFNとDELWATCHで保留中の削除ファイルを区別できます。
例えば、「ファイル名が非常に長いファイル.拡張子」のようなファイル名は、次のようにフォーマットされます。
チェックサムを使用すると、長いファイル名が 8.3 名と一致するかどうかも検証できます。このような不一致は、同じディレクトリ位置で DOS を使用してファイルが削除され、再作成された場合に発生する可能性があります。チェックサムは、以下のアルゴリズムを使用して計算されます。(pFCBName は、通常のディレクトリエントリに表示される名前へのポインタです。つまり、最初の 8 文字がファイル名で、最後の 3 文字が拡張子です。ドットは暗黙的に含まれています。ファイル名内の未使用のスペースは、スペース文字 (ASCII 0x20 ) で埋められます。たとえば、「Readme.txt」は「 " 」になります。)README␠␠TXT
unsigned char lfn_checksum ( const unsigned char * pFCBName ) { int i ; unsigned char sum = 0 ;for ( i = 11 ; i ; i -- ) sum = (( sum & 1 ) << 7 ) + ( sum >> 1 ) + * pFCBName ++ ;合計を返す; }ファイル名が小文字のみで構成されている場合、または小文字のベース名と大文字の拡張子の組み合わせである場合、あるいはその逆の場合で、特殊文字がなく、8.3 の制限内に収まる場合、Windows NT および XP などのそれ以降のバージョンの Windows では VFAT エントリは作成されません。代わりに、ディレクトリ エントリのバイト0x0Cの 2 ビットを使用して、ファイル名を完全にまたは部分的に小文字として扱う必要があることを示します。具体的には、ビット 4 は小文字の拡張子、ビット 3 は小文字のベース名を意味し、" " や" "などの組み合わせは許可されますが、" " は許可されません。これをサポートする他のオペレーティングシステムはほとんどありません。このため、この拡張子が使用されている場合にファイル名をすべて大文字として認識する古いバージョンの Windows (Windows 95 / 98 / 98 SE / ME) との下位互換性の問題が発生し、USB フラッシュ ドライブなどでオペレーティングシステム間でファイルを転送するとファイル名が変更される可能性があります。現在のLinux 2.6.xバージョンでは、読み取り時にこの拡張機能が認識されます(出典:カーネル2.6.18および)。マウントオプションによって、書き込み時にこの機能が使用されるかどうかが決まります。[ 71 ]example.TXTHELLO.txtMixed.txt/fs/fat/dir.cfs/vfat/namei.cshortname
/W:246ユーティリティとは異なり、DR-DOS FDISK はパーティションツールであるだけでなく、新しく作成されたパーティションをFAT12、 FAT16、またはFAT32としてフォーマットすることもできます。これにより、誤って間違ったボリュームをフォーマットしてしまうリスクが軽減されます。IBMBIO␠␠COMブートファイル名の拡張子をオプションを使用して変更できますSYS /DR:ext。ここで、ext は新しい拡張子を表します。特別なシナリオで想定されるその他の DR-DOS ブートファイル名は、"DRBIOS␠␠SYS"、"DRDOS␠␠␠SYS"、"IO␠␠␠␠␠␠SYS"、"JO␠␠␠␠␠␠SYS" です。/ONO␠NAME␠␠␠␠、ユーザーがボリューム ラベルの入力をスキップした場合に、ダミーの " " ディレクトリ ボリューム ラベルを明示的に書き込むことが知られています。 オペレーティングシステムは、ボリュームのルートにディレクトリ ボリューム ラベルが見つからない場合、内部的に同じ文字列を返すのがデフォルトですが、最初のエントリ (ディレクトリ エントリの後) として実際のボリューム ラベルが保存されていないため、古いオペレーティングシステムは、代わりに VFAT LFN エントリを誤って取得する可能性があります。ACCDATE=drive1+|- [drive2+|-]..."ブートセクタの先頭にあるジャンプ命令に関して:「ブートセクタの最初のバイトがE9HまたはEBIT(3バイトのNEARまたは2バイトのショートジャンプの最初のバイト)かEBH(2バイトのジャンプの最初のバイトに続いてNOP)かを判定します。そうであれば、オフセット3から始まるBPBが存在します。」(注:本書には多くの誤りがあります。)
{{cite newsgroup}}: CS1メンテナンス: アーカイブサービスは非推奨になりました (リンク){{cite newsgroup}}: CS1メンテナンス: アーカイブサービスは非推奨になりました (リンク){{cite web}}: CS1メンテナンス: 日付と年 (リンク)番号は 2 から始まります。最初の 2 つの数字、0 と 1 は予約されています。
M 4.1 (DOS Plus [1.2]) では、CP/M と DOS の 2 つのファイルシステムを使用できます。 Amstrad PC1512 に付属のバージョン [...] は、360k (CP/M) / 1.2Mb (DOS) より大きいフロッピー ディスク、または 32Mb より大きいハード ドライブ パーティションを処理できません。 [...] DOS ファイルシステムは、FAT12 または FAT16 のいずれかです。フォーマットは PCDOS 2.11 とまったく同じですが、次の点が異なります。 ディレクトリ エントリのバイト 0Ch [...] には、4 つの「ユーザー属性」F1'-F4' が格納されます。 [...] DRDOS スタイルのパスワードはサポートされていません。
このバイトは [...]
Windows 95 の実行中、および
SCANDISK
や
DEFRAG
によって変更されません。 [...] 別のプログラムが
EA
を含むファイルの
値を
0x00
に設定すると、これらの EA は DosFindFirst/Next 呼び出しのみを使用しては検出されなくなります。 EA を取得するための他の
OS/2
呼び出し (DosQueryPathInfo、DosQueryFileInfo、および DosEnumAttribute) はこのバイトに依存しません。 また、その逆も発生する可能性があります [...] [...] この場合、ディレクトリ スキャンのパフォーマンスのみが低下します。 どちらの状況も [...]
CHKDSK
によって修正されます。
の種類は、PC-DOS ファイルディレクトリ構造の「予約ビット」部分に格納されます。[...] 4690 のみがこれらの属性を尊重し、保持します。4690 システムで作成されたフロッピーディスクからコピーする場合、これらのビットがオンになっていると、さまざまな非 4690 オペレーティング システムで異なる動作をします。[...] PC-DOS および Windows 2000 Professional は、エラーなくファイルをコピーし、ビットをゼロにします。OS/2 [...] 1.2 [...] は、最初にファイルに対して CHKDSK /F を実行しない限り、ファイルのコピーを拒否します。[...] CHKDSK を実行すると、ファイルをコピーし、ビットをゼロにします。 [...] 4690 システムにコピーすると、[...] ファイルはローカル ファイルとしてコピーされます。
クラスターは64
キロバイト以上にすることはできません。