仮想ディスクとデフラグ

2GBオプションの意味

VMwareで仮想ディスクを作成するとき仮想ディスクを2GB毎に分割するか、というオプションがある。VMware Server 1.xではこのオプションがデフォルトで有効となっている。「何でこんなオプションがあるのだろう」と思っていた。ファイル数が増えて余り気持ちも良くないので私はず〜っと使っていなかった。

ところが、Linux環境のVMware Server作成した仮想マシン(ゲスト:Windows XP)をWindows XP上のVMware Playerで動かそうと思って、このオプションの意味が分かった。(きっとマニュアルには書いてあるのだろうが、私はマニュアルを読まないタイプなので。)

ホスト、ゲストともにファイルシステムとしてNTFSを使っているが、NTFSフラグメンテーション(fragmentation)が多発している状態では性能が落ちることは有名である。フラグメントがない状態、つまりできる限りファイルをシーケンシャルに読める状態でないと性能が落ちる。そのためWindowsにはデフラグツールが標準でついてくる。ホストのファイルシステムが汚く、仮想ディスクが細かくフラグメントされ、更にその中に書かれているゲストのファイルもフラグメントを起こしていたら、かなり性能が落ちるだろうと強く予想できる。(実測検証はしていないが。)

そのため、Windowsホストで仮想マシンを動かす場合は、仮想ディスクのファイルはデフラグメントされている状態(フラグメントの無い状態)であることが理想的、というか必須だろう。そこで仮想ディスクをデフラグするわけだが、仮想ディスクファイルが20GBとか40GBとか大きいと実質的にデフラグは困難である。ホストOSがインストールしたての状態であれば、まだ20GBとかシーケンシャルに領域をとることが可能かと思うが、1年以上使っていてば、どんなにコマメにデフラグしても、デフラグツールでは目に見えない細かいファイルで点在し、しかもシステムファイルだったりすると動かすことはできないから、クリアな大きな領域を割り当てることはできない。

そこで、仮想ディスクを細かく、といってもある程度の大きさで分割して、クリアな領域を割当やすくしたり、デフラグができる大きさにしておく必要ある。2GBでの分割はどうもその目的もあるオプションかも知れない。(しかしながら、後で分かったが、デフラグツールによっては2GBの大きさではデフラグの対象から外してしまうものもある。)

デフラグツールについて

ゲスト上で特殊なソフトを使わなければ、ゲストOSの環境ではWindowsに付属するデフラグメントツールでも十分だろう。問題はホストの方のデフラグである。Windowsに付属するデフラグツールはあまり"一生懸命"に働いてくれない((余談だが、XPより2Kのデフラグツールの方が一生懸命に働いてくれるような気がする。))。まず、全てのファイルがフラグメントの無い状態になってもディスクのあちこちに一塊の未使用領域が残って、一つにまとめてくれない。また一見"一塊の未使用領域"に見える部分(白い部分)も別のツールを使って調べると小さなファイルが点在し、場合によってはシステムファイルも存在している。標準のデフラグツールでは一見綺麗に見えても、実はそれ程綺麗ではなく、2GBのファイルでもデフラグ無しにコピーしてくることは難しい。

そこで、他のデフラグツールを探してみた。「最強のデフラグ」で検索すると色々なページで紹介されている。市販品からフリーのツールまで、コメントを読む限りは「最強」と思えるものがあったので試してみた。

JkDefrag

先ずはJkDefrag。これはフリーのデフラグツールだが定評があるようだ。GPLに基づいてソースコードも公開されている。ネットでは「速い」というコメントが多かった。フリーソフトなのでちょっと躊躇もあり「仮想マシン上で試用」してみた。6GB程度の仮想ディスクで4GB程が使用済み(殆どWindows関連のファイル)の状態でデフラグしてみた。確かに速い。あっと言う間に綺麗になった。色々なオプションがあるので試してみみたが、一度全てのファイルを上方(物理的にはHDDの内側方向)へ移動させ、下側(物理的にはHDDの外周方向)を空にしてから、名前順ソート(若しくは最適化)で下方に持ってくるのが良いみたいだ。

早速、本番のマシン(ノートPCで80GBのHDD、約50GBが使用済みで、その内20GBがVMwareの仮想ディスク)で試してみた。JkDefragはサイズの大きなファイルから移動を始める。最初は非常に良い感じだったのだが、1クラスタ以下(4KB以下)のファイルを移動し始めると挙動不審に。4KB以下のファイルなのに1つのファイルを移動するのに30秒とか1分かかる。ファイルの移動先を一生懸命計算でもしているのだろうか?「高速」という評判は何処へ? 99.25%までファイルの移動が終わって、あと、0.75%を残すだけだが、4KB以下のファイルはまだまだ星の様に散りばめられている。全てのファイルを移動するのに「日」単位になってしまいそうだ。そこで断念した。

Diskeeper 2008

次にDiskeeper 2008 Professionalの試用版をダウンロードしてみた。市販品で日本語化もされているので「仮想マシンで試用」することなく、行き成り本番のマシンで使う。DiskeeperはWindowsにバンドルされているデフラグツールの商用版ということだ。ところが2GB程度の大きなファイルはデフラグしてくれない。20GB以上の空き領域があるのだから、ちょっと頑張れば2GB程度のファイルはデフラグできそうなものだが、やってくれない。さすがは一生懸命に働いてくれないWindowsにバンドルされているデフラグの兄弟分である。そこでDiskeeperは諦めた。(「大きなファイルはデフラグの効果が少ない」という趣旨の説明があったが、音楽ファイルや動画ファイルであればシーケンシャル・アクセスなので、まぁ、そう思えるが、ファイルシステムの中にファイルシステムを格納する場合はランダム・アクセス性が高くなるので別だと思う。)

PerfectDisk

今度はPerfectDisk Rx Suite 体験版を試す。Wikipediaに「Diskeeperと人気を2分するソフトウェアである」と書いてあったので試してみた。 これも行き成り本番マシンで使ってみた。ディスク全体を対象とする通常の使い方ではDiskeeperと同様、2GBのファイルは手付かずだった。しかし、PerfectDiskには特定のファイルを指定してデフラグする機能があるので、これを使ってみた。そしたら、なんと!、元々2つにしか分割されていない2GBのファイルを20分割にしてくれた。これではデフラグツールではなく、フラグメントツールである。しかも「ファイルを1つにまとめたので高速にアクセスできるようになりました」いった大嘘のメッセージまで表示している。このツールは絶対お金を出しては買わないぞ!と思い、諦めた。

Power Defragmenter

マイクロソフトに買収された会社の作ったContigというデフラグエンジンがある。これにGUIをつけたPower Defragmenterというフリーのソフトである。これも特定のファイルだけをデフラグする機能がある。早速つかってみたが、PerfectDiskよりはまともである。4つに分割された2GBファイルを2分割までにまとめるところまでやってくれた。基本的にn分割されたファイルを2つずつ結合してn/2分割までしてくれた。ただ、惜しいことに完全デフラグまではやってもらえなかった。

Power Defragmenterが2GBファイルを概ね2〜4程度の分割でまとめてくれたので、これで実用上は大体大丈夫だとは思うが、私のようなパラノイアがこれで納得するはずがない。完璧なデフラグを実現するには、さてどうしたものか。暫く考えて「これだ!」という方法を思いついた。