検証
ディスク・デフラグメント完全マスター

2.ディスク・フラグメントの基礎知識(2)

デジタルアドバンテージ
2000/10/21

フラグメント発生のメカニズム

 フォーマットしたばかりのハードディスクにファイルを書き込んだときには、クラスタは物理的に連続している。それでは、ファイルのクラスタがバラバラになるのは(フラグメントが発生するのは)どのような場合だろうか。ここでは最も単純化した例によってこれを説明しよう。

最も単純なフラグメント発生のメカニズム

ハードディスクをフォーマットした直後に書き込んだ一連のファイルは、基本的にすべて連続して配置される。しかしこの状態から、ファイルの削除と作成を繰り返すと、フラグメント(断片化)が発生する。
  ハードディスクをフォーマットした直後に、A〜Dまでの4つのファイルを次々と書き込んでディスクをいっぱいにした状態。当然ながらフラグメントはまったくないので、余計なヘッド・シークを伴うことなく、どのファイルも最高速で読み出すことができる。
  の状態からFile BとFile Dを削除したところ。ファイルを削除すると、そのファイルが占めていたディスク中の領域がそのまま「空き領域」になる。
  の状態で、File BとFile Dの合計サイズに等しいFile Eを書き込んだところ。1つ分の空き領域ではFile Eを書き込めないので、物理的に離れた2つの空き領域にFile Eは書き込まれる。File Eでフラグメントが発生する。
  のようにFile Eにフラグメント発生させないためには、あらかじめ空き領域を連続させておけばよい。この場合、具体的には、File CをFile Aの直後に移動する。この作業がデフラグメント(defragment)である。
  言うまでもなく、の状態でFile Eを書き込めば、フラグメントは発生せず、File Eは物理的に連続する。これなら、いずれのファイルも最高速で読み出すことが可能である。

 まずは、フォーマットしたばかりのハードディスクに対し、A〜Dまでの4つのファイルを次々と書き込んでディスクをいっぱいにした状態がである。フラグメントはまったく発生することなく、すべてのファイルは物理的に連続しているので、余計なヘッドシークを伴うことなく、どのファイルも最高速で読み出すことができる。

 次にこの状態から、File BとFile Dを削除する()。一般的なほとんどのファイル・システムでは、File BとFile Dが占有していた領域がそのまま「空き領域」となる。残されたFile AやFile Cは物理的に連続しているので、と同様に最高速で読み出すことが可能だが、空き領域は分断された状態になっている。

 続いて、サイズの大きなFile Eをディスクに書き込む()。ここでは話を簡単にするために、File EのサイズはFile BとFile Dのサイズを合計したものとする。このとき、元のFile Bが占めていた領域だけではFile Eを書き込めないが、File Dが占めていた領域も加えればFile Eを書き込むことができる。ただしこの場合は、物理的に分断された領域に書き込むので、書き込み時にヘッド・シークが発生する。そして書き込みを終えると、File Eは図のように2つの領域に分断されて格納される。File Eは物理的に連続していないので、読み出し時にもヘッド・シークが必要になる。

 この例から分かるとおり、フラグメントには「空き領域のフラグメント」と、「ファイルのフラグメント」の2種類がある。このうち前者の「空き領域のフラグメント」では、ファイルの書き込み時にヘッド・シークによるオーバーヘッドが発生し、後者の「ファイルのフラグメント」では、ファイルの読み出し時にヘッド・シークによるオーバーヘッドが発生する。

 それでは、File Eを分断しないためにはどうすればよいか。これには、File BとFile Dを削除した後で、のようにFile Cを移動して、空き領域を連続させておくことだ。ディスク内のファイル配置がこのようになっていれば、File Eを書き込む際にも余計なヘッド・シークは発生しないし、ディスクに書き込まれたFile Eも物理的に連続するので、フォーマット直後と同様に、すべてのファイルを最高速で読み出すことができる()。

 このように、ディスク中のファイルを移動させて、連続した空き領域を作り出したり、1つのファイルを連続した領域に統合したりする作業は、フラグメントを解消するという意味で「デフラグメント(defragment)」と呼ばれる。

フラグメント発生の典型的なケース

 先の例では、話を簡単にするために、抽象的なファイル単位で大づかみな説明をしたが、実際のファイルは複数のクラスタから構成されており、それらが複雑に入り乱れてフラグメントを発生させている。またユーザーがファイルの削除や作成を直接指示しなくても、OSなどが一時ファイルの作成や削除を繰り返し行っている。

 Windows 2000をクライアントとして使用するとき、フラグメントが発生する典型的なケースを以下にいくつかご紹介しよう。

■Webブラウジング
 遅い回線でも効率よくWebページにアクセスできるように、Webブラウザは一度表示したページ・データや画像データをディスク・ファイルにキャッシュしておき、再度同じページや画像の表示要求があった場合、可能ならこのキャッシュからデータを取り出すことで、素早くページを表示できるようにしている。Internet Explorer(IE)ではこれを「インターネット一時ファイル」と呼んでいる。キャッシュがいっぱいになると、新しいデータを記録するために、古いデータは次々と削除されていく。

■アプリケーションのインストール
 意外かもしれないが、単純にアプリケーションをインストールしただけでも、フラグメントは発生している。インストール・ディスクのファイルをただハードディスクにコピーしていたのは昔の話で、現在市販されているアプリケーションの多くは、ユーザーの選択や環境に応じて、インストールするモジュールを切り替えたり、カスタマイズを行ったりするようになった。この手のインストーラは、テンポラリ・フォルダ(c:\tmpなど)に一連のファイルをいったんコピーし、ここで最終的にインストールするイメージを作成するなどして、ターゲットとなるフォルダにファイルをコピーする。これらの一時ファイルは、インストールの最終工程で削除される。さらに最新のOffice 2000では、あまりに多機能・大容量になってしまったため、アプリケーションの機能を細かく分類し、必要に迫られるまで機能モジュールをインストールしないという「オンデマンド・インストール機能」が組み込まれた。オンデマンド・インストールでは、本来は一度に実施されるはずのインストール作業が、時間を置いて実施されることになる。この間にもファイルの読み書きは繰り返されているので、フラグメントへの影響は小さくない。

 なおここではアプリケーションを例にとったが、実際にはWindows 2000システムのインストール時にも同様のことが起こる。

■ファイルの圧縮・復元
 Windows NT 4.0から、NTFSにファイルの圧縮機能が追加され、特定のファイルやフォルダを単位に、ファイルを圧縮保存することが可能になった。詳しくはここでは述べないが、この圧縮は、ファイルを構成する一連のクラスタを16クラスタごとに圧縮し、圧縮によって不要になったクラスタを空きクラスタとして解放する。つまり、これにより、必然的にかなり激しい空き領域のフラグメントが発生することになる。

 さらに悪いことに、こうしてファイルを一度圧縮してできた空き領域に別のファイルが書き込まれた状態で、圧縮ファイルを復元すると、復元されたクラスタが、物理的に遠く離れたトラックに書き戻される可能性が高い。NTFSでファイルの圧縮機能を使うときには、こうしたオーバーヘッドをきちんと意識して使うか(いったん作成したファイルを、後で圧縮したり、圧縮解除したりしないようにする)、なるべく頻繁にデフラグメントを実施する必要があるだろう。

■Service Packのインストール
 そして誰もが気づきにくく、しかも影響も大きいのがService Packのインストールである。ご存じのとおり、Service Packは、OSのバグフィックスなどを行うパッチ集で、Windows 2000に対しても、最初のService PackとなるSP1(Service Pack 1)が先ごろ(2000年9月8日)発表されたばかりだ(SP1の詳細については別稿の「運用:Windows 2000 Service Pack 1日本語版がついに登場」を参照)。

 SP1の中身を調べてみれば分かることだが、パッチ集といっても、実際にはバグフィックスなどが実施された新しいシステム・モジュールが満載されている。SP1をシステムにインストールすると、これら新しいモジュールが、当初インストールされていた古いモジュールと置き換えられる。このとき、古いモジュールが存在した場所にすっぽりと新しいモジュールが収まってくれればよいだろうが、現実にはそううまくはいかない。このSP1のインストールによるフラグメントの発生状況と、それによるディスク・アクセスの性能低下については、後半で実際に検証してみる。

■ページング・ファイルの拡張
 Windows 2000が仮想メモリ用として使用するページング・ファイルは、領域が不足すると、必要に応じて領域を拡張して対応するようになっている。ページング・ファイルは、通常のファイル同様、物理的に連続している必要はない。このため、領域の確保は容易になったが(初期のWindows 3.xでは、仮想メモリ用のスワップ・ファイルは物理的に連続している必要があった)、代わりに断片化されたページング・ファイルが出来上がる可能性がある。

 通常のファイルとは異なり、仮想メモリ・システムの一部をなすページング・ファイルは、システムの稼働中頻繁にアクセスされる可能性が高く、これが激しくフラグメントしていると、余計なヘッド・シークによるオーバーヘッドが仮想メモリ・システムやシステム全体に大きな影響を及ぼしかねない。

 またページング・ファイルは、システムが稼働中、ずっと開かれた状態になっており、これを削除したり、デフラグメント・ツールでクラスタを移動したりすることはできない。実際問題、Windows 2000に標準で付属するデフラグメント・ツールでは、ページング・ファイル領域をデフラグメントすることはできない。これには、Windows 2000システムの稼働前にデフラグメントを実施するというブートタイム・デフラグ機能を持つDiskeeperが必要だ。

 しかし抜本的にページング・ファイルのフラグメントを抑制するには、システムによるページング・ファイルの自動拡張機能をオフにすればよい。これを行うと、最悪の場合、仮想メモリ不足エラーが発生する恐れもあるが、あらかじめ十分なページング・ファイル領域を確保しておけば、実用上はほとんど問題ないだろう。詳しい手順については別稿の「Windows TIPS:ページ ファイルによるディスクのフラグメントを防止する方法」を参照のこと。


 INDEX
  [検証] ディスク・デフラグメント完全マスター
    1.ディスク・フラグメントの基礎知識(1)
       コラム:NTFSではフラグメントは発生しにくい?
  2.ディスク・フラグメントの基礎知識(2)
    3.Windows 2000標準のデフラグ・ツールを使う(1)
    4.Windows 2000標準のデフラグ・ツールを使う(2)
    5.フル機能版のDiskeeper 5.0を使う(1)
    6.フル機能版のDiskeeper 5.0を使う(2)
    7.検証:フラグメントはシステム・パフォーマンスにどれだけ影響を及ぼすのか?(1)
    8.検証:フラグメントはシステム・パフォーマンスにどれだけ影響を及ぼすのか?(2)
 
 検証


Windows Server Insider フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Windows Server Insider 記事ランキング

本日 月間