Windows XPやWindows Server 2003のハードディスクで利用できるファイル・システムは3種類ある。FAT,FAT32,NTFSだ。

 FATは,MS-DOSの時代から利用されてきたファイル・システムであり,FAT12とFAT16の2つを含む。FAT12は,最大32Mバイトまでしか利用できないため,主にフロッピ・ディスクなどで使われる。ハードディスクで利用されるのは通常FAT16である。WindowsでFATとしてフォーマットする場合は,容量に応じて自動的にFAT12もしくはFAT16が選択される。

 FATでは,ディスク上の複数のセクターをまとめた「クラスタ」と呼ぶ単位でディスク領域を管理する。クラスタのサイズはパーティションのサイズに応じて変化し,最小で512バイト,最大で32Kバイト(Windows 9x系)または64Kバイト(Windows NT系)である。FAT16では,クラスタを16ビットのインデックス(0~65535,実際には一部が予約済み)で管理するため,64Kバイト×65536=4Gバイトが最大パーティション・サイズとなる。現在では,4Gバイトのパーティションは決して十分な領域とは言えない。また,たとえ1バイトのファイルでも1クラスタを使用するので,クラスタ・サイズが大きいとディスク領域が無駄に占有されてしまう。

 加えて,ファイルの所有者やアクセス許可などを設定できないのも今となっては問題だ。FATはこうした情報を格納する領域をファイル・システムとして用意していないためである。さらに,ファイル・システムそのものの信頼性も十分ではない。ファイル操作中にOSが異常終了すると,ファイル・システム全体が破損することさえある。

 FAT32はWindows 95 OSR2(OEM Service Release 2)からサポートするようになった新しいFATファイル・システムである。FAT32では,クラスタを32ビット(実際には実装の都合で28ビット)のインデックスで管理することで最大2Tバイトまでのパーティションを扱えるようにした(単純に計算すると2Tバイトを超えるが,実装の都合で2Tバイトに制限される)。しかし,アクセス許可などを設定できないことに変わりはないし,信頼性も多少向上したものの十分とはいえない。

 一方,NTFSはFAT/FAT32と全く違ったファイル管理手法を採用している(図1)。NTFSは,MFT(マスター・ファイル・テーブル)と呼ぶ領域に各ファイルの属性やファイル名などを格納する。ファイル・サイズが小さいときにはデータ自体もMFTに格納してしまうため,小さいファイルが大量にあるような場合でも無駄な領域を抑えられる。その上,セキュリティ設定を保存するための領域を用意しているので,ファイルごとにアクセス許可を設定することも可能だ。

図1●NTFSがファイルを管理する方法
MFTの各レコードには,ファイル/フォルダの属性と名前,データの格納位置などの情報が格納される。データ本体やセキュリティ記述子は,ファイル・システム・データ領域に格納される。データのサイズが小さいときは,レコードの中に直接格納されることもある。

 またログを取ることでファイルの書き込み処理の途中でエラーなどが発生したときに,ディスクの状態を元に戻す機能も備えている。このため,ファイルの操作中に異常終了しても管理情報の不整合性によってファイル・システム全体が破損することはない。こうした理由から,Windows NT系のOSではほかのOSとデュアル・ブートするような場合を除き,NTFSを利用するのが望ましい。

変換の際には空き容量に注意

 FATまたはFAT32でフォーマットされたドライブは,convertコマンドを使って内容を維持したままNTFSへ変換できる(図2)。convertコマンドは,使用中のファイルがあって変換できない場合は,再起動時に変換するようにスケジュールする。このため,Windowsをインストールしたドライブであっても変換は可能である。

図2●convertコマンドの実行結果
変換に必要な空き領域があるかどうかなどをチェックしてから変換を実行する。[画像をクリックすると拡大]

 ドライブの変換に当たっては,次の点に注意する必要がある。

●FATに戻すことはできない
 いったんNTFSに変換した後でFATに戻したいと思っても,そのようなコマンドは存在しない。現在利用されているアプリケーションの多くはNTFSで問題なく使えるが,FATに依存するようなプログラムはNTFSでは実行できなくなってしまう。ドライブをNTFSに変換した後で再度FATに戻したい場合には,ドライブをフォーマットしなければならない。

●ある程度の空き領域が必要
 convertコマンドでNTFSに変換するには,作業領域としてドライブに一定の空き容量が必要になる。convertコマンドは,FATドライブに存在するファイル数とドライブのサイズを基に,変換を開始する前に必要な空きスペースの量を計算する。空き領域が不足している場合には変換処理を実行できない。

●MFTの断片化を避ける
 NTFSでは,MFTの断片化(フラグメント)が発生するとディスク・アクセスのパフォーマンスが低下してしまう。元々NTFSでフォーマットしたドライブは,フォーマット時に領域の一部(既定で8分の1)をMFT用に確保するため,MFTが断片化を起こすことはない。しかし,FAT32から変換したドライブではMFTの割り当て方次第で断片化が発生する可能性がある。これを回避するには,/cvtareaオプションを利用してMFTに割り当てる領域を明示的に指定する必要がある。convertコマンドのオプションについては表1を参照していただきたい。

表1●convertコマンドのオプション
オプション 説明
/fs:ntfs パーティションをNTFSに変更する。必ず指定する
/v 詳細なメッセージを表示する
/cvtarea:<ファイル名> 指定したファイルが占めるディスク領域をMFT用の領域として使用 する。あらかじめFATファイル・システム上で連続した領域をファイル として確保しておくことで,MFTの断片化を防止できる
/nosecurity 変換後のファイルとフォルダに対してすべてのユーザーがフル・コント ロールの権限を持つようにNTFSアクセス権を設定する
/X 必要に応じてボリュームを強制的にマウント解除し,オープン中のフ ァイル・ハンドルをすべて無効にする

 設問について補足すると,ファイル・システムを変換するGUIツールはないので選択肢4,5は誤りだ。またfsutilはWindows XPで新たに追加されたコマンドで,ディスク・クォータやハード・リンクの設定などファイル・システム関連の様々な作業を実行できるが,ファイル・システムを変換する機能は備えていない。従って正解は選択肢1となる。

日経Windowsプロ2006年1月号掲載
藤田 将幸=グローバルナレッジネットワーク