ファイルアロケーションテーブル(FAT)は、パーソナルコンピュータ向けに開発されたファイルシステムで、 DOSおよびWindows 9xオペレーティングシステムのデフォルトのファイルシステムでした。[ 3 ]元々は1977年にフロッピーディスクで使用するために開発されましたが、ハードディスクやその他のデバイスでの使用にも適応されました。時間の経過とともにディスクドライブの容量が増加したため、設計が変更され、FAT12、FAT16、FAT32、exFATなどの新しいバージョンが生まれました。
Windows XP以降、Microsoftのオペレーティングシステムでは、デフォルトのファイルシステムとしてFATがNTFSに置き換えられました。[ 4 ]それにもかかわらず、FATはオペレーティングシステムや組み込みシステムとの互換性、実装の容易さから、 USBフラッシュドライブ、SDカード、マルチメディアカード(MMC)、eMMCなどの比較的小容量のソリッドステートストレージ技術で引き続き広く使用されています。[ 5 ]
FATは、DOS時代からWindows 9x時代にかけて、ハードディスクで広く使用されていました。マイクロソフトは1993年にWindows NTプラットフォームでNTFSを導入しましたが、FATは2001年にWindows XPが登場するまで、一般家庭ユーザー向けの標準ファイルシステムとして使われ続けました。Windows Meは、FATをデフォルトのファイルシステムとして採用した最後のWindowsバージョンでした。
フロッピーディスクの場合、FATはECMA -107 [ 6 ]およびISO / IEC 9293:1994 [ 7 ](ISO 9293:1987 [ 8 ]に取って代わる)として標準化されています。これらの規格は、短い8.3ファイル名のみをサポートするFAT12およびFAT16を対象としており、VFATを使用した長いファイル名は部分的に特許化されています。[ 9 ] FAT12はフロッピーディスクで使用されていますが、FAT16およびFAT32は通常、より大きなメディアで使用されています。
FATは、EFI準拠コンピュータのブート段階でEFIシステムパーティションに内部的に使用されます。[ 10 ]
FATは、WindowsとLinuxの共有環境など、複数のオペレーティングシステムで使用されることが想定されるドライブで依然として使用されています。Microsoft Windowsには、すべてのファイルを書き換える必要なくFATファイルシステムをNTFSに直接変換するツールがプリインストールされていますが、これを簡単に元に戻すことはできません。[ 11 ]
FATファイルシステムは、フロッピーディスク、スーパーフロッピー、メモリカード、フラッシュメモリカード、USBフラッシュドライブなどのリムーバブルメディアで使用されています。FATは、 PDA、デジタルカメラ、ビデオカメラ、メディアプレーヤー、携帯電話、ゲーム機などのポータブルデバイス、ブームボックスやDVDプレーヤーなどの組み込みシステム、USBポートとSDカードリーダーを内蔵した車載オーディオシステムでサポートされています。[ 12 ] [ 13 ]
1998年以降、ほぼすべてのデジタルカメラで採用されているDCFファイルシステムは、8.3のファイル名を持つ論理ファイルシステムを定義し、互換性のために物理層にはFAT12、FAT16、FAT32、またはexFATの使用を必須としています。[ 14 ]
ファイルシステムは、デバイスに格納されているインデックステーブルを使用して、ファイルに関連付けられたデータストレージ領域のチェーンを識別します。これはファイルアロケーションテーブル(FAT)と呼ばれます。FATはフォーマット時に静的に割り当てられます。このテーブルは、ディスクストレージの連続領域である各クラスタのエントリのリンクリストです。各エントリには、ファイル内の次のクラスタの番号、またはファイルの終わり、未使用のディスク領域、ディスクの特別な予約領域を示すマーカーが含まれています。ディスクのルートディレクトリには、そのディレクトリ内の各ファイルの最初のクラスタの番号が含まれています。オペレーティングシステムは、FATをたどり、ファイルの終わりに達するまで、クラスタチェーンとしてディスクファイルの各連続部分のクラスタ番号を検索します。サブディレクトリは、それぞれのファイルのディレクトリエントリを含む特別なファイルとして実装されます。
FATリンクリストの各エントリは、12、16、または32ビットの固定ビット数です。アクセス可能なファイルまたはディスクドライブの最大サイズは、エントリに格納できる最大数値(未割り当て領域またはリストの末尾を示すために予約されたいくつかの値を除く)とディスククラスタのサイズの積です。ファイルを拡張するために1バイトのストレージしか必要としない場合でも、クラスタ全体を割り当てる必要があります。そのため、多数の小さなファイルが存在する場合、最小クラスタサイズを満たすために、ほとんどが「空」のデータを含むクラスタが割り当てられる可能性があります。
元々は8ビットファイルシステムとして設計されたFATですが、ディスクドライブの容量が増加するにつれてクラスタの最大数も増加させる必要があり、そのため各クラスタを識別するために使用されるビット数も増加してきました。FATフォーマットの主要なバリアントは、テーブル要素のビット数に基づいて、12ビット(FAT12)、16ビット(FAT16)、32ビット(FAT32)と命名されています。
FATファイルシステムにはいくつかのバリエーションがあります(例:FAT12、FAT16、FAT32)。FAT16は、16ビット幅のクラスタエントリを持つオリジナルのFATファイルシステム群と、それ以降のバリエーションの両方を指します。「VFAT」は、長いファイル名のためのオプションの拡張機能で、あらゆるFATファイルシステム上で動作します。VFATの長いファイル名を使用するボリュームは、VFAT拡張機能をサポートしていないオペレーティングシステムでも読み取ることができます。
オリジナルのFATファイルシステム(当初はFAT構造と呼ばれていた)は、マーク・マクドナルド[ 17 ]がマクドナルドとビル・ゲイツの一連の議論に基づいて設計および実装した。[ 17 ] これは、8 ビットのテーブル要素[ 15 ] [ 16 ] [ 17 ] (および有効なデータクラスタ番号は0xBF[ 15 ] [ 16 ]まで) で、8 インチ (200 mm)フロッピーディスクを搭載したNCR 7200 モデル VIデータ入力端末の8080ベースの後継機[ nb 2 ]向けのMicrosoft Standalone Disk BASIC-80 の前身として、 1977 年[ 18 ]または 1978 年に導入されました。 [ nb 2 ] 1978 年、Standalone Disk BASIC-80 は、当時実際の 8086 システムが利用できなかったため、DEC PDP -10のエミュレータを使用して8086に移植されました。 [ 19 ] FATファイルシステムは、1979年以来マクドナルドによって開発された8080/Z80プラットフォーム向けのオペレーティングシステムであるマイクロソフトのMDOS/MIDAS [ 17 ]でも使用されていました。Standalone Disk BASICバージョンは3つのFATをサポートしていましたが[ 15 ] [ 16 ] [ 20 ] 、これはMIDASのパラメータでした。MIDASは10ビット、12ビット、16ビットのFATバリアントもサポートするように準備されていたと伝えられています。Standalone Disk BASICではディレクトリエントリのサイズは16バイトでしたが[ 15 ] [ 16 ] 、 MIDASではエントリごとに32バイトを占有しました。
シアトル・コンピュータ・プロダクツ(SCP)のティム・パターソンは、 1979年5月にマイクロソフトにゲストとして滞在した際、ボブ・オリアーがスタンドアロン・ディスクBASIC-86エミュレータのポートをSCPのS-100バス8086 CPUボードのプロトタイプに適合させるのを手伝ったときに、マイクロソフトのFAT構造に初めて触れた。 [ 19 ]最終製品は、1979年6月4日から7日にニューヨークで開催されたナショナル・コンピュータ・カンファレンス[ 19 ]のライフボート・アソシエイツのブースで展示され、パターソンはMDOS/MIDAS [ 17 ]のより高度なFAT実装について学び、マクドナルドはファイルシステムの設計について彼と話した。[ 18 ]
1980 年 4 月から 8 月にかけて、SCP 独自の 8086 オペレーティングシステムQDOS 0.10に FAT の概念を借用しながら、[ 19 ] Tim Paterson はテーブル要素を12 ビットに拡張し、[ 21 ] FAT の数を 2 つに減らし、予約クラスタ値の一部の意味を再定義し、ディスクレイアウトを変更して、ルートディレクトリが FAT とデータ領域の間に配置されるようにして、FAT12を実装しました。Paterson はまた、9 文字 (6.3) のファイル名[ 15 ] [ 16 ]の長さ制限を 11 文字に増やして、 CP/Mスタイルの8.3 ファイル名とファイル制御ブロックをサポートしました。Microsoft Standalone Disk BASIC の8 ビットファイルシステムの前身で使用されていたフォーマットは、 QDOS ではサポートされていませんでした。1980 年 8 月までに、QDOS は86-DOSに改名されました。[ 22 ] 86-DOS 0.42以降、ディレクトリ エントリのサイズとレイアウトが 16 バイトから 32 バイトに変更されました[ 23 ]。これは、ファイルの日付スタンプを追加し[ 23 ]、理論上のファイル サイズ制限を以前の 16 MB の制限を超えて増やすためです。[ 23 ] 86-DOS 1.00 は1981 年初頭に利用可能になりました。1981 年後半には、86-DOS は Microsoft のMS-DOSおよびIBM PC DOSに進化しました。[ 17 ] [ 21 ] [ 24 ] 16 バイトのディレクトリ エントリで以前にフォーマットされたボリュームを読み取る機能は、MS-DOS 1.20で削除されました。[ 23 ]
FAT12 はクラスタ アドレスに 12 ビット エントリを使用しました。一部の値は、クラスタ チェーンの終了を示すため、ディスクの使用できない領域を示すため、またはその他の目的のために予約されていたため、クラスタの最大数は 4078 に制限されていました。[ 25 ] [ 26 ]ディスク領域を節約するために、2 つの 12 ビット FAT エントリはディスク上で 3 つの連続する 8 ビット バイトを使用し、12 ビット値を解凍するには操作が必要でした。これは、初期のフロッピー ディスク ドライブや、最大 32 メガ バイトの小型ハードディスクには十分でした。DOS 3.31で利用可能になったFAT16Bバージョンは32 ビットセクタ番号をサポートしていたため、ボリューム サイズ制限が拡大されました。
読み取りおよび書き込み操作中にヘッドが動かないように、すべての制御構造は最初のトラック内に収まるように配置されていました。制御構造領域に不良セクタがあると、ディスクは使用不能になります。DOSのフォーマットツールは、このようなディスクを完全に拒否しました。ファイルデータ領域では不良セクタが許容されていました。不良セクタを含むクラスタは、0xFF7FATの予約値によって使用不能としてマークされました。
86-DOS は8 インチ (200 mm) フロッピー ドライブで 3 つのディスク フォーマット (250.25 KB、616 KB、1232 KB、FAT ID0xFFおよび) をサポートしていましたが、1981 年に初代IBM パーソナル コンピュータとともにリリースされた IBM PC DOS 1.0は、片面 5.25 インチ フロッピー ドライブでフォーマット済み容量 160 KB (FAT ID ) の 8 セクター フロッピー フォーマットのみをサポートしており、PC DOS 1.1では 320 KB (FAT ID )の両面フォーマットのサポートが追加されました。PC DOS 2.0では 180 KB (FAT ID ) および 360 KB (FAT ID )の 9 セクター フロッピー フォーマットのサポートが導入されました。0xFE 0xFE 0xFF 0xFC 0xFD
86-DOS 1.00 および PC DOS 1.0 のディレクトリエントリには、最終更新日という日付のみが含まれていました。PC DOS 1.1 では、最終更新時刻が追加されました。PC DOS 1.x のファイル属性には、隠しビットとシステムビットが含まれており、残りの 6 ビットは未定義でした。当時、DOS はサブディレクトリをサポートしていませんでしたが、通常、フロッピーディスクには数十個のファイルしか含まれていませんでした。
PC XTはIBM製のハードドライブを搭載した最初のPCであり、PC DOS 2.0はFAT12(FAT ID )でそのハードドライブをサポートしていました。ハードディスクのクラスタあたり0xF88セクタという固定的な前提により、512バイトセクタと4KBクラスタの場合、パーティションの最大サイズは実質的に16MBに制限されていました。
BIOSパラメータ ブロック( BPB )もPC DOS 2.0で導入され、このバージョンでは階層型サブディレクトリ用の読み取り専用、アーカイブ、ボリューム ラベル、ディレクトリ属性ビットも追加されました。 [ 27 ]
MS-DOS 3.0では、高密度1.2MB 5.25インチフロッピーディスク(メディア記述子0xF9)のサポートが導入され、特に トラックあたり15セクターを備えていたため、FAT用のスペースが増えました。
FAT12 は、1.44 MB および後の 2.88 MB ディスク (メディア記述子バイト)を含むすべての一般的なフロッピー ディスクで引き続き使用されています。 0xF0
1984 年、IBM はPC ATをリリースしたが、これは20 MB のハードディスクにアクセスするためにPC DOS 3.0 を必要とした。 [ 28 ] [ 29 ]マイクロソフトは並行してMS-DOS 3.0 を導入した。クラスタ アドレスは 16 ビットに拡張され、ボリュームごとに最大 65,526 クラスタが可能になった。ただし、セクタの最大数と最大パーティションサイズ 32 MB は変更されなかった。クラスタ アドレスは 16 ビットであったが、この形式は今日一般的にFAT16として理解されているものではなかった。パーティション タイプは、65,536 セクタ未満(セクタ サイズ 512 の場合は 32 MB 未満) のこの形式の FAT16 を示す。FAT16 の利点は、より小さなクラスタを使用することで、特に数百バイトしかない多数のファイルに対してディスクの使用効率が向上することであった。 0x04
MS-DOS 3.0 では 16 MB ~ 32 MB のパーティションはすべて FAT16 形式でフォーマットされていたため、 MS-DOS 3.0 でフォーマットされた 20 MB のハードディスクは MS-DOS 2.0 ではアクセスできませんでした 。[ 30 ] MS-DOS 3.0 から MS-DOS 3.30 までは 15 MB 未満の FAT12 パーティションにはアクセスできました が、16 MB ~ 32 MB のパーティションはすべて FAT16 である必要があったため、 このサイズ範囲の MS-DOS 2.0 パーティションにはアクセスできませんでした。MS-DOS 3.31 以降では、16 MB ~ 32 MB の FAT12 パーティションに再び アクセスできるようになりました。
MS-DOSおよびPC DOSのFAT12およびFAT16の実装では、32メガバイトを超えるディスクパーティションにアクセスできませんでした。いくつかのメーカーは、OEM版のMS-DOS内で独自のFATバリアントを開発しました。[ 31 ]
一部のベンダー(ASTとNEC [ 31 ])は、独自の拡張マスターブートレコード(MBR )で標準の4つではなく8つのプライマリパーティションエントリをサポートし、MS-DOSを複数のプライマリパーティションを使用するように適応させました。
他のベンダーは、16ビットセクタエントリによって課せられるボリュームサイズ制限を回避するため、ファイルシステムが操作するセクタの見かけ上のサイズを大きくした。これらの論理セクタは、ディスク上の物理セクタサイズ(依然として512バイト) よりも大きく(最大8192バイト)、DOS-BIOSまたはシステムBIOSは、複数の物理セクタを論理セクタに結合して、ファイルシステムが処理できるようにした。
これらの変更は、DOSカーネル内のファイルシステム実装からは透過的でした。基盤となるDOS-BIOSは、パーティション情報とドライブの物理的な形状に基づいて、これらの論理セクターを物理セクターに変換しました。
このアプローチの欠点は、セクタバッファリングとデブロッキングに使用されるメモリが増加することでした。古い DOS バージョンでは大きな論理セクタを使用できなかったため、OEM は、市販の MS-DOS や PC DOS の問題から隠すために、FAT バリアントに新しいパーティション ID を導入しました。論理セクタ FAT の既知のパーティション ID には、次のものがあります。0x08( Commodore MS-DOS 3.x)、0x11( Leading Edge MS-DOS 3.x)、 ( 0x14AST MS-DOS 3.x )、( 0x24NEC MS-DOS 3.30 [ 31 ] )、 ( AT&T MS-DOS 3.x)、 ( Tandy MS-DOS)、( Sperry IT MS-DOS 3.x、Unisys MS-DOS 3.3 – Digital Research DOS Plus 2.1でも使用)。[ 32 ]東芝MS-DOS、Wyse MS-DOS 3.2および3.3 [ 33 ] 、 Zenith MS-DOSなどのOEMバージョンも論理セクタリングを利用していたことが知られています。[ 34 ]0x560xE50xF2
これらのFATバリアントは、標準規格に準拠しておらず最適とは言えませんが、ファイルシステム自体の仕様上は完全に有効です。そのため、MS-DOSやPC- DOSのデフォルト設定では対応できなかったとしても、DR-DOSなどのオペレーティングシステムに搭載されている、より柔軟なファイルシステム実装であれば、パーティションIDを認識可能なタイプに変更するだけで、これらのベンダー固有のFAT12およびFAT16バリアントのほとんどをマウントできます。[ nb 3 ]また、既存のパーティションが元のオペレーティングシステムで認識される必要がなくなった場合、512バイト以外のセクタ サイズをサポートしていないMS-DOS/PC DOS 4.0~6.3 のバージョンにより準拠した FAT12 および FAT16 ボリュームに「変換」することができます。 [ 35 ]これは、 DOS 3.31 以降で導入されたセクタ数の32 ビット エントリを持つ BPBに切り替えることによって実現します(下記のFAT16B を参照)。クラスタ サイズは維持し、BPB の論理セクタ サイズを512 バイトに縮小すると同時に、クラスタあたりの論理セクタ数、予約済み論理セクタ数、合計論理セクタ数、および FAT あたりの論理セクタ数を同じ係数で増加させます。
MS-DOS / PC DOS で並行して進められた開発 により、最大ディスクサイズを増やすことが可能になったのは、ハードディスク上の FAT パーティションの数を以前の 4 つ以上に拡張し、「インストール可能なブロック デバイス」をネイティブ DOS FAT パーティションに置き換えたことである。互換性のある方法でより多くの FAT パーティションを使用できるようにするため、PC DOS 3.2 (1986 年)で新しいパーティション タイプである拡張パーティション(EBR) [ 17 ]が導入された。これは、論理ドライブと呼ばれる追加パーティションのコンテナである。PC DOS 3.3 (1987 年 4 月)以降、次の論理ドライブ を含む別のオプションの拡張パーティションがあり、以下同様である。ハードディスクのMBRは、最大 4 つのプライマリ パーティションを定義するか、最大 3 つのプライマリ パーティションに加えて拡張パーティションを定義することができる。
1987 年 11 月、Compaq Personal Computer DOS 3.31 ( Compaq が自社製コンピュータに同梱してリリースしたMS-DOS 3.3 の修正版 OEM バージョン) では、BPB の 16 ビット ディスク セクタ カウントを 32 ビットに拡張し、今日では単にFAT16フォーマットとして知られるものが導入されました。ディスク上の変更はわずかでしたが、DOS ディスク ドライバ全体を 32 ビット セクタ番号を使用するように変換する必要がありました。これは、16 ビットアセンブリ言語 で記述されていたため、作業が複雑になりました。その結果、当初はDOS 3.31 Large File Systemと呼ばれていました。Microsoftのツールでは、このタイプをBigFAT [ 37 ]と呼んでいますが、古いバージョンの DOS ではBIGDOSと説明されていました。技術的には、 FAT16Bとして知られています。DSKPROBE0x06FDISK
古いバージョンの DOS は 65,535 セクタを超えるディスクを扱うように設計されていなかったため 、DOS の 3.31 より前のバージョンの問題からこのフォーマットを隠すために、新しいパーティション タイプを導入する必要がありました。FAT16 の元の形式 (65,536 セクタ未満) にはパーティション タイプ0x04がありました。これより大きいディスクを扱うために、0x0665,536 セクタ以上を示すタイプが導入されました。これに加えて、ディスク ドライバ も 65,535 セクタを超えるディスクを扱うように拡張されました。元の FAT16 と新しい FAT16B フォーマットの唯一の違いは、32 ビット セクタ エントリの新しい BPBフォーマットの使用です。したがって、FAT16B フォーマットをサポートする新しいオペレーティングシステムは、必要な変更なしに元の FAT16 フォーマットも扱うことができます。
DOS 3.31以前のバージョンで使用するパーティションを 最新のツールで作成する必要がある場合、理論的に満たすべき唯一の条件は、セクター数が65536未満であることと、古いパーティションID(0x04)を使用することです。ただし、実際には、MS-DOS 2.xの他の制限により、タイプパーティション0x01と0x04プライマリパーティションはディスクの最初の32MBの範囲外に物理的に配置してはなりません。そうしないと、 MS-DOS 2.xは それらを処理できないためです。
1988 年、FAT16B の改良版がDR DOS 3.31、PC DOS 4.0、OS/2 1.1、および MS-DOS 4.0 を通じてより広く利用可能になりました。パーティション サイズの制限は、クラスタあたりのセクタの 8 ビット符号付きカウントによって決定され、元々は最大で 2 のべき乗値である 64 でした。標準のハードディスク セクタ サイズが 512 バイトの場合、最大 クラスタ サイズは 32 KB となり、セクタ サイズ 512 の場合の FAT16 パーティション サイズの「決定的な」制限は 2 GBに固定されます。0.5 KB の代わりに1 KB または 2 KB セクタを持つことができる光磁気メディアでは、このサイズ制限は比例して大きくなります。
ずっと後になって、Windows NTは クラスタあたりのセクター数を符号なし整数として扱うことで、最大クラスタサイズを64KBに拡張しました。しかし、その結果として生成されたフォーマットは、当時の他のFAT実装とは互換性がなく、内部断片化が大きくなりすぎました。Windows 98、SE、MEもこのバリアントの読み書きをサポートしていましたが、ディスクユーティリティはこれに対応しておらず、一部のFCBサービスはこのようなボリュームでは利用できませんでした。これが、互換性の問題を複雑にしています。
1995 年より前は、DOS のバージョンはCHSアドレス指定のみでディスクにアクセスしていました。Windows 95 (MS-DOS 7.0)でLBAディスク アクセスが導入されると、パーティションがディスクの最初の約 8 GBの外側に物理的に配置され、従来の CHS アドレス指定方式の対象外になるようになりました。そのため、CHS バリアを部分的にまたは完全に超えたパーティションは、0x0Eパーティション テーブルで新しいパーティション タイプを使用することで、LBA 非対応のオペレーティングシステムから隠す必要がありました。このパーティション タイプを使用する FAT16 パーティションは、FAT16Xとも呼ばれます。[ 38 ]以前の FAT16 パーティションとの唯一の違いは、BPB レコードの CHS 関連のジオメトリ エントリ、つまりトラックあたりのセクター数とヘッド数には、値が含まれていないか誤解を招く値が含まれている可能性があり、使用すべきではないということです。
FAT12 および FAT16 で使用可能なルート ディレクトリ エントリの数は、ボリュームのフォーマット時に決定され、16 ビット フィールドに格納されます。 特定の数値RDEとセクタ サイズの場合、ルート ディレクトリ セクタのSS数は であり、通常はこれらのセクタを埋めるために が選択されます。つまり、 です。 FAT12 および FAT16 メディアは、通常、非フロッピー メディアで 512 個のルート ディレクトリ エントリを使用します。 mkdosfs などの一部のサードパーティ ツールでは、ユーザーがこのパラメータを設定できます。[ 39 ]RDSRDS = ceil((RDE × 32) / SS)RDERDE × 32 = RDS × SS
FAT16 のボリュームサイズ制限を克服しつつ、同時に DOS のリアルモードコードでフォーマットを処理できるようにするため、マイクロソフトはファイルシステムの新しいバージョンであるFAT32を設計しました。これは、可能なクラスタ数を増やしながらも、既存のコードのほとんどを再利用できるため、従来のメモリフットプリントの増加は DOS で 5 KB 未満に抑えられました 。[ 40 ]クラスタ値は32 ビットの数値で表され、そのうち 28 ビットがクラスタ番号を保持するために使用されます。
FAT32 ブートセクタはセクタ数に 32 ビットのフィールドを使用するため、セクタサイズが 512バイトの場合、最大 FAT32 ボリュームサイズは 2テラバイトに制限されます。最大 FAT32 ボリュームサイズは、セクタサイズが 4,096バイトの場合 16 TB です。[ 41 ] [ 42 ] Windows NT に組み込まれているWindows シェルディスク フォーマット ツールは、任意に 32 GB までのボリューム サイズのみをサポートしていますが、[ nb 4 ] Windows は、既存のより大きな FAT32 ボリュームの読み書きをサポートしており、これらはコマンド プロンプト、PowerShell、またはサードパーティ ツールを使用して作成できます。[ 44 ]または、FAT32 をサポートする非 Windows システムまたは Windows 9x システムでボリュームをフォーマットしてから、Windows NT システムに転送することもできます。2024 年 8 月に、Microsoft は、最大 2TB サイズの FAT32 パーティションを作成できる Windows 11 プレビュー ビルドのアップデートをリリースしました。[ 45 ]
FAT32ボリューム上のファイルの最大サイズは、 4GBから1バイトを引いた4,294,967,295(2³² - 1)バイトです。この制限は、ディレクトリテーブルにおける4バイトのファイル長エントリに起因するものであり、十分なセクタサイズによって実現される比較的大きなFAT16パーティションにも影響します。
FAT12やFAT16と同様に、FAT32には長いファイル名を直接サポートする機能は組み込まれていませんが、FAT32ボリュームは、 FAT12およびFAT16ボリュームでVFATの長いファイル名がオプションで実装されているのとまったく同じ方法で、短いファイル名に加えてVFATの長いファイル名をオプションで保持することができます。
FAT32は1996年にWindows 95 OSR2(MS-DOS 7.1)で導入されましたが、使用するには再フォーマットが必要でした。また、DriveSpace 3(Windows 95 OSR2およびWindows 98に付属していたバージョン)はFAT32をサポートしていませんでした。Windows 98では、既存のハードディスクをFAT16からFAT32にデータ損失なしで変換するユーティリティが導入されました。
Windows NT系OSでは、FAT32のネイティブサポートはWindows 2000で実現しました。Windows NT 4.0用のFAT32ドライバは、後にマイクロソフトに買収されたWinternals社から無償で提供されていました。現在では、公式ソースからこのドライバを入手することはできません。1998年以降、Caldera社の動的ロード可能なDRFAT32ドライバを使用することで、DR-DOSでFAT32サポートを有効にすることができました。[ 46 ] [ 47 ] FAT32 と LBA アクセスをネイティブにサポートした最初の DR-DOS バージョンは、1999 年の OEM DR-DOS 7.04 でした。同年、IMS はREAL/32 7.90でネイティブ FAT32 サポートを導入し、IBM 4690 OS はバージョン 2 で FAT32 サポートを追加しました。[ 48 ] Ahead Software は、 2004 年にNero Burning ROMで DR-DOS 7.03 用の別の動的にロード可能な FAT32.EXE ドライバを提供しました。IBMは、1999 年に OEM PC DOS 7.1 でネイティブ FAT32 サポートを導入しました。
FAT32 パーティション用に 2 つのパーティション タイプが予約されています。0x0Bと0x0C。 後者のタイプは、CHS の代わりに LBA ディスク アクセスを使用することを示すためにFAT32Xとも呼ばれます。 [ 46 ] [ 49 ] [ 50 ] [ 51 ] [ 52 ]このようなパーティションでは、CHS 関連のジオメトリ エントリ、つまりMBR のCHS セクタ アドレス、トラックあたりのセクタ数、およびEBPB レコードのヘッド数には、値が含まれていないか、誤解を招く値が含まれている可能性があり、使用すべきではありません。[ 53 ] [ 51 ] [ 52 ]
OS/2 は拡張属性(EA)に大きく依存しており、 FAT12またはFAT16ボリュームのルート ディレクトリにある"という隠しファイルに格納します。このファイルは、ファイル (またはディレクトリ) のディレクトリ エントリのオフセット にある、以前に予約された 2 バイトによってインデックス付けされます。[ 54 ] FAT32フォーマットでは、これらのバイトはファイルまたはディレクトリの開始クラスタ番号の上位 16 ビットを保持するため、この方法を使用して FAT32 にOS/2 EAを格納することは不可能です。EA␠DATA.␠SF0x14
しかし、OS/2、 eComStation、およびArcaOS用の Henk Kelder と Netlabs によるサードパーティの FAT32インストール可能ファイルシステム(IFS) ドライバ FAT32.IFS バージョン 0.70 以降は、拡張属性を、それが属するファイルの通常のファイル名に文字列 " " が付加されたファイル名を持つ追加ファイルに格納します。このドライバはまた、ディレクトリ エントリのオフセットのバイトを使用して、拡張属性の存在を示す特別なマーク バイトを格納し、処理速度を向上させます。[ 55 ] [ 56 ] (この拡張機能は、4 GB マイナス 1 を超えるファイルを FAT32 ボリュームに格納する FAT32+ 方式とは重大な互換性がありません。) [ 36 ]␠EA.␠SF0x0C
拡張属性は、 Workplace Shellデスクトップ、REXXスクリプト、および多くのシステムGUIおよびコマンドラインユーティリティ ( 4OS2など)を介してアクセスできます。[ 57 ]
Windows NT は、OS/2サブシステムに対応するため、 HPFS、NTFS、FAT12、および FAT16における拡張属性の処理をサポートしています。FAT12、FAT16、および HPFS では OS/2 とまったく同じ方式で拡張属性 (EA) を格納しますが、NTFS ボリュームに格納される他の種類の属性データ (ADS)はサポートしていません。EA 以外の ADS を含むファイルを NTFS ボリュームから FAT または HPFS ボリュームにコピーしようとすると、失われる ADS の名前を含む警告メッセージが表示されます。FAT32 ボリュームに EA を格納する FAT32.IFS 方式はサポートしていません。
Windows 2000以降は、Windows NTと全く同じように動作しますが、FAT32にコピーする際にEAを警告なしで無視するという点が異なります(ただし、「Macintosh Finder Info」や「Macintosh Resource Fork」などの他のADSについては警告が表示されます)。
Cygwinも「 」ファイルを使用します。EA␠DATA.␠SF
Windows 95の設計者にとってのユーザーエクスペリエンスの目標の 1 つは、従来の8.3 ファイル名(SFN)に加えて、長いファイル名(LFN - 最大 255 UCS-2コード ユニット) [ nb 1 ]を使用できることでした。後方および前方互換性のために、LFN は、ディレクトリ エントリのレイアウト方法の回避策を使用して、既存の FAT ファイルシステム構造の上にオプションの拡張機能として実装されました。
既存のFATファイルシステムのデータ構造を変更せずに長いファイル名を保存するこの透過的な方法は、 Windows 95の仮想デバイスドライバにちなんで、通常VFAT(「Virtual FAT」の略)と呼ばれています。[ nb 5 ]
VFAT非対応のオペレーティングシステムでも、短いファイル名エイリアスを使用して制限なくファイルにアクセスできます。ただし、長いファイル名を持つファイルをVFAT非対応のオペレーティングシステムにコピーすると、関連付けられた長いファイル名が失われる可能性があります。
Windows NT では、VFAT の長いファイル名のサポートはバージョン3.5から始まりました。
Linuxには、VFATの長いファイル名を持つFATボリュームを操作するためのVFATファイルシステムドライバが用意されています。以前は、UMSDOSスタイルのパーミッションとVFATの長いファイル名の両方をサポートするUVFATドライバも利用可能でした。
OS/2は、VFATの導入以前に、拡張属性(EA)を使用してFATに長いファイル名のサポートを追加しました。そのため、VFATの長いファイル名はOS/2では認識されず、EAの長いファイル名はWindowsでは認識されません。したがって、両方のオペレーティングシステムに精通したユーザーは、手動でファイル名を変更する必要がありました。
Human68Kは、独自のFATファイルシステムバリアントで、最大18.3のファイル名と(Shift JIS)漢字をサポートしていました。
Javaアプリケーションをサポートするために、FlexOSベースのIBM 4690 OSバージョン2では、長いファイル名をFATファイルシステムに下位互換性のある方法で保存するための独自の仮想ファイルシステム(VFS)アーキテクチャが導入されました。有効にすると、仮想ファイル名(VFN)は別の論理ドライブ文字で使用できるようになりますが、実際のファイル名(RFN)は元のドライブ文字で引き続き使用できます。[ 58 ]
FATファイルシステム自体は代替データストリーム(ADS)をサポートするように設計されていませんが、ADSに大きく依存する一部のオペレーティングシステムは、FATボリューム上でADSを処理するためのさまざまな方法を考案しています。これらの方法は、追加情報を追加のファイルやディレクトリに格納するか(従来のMac OSおよびmacOS)、ディスク上のFATデータ構造のこれまで使用されていなかったフィールドに新しい意味を与えるかのいずれかです(OS/2およびWindows NT)。
PC Exchangeを使用するMac OS は、さまざまな日付、ファイル属性、長いファイル名を「 」という隠しファイルに保存し、リソース フォーク(一般的な Mac OS ADS) を「」というサブディレクトリに保存します。これらのファイルは、使用されるすべてのディレクトリに保存されます。PC Exchange 2.1 以降では、Mac OS の長いファイル名を標準の FAT 長いファイル名として保存し、31 文字を超える FAT ファイル名を一意の 31 文字のファイル名に変換して、Macintosh アプリケーションから見えるようにします。FINDER.DAT RESOURCE.FRK
macOS は、リソース フォークとメタデータ (ファイル属性、その他の ADS) を AppleDouble 形式を使用して、所有者ファイル名に " をプレフィックスとして付けた名前の隠しファイルに保存します._。また、Finder は、一部のフォルダとファイルのメタデータを " という隠しファイルに保存します(ただし、Finder はmacOS のネイティブ ファイルシステムであるHFS+.DS_Storeでもを使用することに注意してください)。.DS_Store
初期の Linux ディストリビューションでは、 UMSDOSと呼ばれる形式もサポートされていました。これは、Unix ファイル属性 (長いファイル名やアクセス権限など) が「 」という別のファイルに格納された FAT の派生形式です。UMSDOS はVFATのリリース--linux-.---後に使用されなくなり、 Linuxバージョン 2.5.7 以降ではデフォルトで有効になっていません。[ 59 ]しばらくの間、Linux はUVFATを介して UMSDOS スタイルの権限と VFAT の長いファイル名の複合サポートも提供していました。
2007年に公開されたFAT+ドラフトでは、わずかに変更された、それ以外は後方互換性のあるFAT32ボリュームに、最大256GBマイナス1バイト、つまり274,877,906,943(2 38 − 1)バイトまでの大きなファイルを保存する方法が提案されました[ 36 ]。しかし、この拡張機能を認識していないディスクツールやFAT32実装では、通常のFAT32ファイルサイズ制限を超えるファイルを切り捨てたり削除したりするリスクがあります。FAT32 +とFAT16+のサポートは、一部のバージョンのDR-DOSに限定されており、主流のオペレーティングシステムでは利用できません[ 60 ] 。(この拡張機能は、FAT32ボリュームにOS/2拡張属性を保存するFAT32.IFS方式のオプションと重大な互換性がありません。) /EAS
NovellはNetWareファイルシステム(NWFS)において、NetWareオペレーティングシステム向けに大幅に改良されたFATファイルシステムを実装しました。より大きなファイルに対しては、 Turbo FATと呼ばれるパフォーマンス機能を利用しました。
FATXは、 2001年に発表されたマイクロソフトのXboxビデオゲームコンソールのハードディスクドライブとメモリーカード用に設計されたファイルシステムのファミリーです。[ 61 ] [ 62 ]
FATX16とFATX32は、FAT16やFAT32と基本的な設計思想は同じように見えますが、ディスク上の構造は簡略化されており、通常のFAT16やFAT32ファイルシステムとは根本的に互換性がないため、通常のFATファイルシステムドライバではこれらのボリュームをマウントすることはできません。
非ブート可能なスーパーブロックセクターは 4 KB のサイズで、通常のBPB とは全く異なる 18 バイトの BPB のような構造を保持します。クラスタは通常 16 KB のサイズで、Xbox には FAT のコピーが 1 つしかありません。ディレクトリ エントリは、通常の32バイトではなく 64 バイトのサイズです。ファイルは、 OEM 文字セットを使用して最大 42 文字の長さのファイル名を持つことができ、サイズは最大 4 GB マイナス 1バイトです。ディスク上のタイムスタンプには、作成、変更、およびアクセスの日時が記録されますが、FAT とは異なります。FAT ではエポックは1980 年、FATX ではエポックは2000 年です。Xbox 360では、エポックは 1980 年です。 [ 63 ]
exFATは、 2006年11月にWindows Embedded CE 6.0で導入されたファイルシステムで、 Vista Service Pack 1およびWindows XP Service Pack 3(またはWindows XP Update KB955704の個別インストール) でWindows NTファミリーに導入されました。ファイルアロケーションテーブルアーキテクチャに緩やかに基づいていますが、互換性がなく、特許で保護されています。[ 64 ]
exFATは、 SDXCやメモリースティックXCなどのフラッシュドライブやメモリーカードでの使用を想定しており、これらの用途ではFAT32が一般的に使用されています。通常、SDXCカードはexFATでフォーマットされています。exFATの主な利点は、ファイルサイズ参照が4バイトではなく8バイトで保存されるため、4GBのファイルサイズ制限を超え、制限が2⁶⁴ - 1バイトに増加することです。
Microsoft のGUIおよびコマンドライン形式ユーティリティは、 NTFSの代替として(また、より小さなパーティションの場合はFAT16BおよびFAT32の代替として) 提供しています。MBRパーティションタイプは ( IFS、HPFS0x07 、および NTFSで使用されるものと同じ)です。VBR に格納されている論理ジオメトリ情報は、BPB とは全く異なる形式で保存されます。
2010年初頭、ファイルシステムはSANS Instituteによってリバースエンジニアリングされました。[ 65 ] 2019年8月28日、MicrosoftはexFATの技術仕様を公開し、Linuxカーネルや他のオペレーティングシステムで使用できるようにしました。[ 66 ]
マイクロソフトは、1990 年代半ばに FAT ファイルシステムの主要部分に関する一連の特許を申請し、取得しました。これら 4 つの特許はすべて、Windows 95で初めて登場した FAT の長いファイル名の拡張に関するものです。米国特許 5,579,517、[ 67 ]米国特許 5,745,902、[ 68 ]米国特許 5,758,352、[ 69 ]米国特許 6,286,013 (すべて 2013 年以降失効)。[ 70 ]
2003年12月3日、マイクロソフトは[ 71 ]、FAT仕様および「関連する知的財産」の使用ライセンスを、販売ユニット1台あたり0.25米ドルのロイヤリティで提供し、ライセンス契約1件あたりのロイヤリティの上限を25万米ドルとすると発表した[ 72 ] 。この目的のために、マイクロソフトはFATファイルシステムに関する4つの特許を知的財産権の主張の根拠として挙げた。
EFI FAT32仕様では、[ 10 ]マイクロソフトは多くの権利を明示的に付与しており、多くの読者はこれをオペレーティングシステムベンダーがFATを実装することを許可するものと解釈している。[ 73 ] FATに影響を与えるマイクロソフト以外の特許には、OS/2拡張オブジェクト属性に特化した米国特許第5,367,671号(2011年に失効)がある。[ 74 ]
パブリック特許財団(PUBPAT)は2004年に米国特許商標庁(USPTO)に、ゼロックスとIBMの先行技術文献[ 75 ]を含む米国特許第5,579,517号[ 67 ]の有効性を争う証拠を提出した。USPTOは調査を開始し、特許のすべてのクレームを拒否することで結論付けた[ 76 ] 。翌年、USPTOはさらに、再審査プロセスを経て、517号の拒否を確定し、さらに米国特許第5,758,352号[ 69 ]の譲受人が間違っているという理由で無効であると判断したと発表した。
しかし、2006年に米国特許商標庁は、マイクロソフトのFATシステムの実装の特徴は「新規かつ非自明」であると裁定し、以前の2つの決定を覆し、特許を有効とした。[ 77 ]
2009年2月、マイクロソフトは、デバイスメーカーのTomTomの製品がVFATロングファイル名に関連する特許を侵害しているとして、TomTomに対して特許侵害訴訟を起こした。TomTom製品の一部はLinuxをベースとしているため、これはマイクロソフトがLinuxプラットフォームに対して特許権を行使しようとした初めてのケースとなった。[ 78 ]この訴訟は翌月、マイクロソフトがTomTomの4つの特許にアクセスできるようになり、TomTomが製品からVFATロングファイル名のサポートを中止し、その見返りとしてマイクロソフトは和解合意の5年間、TomTomに対して法的措置を取らないという合意により、法廷外で和解した。[ 79 ]
2010年10月、マイクロソフトはモトローラに対し、 Androidオペレーティングシステムでの使用が許可されていない複数の特許(VFAT特許2件を含む)を侵害したとして特許侵害訴訟を起こした。 [ 80 ]また、 ITCにも苦情を申し立てた。[ 81 ] オープンソースソフトウェアの開発者は、マイクロソフトの特許を回避するための方法を考案している。[ 82 ] [ 83 ]
2013年、ドイツでは特許EP0618540「長いファイル名と短いファイル名のための共通名前空間」(2014年に失効[ 84 ])が無効とされた。[ 85 ]控訴が取り下げられた後、この判決は2015年10月28日に確定した。[ 86 ]
ACCDATE=drive1+|- [drive2+|-]...... アドレス指定できる割り当てユニットまたはクラスタは 2^12 (つまり 4096) 個のみです。実際には、000h と 001h は使用されておらず、FF0h から FFFh は予約されているか他の目的で使用されているため、この数より少なくなり、002h から FEFh (2 から 4079) が使用可能なクラスタの範囲となります。
は 2 から始まります。最初の 2 つの番号、0 と 1 は予約されています。
クラスターは 64
キロバイト (
KB
) 以上にはできません。
0x000xEAと0xECマジック値についてまだ説明しています。{{cite web}}: CS1 maint: bot: 元の URL の状態が不明です (リンク)