[運用]

ファイル・サーバのデフラグメントについて考える
―― ツールを活用したファイル・サーバの自動デフラグ ――

1. デフラグの基礎知識

井上 孝司
2008/07/23

 ハードディスクのようにブロック単位でデータを記録するメディアでは、ファイルの断片化(フラグメントの発生)という問題が不可避である。空白の状態にファイルを記録した時点では、そのファイルを構成するデータは連続するブロックにきれいに並んだ形で記録されているが、内容の変更に伴うファイルのサイズの増減や、ファイルの追加や削除によって適正なサイズで連続したブロックを確保できず、飛び飛びに記録された状態にならざるを得なくなる。

 これは利用形態に関係なく共通する問題だが、特にファイル・サーバの場合には、複数のユーザーによって共有され、大量のファイルを扱うことになる分だけ、クライアントPCに比べて断片化が発生しやすい。一般に断片化したファイルを読み書きする際にはハードディスクのヘッド移動が頻繁になり、ディスクの読み書き性能が低下するといわれている。これは、ファイルへのアクセスが頻繁に発生するファイル・サーバで特に大きな問題となる。

ディスク・フラグメントとデフラグメンタ

 断片化の問題そのものは古くから認識されており、その対策を行うデフラグメンタ、あるいはデフラグ・ツールと呼ばれる種類のソフトウェアも数多く存在する。当初はサードパーティ製品しか存在しなかったが、Windows 95からは標準でデフラグメンタが装備されている。

 デフラグメンタの基本的な動作原理は以下のとおり。

  1. ディスクに記録されているファイルの断片化状況を調べる。

  2. 断片化したファイルをディスクの空きスペースにいったん待避して、ファイル全体を記録できるだけの連続したブロックを確保する。

  3. そこに、待避しておいたファイルを書き戻す。

  4. この作業を、すべてのファイルについて繰り返す。

以上で断片化が解消される。

断片化の発生原因とデフラグの仕組み
これは断片化の発生原因とデフラグメンタの動作を図にしたものである。当初のファイルは連続した状態にあるが、ファイルの削除や書き込みなどを繰り返すうちに、ファイルが断片化することになる。デフラグメンタは、断片化したファイル群を空き領域(ディスクの後ろの方)にいったん待避して、連続した空き領域を確保する。十分な空き領域ができたところで、待避しておいたファイルを連続的に配置しながら書き戻しを行い、ファイルを連続した状態に戻す。1つのファイルをデフラグするために、さらにほかの断片化したファイルを移動させる必要に迫られることもあるため、特に、少ない空き領域で効率よくきれいに配置するのはそう簡単ではない(元の位置からあまり離れた場所へ再配置すると、フラグメントは少ないが、アクセスのためのディスク・ヘッドの移動に時間がかかることになり、望ましくない)。しかも、この作業の後でファイルの書き換えが発生してサイズが変化すると、再び断片化が発生する可能性があるため、デフラグは一度だけ行えば済むわけではない。なおWindows 9xなどとは違い、Windows NT系のOSでは、デフラグをサポートするAPIが用意されている(MSDNサイトの「Defragmenting Files」などを参照)。ファイル中の特定のブロックを、指定した(空きブロックの)場所へ移動させるAPIを繰り返し発行することにより、ファイルの内容を少しずつ移動させる。このAPIを利用することにより、システムが稼働中でも安全にデフラグ作業を行える(ただしページ・ファイルなど、特殊な扱いをされているいくつかのファイルは移動できない)。

 さらにデフラグメンタの付加機能として、使用頻度の高いファイルとそうでないファイルとで、デフラグを行う際に配置場所を変えるというのが一般的になっている。例えばWindows XPでは、%SystemRoot%\Prefetch\LAYOUT.INIファイルによく使われるファイルの履歴が記録されており、デフラグメンタはそれを参照して使用頻度が高いファイルについては高速な読み出しを行えるように配置し直すようになっている。こうしたデフラグメントの基礎については、別記事の検証「ディスク・デフラグメント完全マスターを参考にしていただきたい。

Windows標準のデフラグメンタの欠点

 前述のようにWindowsには、標準でデフラグメンタが装備されており、このツールを実行することで、デフラグの解消が可能だ。しかしWindows標準のデフラグメンタは、サードパーティ製品などと比べて、いくつかの点で機能が不足している。

 まずWindows標準のデフラグメンタが、オンライン・デフラグ専用であることだ。オンライン・デフラグとは、OSが稼働しているときにデフラグを行うことを指している。この場合、ファイルが使用中でロックがかかった状態になっているものは、再配置できない点が問題になる。具体例としては、スワップ・ファイル(%SystemDrive%\pagefile.sys)や休止状態ファイル(%SystemDrive%\hiberfil.sys)、イベント・ビューアが使用するログ・ファイルなどが挙げられる。

 次にスケジュール機能を備えていないため、コンピュータを使用していない空き時間にデフラグを実行するという使い方も難しい。実はWindows XP以降なら、コマンドライン・ツールの「defrag.exe」が提供されており、これとタスク・スクジュール機能を組み合わせることでデフラグのスケジュール実行が可能だ(デフラグのスケジュール実行については、TIPS「ディスク・デフラグをスケジュール実行する(Windows XP編)」を参照のこと)。とはいえ、コマンドで指示しなければならないことからややハードルが高く、タスク・スケジューラ機能を利用することからスケジュールの柔軟性もあまりない。

 さらに、ディスクの空き容量が15%を切るとデフラグの効率が落ちてしまうという問題もある。前述したように、デフラグを行うためにはファイルをいったん待避するため、ディスクに空き領域が必要になるが、空き領域が少なくなると待避操作が難しくなり、結果としてデフラグの効率にも響くというわけだ。

 こうしたWindows標準のデフラグメンタが備える欠点は、デフラグの必要性が高いファイル・サーバでは、より大きく影響すると考えられる。ここに、高機能なサードパーティ製デフラグメンタが登場する余地がある。

 サードパーティ製品では、オフライン・デフラグと呼ばれる機能をサポートしており、OSが完全に稼働する前にデフラグ操作が可能となっている。OSが稼働していなければ、システム・ファイルにロックはかからないから、より完全な断片化解消が可能になる。

 また柔軟なスケジュール実行をサポートしていたり、ディスクの空き容量が少なくても、デフラグが実行可能になっていたり、後述のようにボリューム・シャドウ・コピー機能に対する配慮が行われていたりする。


 INDEX
  [運用]ファイル・サーバのデフラグメントについて考える
  ツールを活用したファイル・サーバの自動デフラグ
  1.デフラグの基礎知識
    2.サーバ向けデフラグメンタの選択ポイントとは
    3.PerfectDiskによるデフラグの実践(1)
    4.PerfectDiskによるデフラグの実践(2)

 運用


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

注目のテーマ

Windows Server Insider 記事ランキング

本日 月間