検索
連載

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

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

PC用表示 関連情報
Share
Tweet
LINE
Hatena
前のページへ |       

より高機能なexFATとは?

 FAT32では最大32Gbytesまでのディスクサイズに対応できる。だが現在では、より大容量のメモリカードや外付けハードディスクなども利用されている。

 それらに対応するため、FAT32をさらに拡張した「exFAT」というファイルシステムが開発された。現在では、市販の大容量メモリカードなどはこの形式でフォーマットされて販売されている。Windows OSでは、Windows Vista SP1/Windows Server 2008以降でサポートされている。

 exFATはFATという名前は付いているものの、FATと比較すると、内部的にはかなり機能が拡張されている。主な特徴は次の通りである。

  • 最大ファイルサイズの拡大
     最大ファイルサイズが従来のFATの2の32乗(4Gbytes)ではなく、2の64乗(16Ebytes)にまで拡張されている。これにより、1ファイルで4Gbytesを超えるようなビデオファイルやDVDイメージファイル(ISOファイル)などでも問題なく保存できるようになっている。
  • クラスターサイズの拡大によるアクセス速度の向上
     64Kbytesを大きく超えるクラスターを作成できるので、ファイルアクセスのパフォーマンスが向上する。
  • 空き領域の管理方法の改善
     空きクラスターの管理を、従来のFATテーブルからビットマップ方式に変更している。FATはファイルへのクラスター割り当てと空き領域を同時に管理できる半面、FAT全体のサイズが大きくなりがちで、ファイル削除や空き領域の検索処理などにおける負荷が高い。exFATでは空きクラスターをビットマップで管理しているので、ファイル削除時にはFATではなく空き領域ビットマップを走査するだけなので高速に処理できる。
  • 高速な名前検索
     ハッシュ値を使って、高速な名前検索を実現している。
  • 耐障害性機能の向上
     exFATではチェックサムやECCを使って、メタデータの整合性チェックなどを行っている(FATにはこのようなチェック機能は一切なかった)。

 FAT32とexFATの主な違いを次にまとめておく。次のTIPS記事も参照していただきたい。

機能 FAT32 exFAT
最大ボリュームサイズ 32Gbytes
Windows 9x/Meでは128GbytesまでのFAT32ボリュームを作成可能だった
FAT32の理論上の最大サイズは2Tbytesまで可能
理論上は2の32乗クラスターまで可能
実装上は256Tbytesまで可能
最大ファイルサイズ(理論値) 2の32乗−1bytes(4Gbytes) 2の64乗−1bytes(16Ebytes)
クラスターサイズ(2のべき乗) 512〜64Kbytes 512〜32Mbytes
理論上は2の255乗セクターまで可能
最大クラスター数 実装上は4,177,918クラスターまで可能
理論上は2の32乗クラスターまで可能
理論上は2の32乗クラスターまで可能
ファイル圧縮 × ×
ファイル暗号化 × ×
フロッピーサポート FAT12 ×
リムーバブルメディアサポート
トランザクション処理 × ×(現状では未実装。将来追加される可能性がある)
アクセス制御リスト(ACL) × ×(現状では未実装。将来追加される可能性がある)
最大パス名 Unicodeで255文字 Unicodeで255文字
大文字/小文字の区別 なし なし
8.3形式の短縮名サポート ×
ファイルの作成日時属性 ○(0.01秒単位) ○(0.01秒単位)
ファイルの更新日時属性 ○(偶数秒のみ記録) ○(0.01秒単位)
ファイルの最終アクセス日時属性 日付情報のみ(時刻情報はなし) ○(偶数秒のみ記録)
サポートOS 全てのWindows OS Windows Vista SP1/Windows Server 2008以降
Windows OSのシステムドライブ用(C:としての利用) 不可 不可
Windows OS標準のデフラグツール 適用可能 適用不可
FAT32とexFATの主な違い

 exFATファイルシステムの例を次に示しておく。NTFSではないが、4Gbytesを超えるファイルを作成できている(ファイル作成に使っているfsutilコマンドについては、TIPS「巨大なサイズのファイルを簡単に作る方法」参照)。

W:\>fsutil fsinfo volumeinfo w: …exFATボリューム情報の取得
ボリューム名 : exFAT
ボリューム シリアル番号 : 0x72b7635a
コンポーネント最大長 : 255 …Unicodeで最大255文字サポートなどの仕様はFAT32と同じ
ファイル システム名 : exFAT
ファイル名の大文字小文字を保持
ファイル名での Unicode 使用をサポート

W:\>fsutil file createnew file-50gb 50000000000 …50Gbytesのファイルを作成してみる
ファイル W:\file-50gb が作成されました …ファイルが作成された。FAT32上だとエラーになってファイルを作成できない。ファイルサイズが4Gbytesを超えているからだ

W:\>dir
 ドライブ W のボリューム ラベルは exFAT です
 ボリューム シリアル番号は 72B7-635A です

 W:\ のディレクトリ

2015/07/13  12:49    50,000,000,000 file-50gb …1ファイルで50Gbytesものサイズを持つファイル。NTFSでなくてもこのようなファイルを作成できる。
               1 個のファイル      50,000,000,000 バイト
               0 個のディレクトリ  87,365,533,696 バイトの空き領域

W:\>chkdsk w: …このボリュームをチェックしてみる
ファイル システムの種類は exFAT です。…exFATファイルシステムが使われている
ボリュームは別のプロセスによって使用されています。破損が存在し
ないときに Chkdsk によってエラーが報告される場合があります。
ボリューム シリアル番号は 72B7-635A です
ファイルとフォルダーを検査しています...
ボリューム ラベルは exFAT です。
ファイルとフォルダーの検査を完了しました。
ファイル システムのチェックが終了しました。問題は見つかりませんでした。

 134148096 KB : 全ディスク領域  …ディスクサイズは128Gbytes
  48828128 KB : 1 個のファイル
         8 KB : 1 個のインデックス
         0 KB : 不良セクター
      2056 KB : システムで使用中
  85317904 KB : 使用可能領域

      8192 バイト : アロケーション ユニット サイズ  …クラスターサイズは8Kbytes
  16768512 個     : 全アロケーション ユニット
  10664738 個     : 利用可能アロケーション ユニット

W:\>



FATの内部構造

 ここでFATファイルシステムの内部構造について簡単に解説しておこう。

 ディスクをFATファイルシステムでフォーマットすると、その内容は次のようになる。

FATファイルシステムのディスクフォーマット
FATファイルシステムのディスクフォーマット
FATファイルシステムでフォーマットされたディスクでは先頭にブートコード、続いてFATが2つ(コピー)、固定長のルートディレクトリ用領域が確保され、その後ろからクラスターが確保される。クラスター番号0は空きクラスターを表すため、未使用。

 ディスクの先頭にブートセクターがあり、ここにはこのパーティションをブートさせるためのコードが記録されている。ただしブートしないディスク(データの保存にのみ使うディスク)の場合はブートコードは置かれず、単にディスクの属性(ディスクのサイズやFATファイルシステムの総クラス多数などのパラメーター)が記入されているだけである。

 ブートコードに続いて、通常は2つのFATデータが置かれている。この2つのFATの内容は、基本的には全く同じである。2つあるのは障害対策のためであり、例えばディスクの障害などで1つ目のFATがアクセスできなくなった場合は、2つ目のFATを使ってアクセスが継続される。

 ただし、FATファイルシステムではこのように2つのFATが同じような場所に連続して置かれているため、実際にはあまり障害に対する耐性は高くない。1つ目のFATに障害が発生する(アクセスできなくなる)ようだと、そのうち2つ目のFATにも同じことが起こる可能性が高い。エラーが見つかったら(CRCエラーなどが報告されるであろう)、速やかにディスクからデータを救い出してバックアップするのがよいだろう(関連記事参照)。NTFSやexFATではもっと離れた場所にコピーを保存している。

 FATの直後にはルートディレクトリエントリが配置されている。この部分には、システムに保存されているファイルの情報を保持する「ディレクトリエントリ」が記録されている。

 ルートディレクトリエントリの領域(位置やサイズ)はディスクの容量に応じてあらかじめ決められており、後で変更することはできない。そのため、ドライブのルートに作成できるファイルやフォルダーの数には制限がある。通常は1万ファイル以上は作成できるはずだが、この制限に引っかかると、空き領域がいくらあってもルートにファイルを作成できなくなる。

※ルートのファイル数制限にひっかった場合の例
O:\>dir > onemorefile.txt …ファイルを1つ作成させてみる。これは16GbytesのFAT32ドライブ上での実行例
ディレクトリまたはファイルを作成できません。 …ファイルが作成できない

O:\>chkdsk  …chkdskで調査してみる
ファイル システムの種類は FAT32 です。
ボリュームは別のプロセスによって使用されています。破損が存在し
ないときに Chkdsk によってエラーが報告される場合があります。
ボリューム FAT32VOL は 2015/07/13 15:44 に作成されました
ボリューム シリアル番号は 74B3-1D52 です
ファイルとフォルダーを検査しています...
ファイルとフォルダーの検査を完了しました。
ファイル システムのチェックが終了しました。問題は見つかりませんでした。
   16,753,664 KB : 全ディスク領域
           24 KB : 3 個のフォルダー
      180,560 KB : 22,279 個のファイル  …このシステムでは、ルートに約22300ファイルあった
   16,571,032 KB : 使用可能ディスク領域 …まだ空き領域は十分ある

        8,192 バイト : アロケーション ユニット サイズ
    2,094,208 個     : 全アロケーション ユニット
    2,071,379 個     : 利用可能アロケーション ユニット

O:\>



●ディレクトリエントリの形式

 ディレクトリエントリのフォーマットを次に示しておく。ディレクトリエントリには、ファイル名の他、ファイルの属性やファイルサイズ、更新日付や作成日、データの開始クラスター番号などの情報が保存されている。

FATのディレクトリエントリ
FATのディレクトリエントリ
ディレクトリエントリは、1エントリ当たり32bytesの固定長であり、この中には8.3形式のファイル名やファイルサイズ、属性、クラスター番号などの情報が保存されている。長いファイル名がある場合は、隣接するディレクトリエントリも使って長い名前の情報を保存する。何エントリ使うかは、名前の長さによって変わる。

 ディレクトリエントリのサイズは基本的には32bytesの固定長であるが、この中には8.3形式の短い名前しか格納できない。もし長いファイル名が使われていると、それを格納するために、(隣接する)複数のエントリも同時に消費する。

●FATの構造

 最後にFATの構造についても触れておこう。ディレクトリエントリの中には、データの開始クラスター番号が格納されており、Windows OSのストレージサブシステムは、この開始クラスター番号をFATテーブル上で辿って、実際のデータが保存されているクラスターの位置(番号)を特定する。

 例えばディレクトリエントリに「#013」というクラスター番号が記入されていた場合、ファイルのデータが格納されている先頭クラスターは、#013のクラスターになる。こうやって最初のクラスターにアクセスすると同時に、FAT上で#013のエントリの内容をチェックする。すると「#014」となっているので(次の図参照)、次のクラスターは#014であることが分かる。

FATのチェーンを辿ってクラスターへアクセスする
FATのチェーンを辿ってクラスターへアクセスする
FATのエントリに数字が入っていたら、それは次のクラスターを指す番号。#FFFF(16進数)ならFATチェーンの終了(FAT16の場合)、#000なら空きクラスターである。このようにFATでは、クラスターのチェーンと空き領域の管理を兼用している。

 さらにFATの#014の内容を見ると#015となっているので、3つ目のクラスターは#015となる。さらにFATの#015を見るが、ここでは#FFFFとなっている。これはFATチェーンの終了を意味している。つまりこれ以上データはない、ということを表している。

 以上の例では3つのクラスターにファイルデータの内容が保存されていたが、フォルダーの場合はファイルデータではなくディレクトリエントリが保存されている。なのでその中をたどれば、サブフォルダーへアクセスできることにある。


 今回はWindows OSで利用可能なファイルシステムの概要と、FAT/exFATファイルシステムについてその概要を述べた。より複雑で高度な機能を持つNTFSについては次回取り上げる。

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

Windows OS入門

Copyright© Digital Advantage Corp. All Rights Reserved.

前のページへ |       
ページトップに戻る