Windows 秘話ファイル システムのパラドックス

Raymond Chen

ハード ドライブを 見てみると、ブート ドライブのルート ディレクトリに数多くのオペレーティング システム ファイルがあることを確認できるでしょう。そういったファイルを詳しく見てみると、今月のコラムのテーマに気付くかもしれません。boot.ini、NTLDR、および NTDETECT.COM は重要なブート ファイルで、hiberfil.sys は休止状態ファイルです。このようなファイルはすべて、オペレーティング システムを起動する (hiberfil.sys については、休止状態から再開する) 重要な最初の段階で必要となるもので、ブート ドライブのルートに配置されている必要があります。これをどこか別の場所に移動させることができないのはなぜでしょうか。

同僚の Adrian Oney が次のように説明してくれました。ディスクからブート ファイルを読み取るには、ファイル システム ドライバが必要ですが、ファイル システム ドライバはディスク上にあるので、ファイル システム ドライバを読み込むまではブート ファイルを読み取れません。ああ、お手上げです。

この悪循環は、重要なブート ファイルに組み込まれた小さなファイル システム ドライバによって断つことができます。この小さいドライバでは、ルート ディレクトリのファイルを見つけて、メモリに読み込むということだけを行います。システム ファイルが読み込まれると、オペレーティング システムが起動され、この時点で、本物のファイル システム ドライバが処理を引き継いで、サブディレクトリのようにもっと手の込んだ場所のファイルを検索することができます。

  

休止状態でも同様のパターンになります。オペレーティング システムを休止状態にするということは、メモリの内容すべてが休止状態ファイルにダンプされることを意味します。また、休止状態から再開するときには、そのファイルの内容をメモリに戻し、何も起こらなかったようなふりをします。ここでも、ニワトリが先か卵が先か、という因果関係のわからない別の問題があります。休止状態ファイルを読み込むには、ファイル システム ドライバが必要です。しかし、ファイル システム ドライバは休止状態ファイルの中にあります。休止状態ファイルをブート ドライブのルート ディレクトリに格納していれば、代わりに小さいファイル システム ドライバを使用することができます。

初期のバージョンの MS-DOS® を使用したことのあるユーザーであれば、オペレーティング システムのブート ファイルの場所に関する制約についてはご存知でしょう。すてきな SYS コマンドにより、何の変哲もないフロッピー ディスクが起動可能な魔法のフロッピー ディスクになりました。ただし、初期のバージョンの MS-DOS では、ブート セクタがブート ファイルを検出できるようにするには、ブート ファイルがフロッピー ディスクの特定の場所に格納されている必要がありました。そのため、既にデータが入っているフロッピー ディスク上で SYS コマンドを実行すると、この切り替えが適切に行われない可能性がありました。より新しいバージョンの MS-DOS では、ブート ローダーを改善することでそういった要件が緩和されました。しかし改善されたバージョンでも、システム ファイルは、まだルート ディレクトリに配置される必要があります。

あるユーザーから「休止状態ファイルをサブディレクトリに移動させてもいいですか。」という問い合わせを受けました。結局のところ、どうしてファイルの配置場所が重要なのでしょうか。ファイルの ACL は、ファイルがどこにあったとしても同じです。しかし、このような問い合わせをしてきたユーザーは、ブート ドライブではないドライブに休止状態ファイルを配置したいと思っていましたが、それはできないと言われてきました。しかし、彼らは、この制約の理由を本当に理解せずに、回避策を試したのです。その回避策とは、次のようなものでした。ブート ファイルをサブティレクトリに移動できるという仮定の下、ディレクトリを作成して、そのディレクトリを実際に休止状態ファイルを配置する場所を指し示す接合ポイントにしました。そして、休止状態ファイルの移動作業は完了としました。

もちろん、小さなファイル システム ドライバはマウント ポイントを認識することはできません。というのも、マウント ポイントはディスク管理サービスと対話するためのもので、システムの起動中、コンピュータでは、まだオペレーティング システムさえも読み込まれておらず、ましてドライブ文字をマッピングして ARC パスに戻す方法を認識できる一部の手の込んだ高度なサービスなどを読み込めているはずもないのです。そして、もしディスク管理サービスを実行することができたとしても、他のハード ドライブのデバイス ドライバを見つけて、対応するファイル システム ドライバを読み込む必要があります。

休止状態ファイルを DFS 接合ポイントに配置する方法についての問い合わせがあるのは時間の問題です。

Raymond Chen は自分の Web サイト「The Old New Thing」および同じタイトルの書籍 (Addison-Wesley、2007 年) で、Windows の歴史と Win32 プログラミングについて扱っています。Web 2.0 では Raymond または Chenster と名乗っています。

© 2008 Microsoft Corporation and CMP Media, LLC. All rights reserved; 許可なしに一部または全体を複製することは禁止されています.