Windows 2000/XPなどWindows NT系列のOSのファイル・システムであるNTFS(NT File System)は,DOSやWindows 9xのファイル・システムであるFAT(File Allocation Table)やFAT32と比べて格段に高い機能を持つ。NTFSの特徴の1つ「回復性」は,クラッシュ時のデータ損失を最小限に食い止める。高い信頼性を要求されるサーバーをはじめ,Windows NT系列のOSが想定する企業ユーザーにとって,極めて重要な機能だ。

 ファイルを書き込んでいるときにあなたのシステムがクラッシュしたとしよう。FAT(File Allocation Table) /FAT32では,書き込み中だった不完全なデータがそのままディスク上に残り,管理情報と実データに矛盾が生じる。運が悪ければファイル・システム全体にアクセスできなくなる可能性すらある。しかしNTFS(NT File System)では,システムの再起動時に不完全なデータが消去され,矛盾のない状態へ自動的に回復する(図1)。万一に備えるという地味な役回りのため,NTFSといえばとかくセキュリティ機能や大容量ドライブへの対応に目が行きやすい。しかし,この「回復性」を実現するためにNTFSは非常に複雑な処理を行っている。

図1●NTFSの回復機能<br>ファイル・システムへの書き込み中に突然の停電などでシステムが異常終了した場合,(a)NTFSのディスクは仕掛かり中だった操作を自動的に取り消してそれまでの変更を元に戻し,矛盾のない状態にする。一方,(b)FAT/FAT32はこうした機構がなく,ディスクそのものにアクセスできなくなることがある。
図1●NTFSの回復機能
ファイル・システムへの書き込み中に突然の停電などでシステムが異常終了した場合,(a)NTFSのディスクは仕掛かり中だった操作を自動的に取り消してそれまでの変更を元に戻し,矛盾のない状態にする。一方,(b)FAT/FAT32はこうした機構がなく,ディスクそのものにアクセスできなくなることがある。
[画像のクリックで拡大表示]

ファイル操作を一つひとつ確実に処理する

 ファイルの破壊を防いだり大量のアクセスを効率よく処理したりするディスク・アクセスの手法は,NTFS以前からいくつか存在している。

 例えば,複数のディスク操作を一つひとつシリアルに処理する「ケアフル・ライト」という手法がある。ディスク操作の要求が同時に複数のアプリケーション(厳密にはプロセス)から発行された場合も,1つの処理が終わらない限り,次の処理へは移行しない(図2-a)。

図2●ケアフル・ライトと遅延書き込み
図2●ケアフル・ライトと遅延書き込み
ファイル・システムには安全性や性能を向上させるための仕組みが組み込まれている。(a)ケアフル・ライトは,処理を一つひとつシリアルに処理することで安全性を高めるが,処理が混み合うと待ち時間が大きくなる。(b)遅延書き込みは,ファイル変更をメモリー上のキャッシュに記録して後でディスクに反映することで,ケアフル・ライトに伴う待ち時間の問題を低減する。

 ケアフル・ライトは一定の信頼性を確保できるが,操作の要求から実行までの待ち時間が長くなりやすい。そこで,この問題を解決する「遅延書き込み(レイジー・ライト)」というテクニックもよく使われる。アプリケーションからのファイル変更をキャッシュ・メモリー上に一時的に記録して,処理が終わったように見せかける(図2-b)。キャッシュからディスクへの反映はバックグラウンドで処理する。ディスクへの物理的な書き込み速度は変わらないが,アプリケーションの待ち時間を大幅に圧縮できる。

 しかし,ケアフル・ライトと遅延書き込みを組み合わせるだけでは,まだ大きな欠点が残る。遅延書き込みではキャッシュの内容が実際にディスクに反映されるのは,アプリケーションが書き込み終了を認識するよりもかなり後になる。反映される前にシステムがクラッシュすると,保存したはずのデータが実際にはディスク上に存在しないという事態になる。また,ディスクへの書き込みの最中にシステムがクラッシュしてしまうと,何の回復手段もない。これでは,信頼性の点でFAT/FAT32と大差ない。