第9回 Windowsのファイルシステムの概要とFATファイルシステムWindows OS入門(1/2 ページ)

Windowsを使っていてディスクサイズやファイルサイズの制限に引っかかったことはないだろうか? こうしたトラブルに遭わないように、ファイルシステムの概要や、特にFATの仕様を把握しておこう。

» 2015年07月16日 05時00分 公開
[打越浩幸デジタルアドバンテージ]
Windows OS入門
Windows Server Insider


「Windows OS入門」のインデックス

連載目次

 前回はWindowsのストレージアーキテクチャの概要と、ディスクレイアウト、記憶域プールなどについて解説した。今回はWindows OSで利用できるファイルシステムの概要とFATファイルシステムについて解説しておく。

Windows OSで利用可能なファイルシステム

 現在のWindows OSで利用可能な主なファイルとしては次のようなものがある。

ファイルシステム 主な機能や用途
FAT12/FAT16/FAT32 ・主にMS-DOSや16bitのWindows(Windows 3.x/9x/Me)でよく使われていたファイルシステム
・SDカードやUSBメモリなどのリムーバブルメディアでは標準的なフォーマット。外付けハードディスクなどでも利用されていることが多い
・メディアの総容量に応じてFAT12/FAT16/FAT32のいずれを使うかが決まる
・最大32Gbytesまでしかサポートされない
・1ファイル当たりのサイズは最大4Gbytesまで
・クラスターサイズは512〜64Kbytes
exFAT ・FATを拡張して、32Gbytes以上のメディアでも利用できるようにしたもの。大容量のリムーバブルメディアで使われている
・32Gbytes以上のSDカードなどにおける標準的なフォーマット
・1ファイル当たりのサイズは最大2の64乗bytesまで
・クラスターサイズは512〜32Mbytes
NTFS ・現在のWindows OSにおける標準的なフォーマット
・Windows OSをインストールするにはNTFSが必要
・アクセス制御リストやトランザクション処理、ハードリンク/シンボリックリンク、リパースポイント、スパースファイル、圧縮、暗号化、代替ストリームなど、現代のOSに要求されるさまざまな機能をサポート
ReFS ・大容量のデータボリューム向けのファイルシステム
・修復や検査時のダウンタイムが不要もしくは最小になる、優れた耐障害性機能
・記憶域プールと組み合わせると自動的な障害復旧が可能
CDFS/UDF ・CDやDVDなどのファイルシステム
Windows OSで利用可能なファイルシステム
これ以外にも、ファイルシステムドライバーさえ用意されていれば、新しいファイルシステムを利用することができる。例えばWindows OSのバージョンによっては、UNIXやLinuxなどでよく使われているNFS(Network File System)もサポートされている。

CDFSとは?

 「CDFS(CD-ROM File System)」は、CD-ROM向けのファイルシステムであり、ISO-9660(CD-ROM向けの標準論理ファイルフォーマット)やJoliet(最大ファイル名長を8.3から64文字まで拡張した形式)などと呼ばれるフォーマットのスーパーセットである。現在の光ディスクでは、次に述べるUDFというフォーマットが使われるのが一般的である。

※fsutilコマンドは、管理者権限で起動したコマンドプロンプト上で実行すること
C:\>fsutil fsinfo volumeinfo d: ……CDFSの情報を取得してみる。D:にはCD-ROMが入っている
ボリューム名 : GRMSHSCRXFRE_JA_CD
ボリューム シリアル番号 : 0x4bd02219
コンポーネント最大長 : 221 ……ファイル名の最大長
ファイル システム名 : CDFS ……ファイルシステムはCDFS
大文字と小文字を区別したファイル名をサポート ……サポートされている機能はこの2つしかない
ファイル ID で開く操作をサポートします。



UDFとは?

 「UDF(Universal Disk Format)」とは、特に書き込み/書き換え可能な光ディスク向けのファイルシステムである。CDFSよりも柔軟性が高く、2の64乗の最大ファイルサイズ、(CDのようなセッションのクローズ処理が不要な)パケットライト方式のサポート、アクセス制御リストや代替ストリームのサポート、Blu-rayやDVD-RAM、DVD±R/RWのサポートなどを特徴とする。

C:\>fsutil fsinfo volumeinfo e: ……DVD-ROMの情報を取得してみる
ボリューム名 : J_CCSA_X64FRE_JA-JP_DV5
ボリューム シリアル番号 : 0xfc51de7b
コンポーネント最大長 : 254
ファイル システム名 : UDF ……ファイルシステムはUDF
大文字と小文字を区別したファイル名をサポート ……以下の5つの機能がサポートされている
ファイル名の大文字小文字を保持
ファイル名での Unicode 使用をサポート
ハード リンクをサポートします。
ファイル ID で開く操作をサポートします。

C:\>



FATファイルシステムとは?

 FATファイルシステムは、PCの世界では非常に古くから使われているファイルシステムである。もともとはMS-DOSよりさらに前のDISK BASICの頃に開発された「FAT(File Allocation Table)」という管理方式をベースにしているので、こう呼ばれている。

 MS-DOS 1.xのリリースに合わせてFAT12が正式なディスクフォーマットとして採用され、その後はMS-DOSや16bit版のWindows OSにおける標準的なファイルシステムとして普及した。現在でもメモリカードやUSBメモリ、外付けハードディスクなどにおける標準的なファイルシステムとして利用されている。

C:\>fsutil fsinfo volumeinfo h: ……1GbytesのFAT16ディスクの例
ボリューム名 : FAT16VOL
ボリューム シリアル番号 : 0x2e69e739
コンポーネント最大長 : 255 ……現在のFATでは、Unicodeによる255文字までの長い名前をサポートしている。MS-DOSやWindows 3.xの時代のFATでは8.3形式の名前しかサポートされていなかった
ファイル システム名 : FAT
ファイル名の大文字小文字を保持 ……大文字と小文字の違いは維持するが、区別はしない
ファイル名での Unicode 使用をサポート

C:\>



FATのバリエーション:FAT12/FAT16/FAT32とexFAT

 ディスク容量の拡大に伴い、当初のFAT12では管理可能なディスクサイズがすぐに限界に達してしまった。そのためFAT12を拡張したFAT16が開発され、その後さらにFAT32となった。それぞれのFATタイプで管理可能な最大ディスクサイズなどの主な仕様は次の通りである。

FATタイプ FAT12 FAT16 FAT32
FATエントリのbit数 12bit 16bit 32bit
クラスターサイズ(2のべき乗) 512〜64Kbytes 512〜64Kbytes 512〜64Kbytes
最大クラスター数 約4080 約6万5500 2の28乗まで(理論値)
最大ディスクサイズ 32Mbytes 4Gbytes 32Gbytes
現在のWindows OSではこれ以上のサイズのディスクはexFATになる
最大ファイル名長 Unicodeで255文字 Unicodeで255文字 Unicodeで255文字
備考 ほぼフロッピーでのみ利用されるフォーマット メモリカードやUSBメモリなどで使われる メモリカードやUSBメモリなどで使われる
FATの仕様
FATにはFAT12/FAT16/FAT32の3種類があり、ディスクサイズ(ボリュームサイズ)に応じてどれが使われるかが変わる。この3種類は、クラスター番号を表すデータ幅が異なるのみで、それ以外の部分にはほとんど違いはない。

 「クラスター」とは、ディスクの割り当ての単位である(「アロケーション ユニット」ともいう)。フロッピーディスクやハードディスク、メモリカード、USBメモリなどは、基本的には「セクター」という単位でデータを読み書きするようになっている。

 しかし実際にはある程度まとめて読み書きした方が管理が簡単になるし、アクセス速度も向上するため、通常は複数のセクターをまとめた「クラスター」という単位でデータを読み書きする。

 FAT12/FAT16/FAT32ファイルシステムの名前に含まれる「12」「16」「32」という数値は、このクラスター番号を表現するために必要なデータのbit数を表している。つまりFAT12なら12bit、FAT16なら16bit、FAT32なら32bitということになる。

 クラスターのサイズは一般的には4Kbytesである(1セクターが512bytesだとすると、1クラスター=8セクターとなる)。このため、例えばFAT16ならクラスター番号の最大数は約6万5500となり、これとクラスターサイズの4Kbytesをかけると256Mbytesとなる。

 つまり、256MbytesのディスクをFAT形式でフォーマットすると、クラスターサイズが4KbytesのFAT16形式になる。もしディスクサイズが4倍の1Gbytesなら、やはりFAT16形式だが、クラスターサイズも4倍の16Kbytesになるだろう。

C:\>chkdsk h: ……1GbytesのFAT16ディスクの例
ファイル システムの種類は FAT です。
ボリューム FAT16VOL は 2015/07/13 15:36 に作成されました
ボリューム シリアル番号は 2E69-E719 です
ファイルとフォルダーを検査しています...
ファイルとフォルダーの検査を完了しました。
ファイル システムのチェックが終了しました。問題は見つかりませんでした。

1,070,301,184 バイト : 全ディスク領域 ……1Gbytesのディスク
       32,768 バイト : 2 個の隠しファイル
1,070,268,416 バイト : 使用可能ディスク領域

       16,384 バイト : アロケーション ユニット サイズ ……クラスターサイズは16Kbytesになる
       65,326 個     : 全アロケーション ユニット ……総クラスター数は約6万5000 
       65,324 個     : 利用可能アロケーション ユニット

C:\>



 ディスクサイズがさらに大きくなって4Gbytesになると、クラスターサイズは64Kbytesになる。それ以上のディスクサイズになるとFAT16では表現できなくなり、FAT32形式でフォーマットされることになる。

 Windows OSのformatコマンドなどでは、このようにディスクサイズとクラスターサイズから、どのFATファイルシステムを使うかが自動的に決まるようになっている。

C:\>format /? ……どのFATタイプになるかの確認
Windows で使うディスクをフォーマットします。

FORMAT ボリューム [/FS:ファイルシステム] [/V:ラベル] [/Q] [/A:サイズ] [/C] [/X] [/P:passes] [/S:状態]
FORMAT ボリューム [/V:ラベル] [/Q] [/F:サイズ] [/P:passes]
…(中略)…
  /A:サイズ 既定のアロケーション ユニット サイズを無効にします。 …クラスターサイズを指定するパラメーター
            一般的には、既定の設定を使用してください。 …ファイルシステムごとの、利用可能なクラスターサイズ
            NTFS は、512、1024、2048、4096、8192、16K、32K、64K を
            サポートします。
            FAT は、512、1024、2048、4096、8192、16K、32K、64K を
            サポートします
            (セクター サイズが  512 バイトよりも大きい場合は 128K、256K)。
            FAT32 は、512、1024、2048、4096、8192、16K、32K、64K を
            サポートします
            (セクター サイズが  512 バイトよりも大きい場合は 128K、256K)。
            exFAT は、512、1024、2048、4096、8192、16K、32K、64K、128K、
            256K、512K、1M、2M、4M、8M、16M、32M をサポートします。

            FAT と FAT32 ファイル システムは、下記のボリュームの
            クラスター数の制限に従います:

            FAT: クラスター数 <= 65526 …このクラスター数以下だとFAT16になる
            FAT32: 65526 < クラスター数 < 4177918 …このクラスター数だとFAT32になる

            指定されたクラスター サイズを使用して上記の要件を満たせない
            と判断された場合、フォーマットの処理は直ちに停止します。
…(以下省略)…



 上のメッセージから分かるように、もし総クラスター数が417万7918個以上になるようなら、FAT32も使えない。代わりに「exFAT」という、より上位の仕様が使われることになる(詳細は後述する)。

8.3形式を超える長い名前のサポート

 ちなみに、FATにおいて現在のように「長いファイル名(long file name。LFN)」がサポートされるようになったのはWindows NT 3.5/Windows 95以降である。それ以前はFATでは短い8.3形式の大文字のファイル名しかサポートされていなかった。

 これらのOSでは、従来との互換性を保ったまま長いファイル名や空白文字を含む名前なども扱えるように機能が拡張された。このように拡張されたFAT(とそれを処理するシステム側のドライバー)のことを「VFAT(Virtual FAT)」と呼ぶことがある。

 FAT上で長い名前を作成すると、デフォルトではそれに対応する短い8.3形式の名前も「同時に」作成され、そのどちらを使っても同じファイルやフォルダーにアクセスできるようになる。例えば「C:\Program Files」という長い名前は「C:\PROGRA~1」という名前でも参照できる。

 FAT上のある名前に対して、8.3形式の名前が存在するかどうか、するならどのような名前になっているかを確認するには、例えばコマンドプロンプト上で「dir /x 〜」コマンドを実行すれば分かる。

C:\>dir p* …dirコマンドで名前の一覧を取得する
 ドライブ C のボリューム ラベルは SVRSX02 です
 ボリューム シリアル番号は 6C2F-4499 です

 C:\ のディレクトリ

2013/08/23  00:52  <DIR>   PerfLogs
2014/08/02  15:50  <DIR>   Program Files
2015/04/29  21:42  <DIR>   Program Files (x86)
     0 個のファイル        0 バイト
     3 個のディレクトリ  56,871,198,720 バイトの空き領域

C:\>dir p* /x …/xオプションを付けてdirコマンドを実行する
 ドライブ C のボリューム ラベルは SVRSX02 です
 ボリューム シリアル番号は 6C2F-4499 です

 C:\ のディレクトリ

2013/08/23  00:52  <DIR>            PerfLogs
2014/08/02  15:50  <DIR>  PROGRA~1  Program Files …「PROGRA~1」が8.3形式の名前
2015/04/29  21:42  <DIR>  PROGRA~2  Program Files (x86) …「PROGRA~2」が8.3形式の名前
     0 個のファイル            0 バイト
     3 個のディレクトリ  56,871,198,720 バイトの空き領域

C:\>



 この例では「PROGRA~1」と「PROGRA~2」という名前が表示されている。これらが8.3形式の短いファイル名である。これを使えば「dir C:\PROGRA~1\win*」のように利用できる。ただし「~」の前後の文字や数字は衝突しないように適宜変わるので、常に「PROGRA~1」という名前になるわけではない。

短い名前の生成を抑制する

 デフォルトではこの短い名前は常に自動的に作成されるようになっている(作成しようとした名前が8.3形式で表現できないと自動的に作成される)。だが場合によってはこのような自動的な生成を抑制したいこともあるだろう。

 例えば次の例を見ていただきたい。「dir *2*」を実行したところファイルが1つ表示されたが、このファイル名にはどこにも「2」という数字は含まれていない。

C:\>dir *2* …「2」を含むファイル名を表示させてみる
 ドライブ C のボリューム ラベルは SVRSX02 です
 ボリューム シリアル番号は 6C2F-4499 です

 C:\ のディレクトリ

2015/04/29  21:42  <DIR>   Program Files (x86) …なぜか「2」が含まれていないのに表示されている
     0 個のファイル        0 バイト
     1 個のディレクトリ  56,868,171,776 バイトの空き領域

C:\>



 理由はお分かりだろう。8.3形式の短い名前の方に「2」が含まれているので、dirコマンドの検索結果にマッチしたというわけだ。

 8.3形式の名前の自動生成機能は過去との互換性を維持するために用意されている(プログラムによっては、パス名の途中に空白文字などが入っていると動かなくなるものがあるため)。もし不要なら無効にしてもよいだろう。無効にすると、余分な処理がなくなるため、システムの負荷がわずかだが下がる可能性がある。

 この機能の有効/無効を切り替えるには、「fsutil 8dot3name 〜」コマンドを使う。詳しい設定方法については関連記事を参照していただきたい。システム全体とボリュームごとの設定の2カ所があり、その両方の設定に応じて、最終的に自動生成されるかどうかが決まる。

C:\>fsutil 8dot3name query c: …ボリュームC:の設定状態を確認する
ボリュームの状態は 0 です (8dot3 名の作成は有効です)。 …ボリュームごとの設定
レジストリの状態は 2 です (ボリューム単位で設定します - 既定値)。 …システム全体の設定

上の 2 つの設定に基づいて、8dot3 名の作成は c: で有効です …上の2つの設定に基づいて、現在は自動生成が有効になっている

C:\>fsutil 8dot3name set c: 1 …ボリュームC:でのみ無効にしてみる
8dot3name の生成が c: で無効になりました …設定が変更された

C:\>




       1|2 次のページへ

Copyright© Digital Advantage Corp. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。