仮想ディスクとデフラグ

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程度の分割でまとめてくれたので、これで実用上は大体大丈夫だとは思うが、私のようなパラノイアがこれで納得するはずがない。完璧なデフラグを実現するには、さてどうしたものか。暫く考えて「これだ!」という方法を思いついた。

バックアップツールによるデフラグ

以前、StandbyDiskというバックアップツールを使っていた。ミニタワー型PCにHDDを2台内蔵し、1台をバックアップHDDとして毎日深夜に差分アップデートしていた。このソフトを初めてインストールすると、「差分」ではなくフルバックアップが必要だが、そのフルバックアップされた状態が、全くフラグメントのない状態、完璧なデフラグ状態になっていたことを思い出した。つまり、このソフトは、HDDの内容をコピーする時にセクタとかトラック単位でのイメージコピーをするのではなく、マッサラなファイルシステムにファイルを1つ1つコピーするためにデフラグのない状態でHDDが複製される。(HDD複製ソフトのDriveCopy等はイメージコピーのためフラグメント状態で複製される。)

このソフトを使うためにはPCにHDDが2台繋がっている必要がある。今回、目的のPCはノートPCなので内蔵HDDと全く同じモデルのHDDをUSBで接続して、コピー終了後、HDDを換装しなければならない。しかし、最近のノートPCはネジ数本でHDDの交換が出来るように作られているため、それも大した作業ではない。HDDがもう1台必要なことと、デフラグ後(コピー後)HDDの換装が必要なところはデフラグ・ツールに劣るが、使えないデフラグ・ツールで悩むよりは完璧な方法である。

しかも、この方法であれば仮想ディスクを2BGに分割せずに、18GBの1つのファイルで構成してもフラグメントを起こすことはないだろう。仮想マシンを動作させる理想的な環境を構築できる。ということで、方針を変更! 仮想ディスクが分割せずに1つの巨大ファイルとして生成し、バックアップソフトを利用してデフラグすることにした。

まず、コピー前のHDDのフラグメント状態である。18GBの仮想ディスクが細かくフラグメントされている。(仮想ディスクファイル以外のファイルは前もってほぼデフラグしておいたので、赤い部分はフラグメントされた仮想ディスクである。

これをStandbyDiskを使ってコピーすると次のようになった。

何故か、一部のファイルがフラグメントを起こしている。余計なサービスは殆ど止めてから実行したので、外乱によるフラグメントとは考え難い。原因は分からないが、少なくとも18GBの仮想ディスクはフラグメントの無い状態でコピーされているし、残りの細かいファイルのデフラグであればWindowsにバンドルされているデフラグツールでも処理できるだろう。なお、この状態では、まだ外部HDDとしての扱いなので緑色の「ページファイル」は存在しない。
この状態で"外部HDD"として、数回、Windows標準のデフラグツールを実行すると次のようになる。

そうするとHDDの前方(デフラグツール画面の左側)に空白地帯が現れる。これはNTFSのMFT領域のようだ。これについては後述するが、取りあえずデフラグには関係ないので、約50GBある全てのファイルはほぼ完全でデフラグできた。勿論、18GBもある仮想ディスクもフラグメントされていない。
ここでHDDを交換して、デフラグ済みのHDDを内蔵HDDとして立上げ、念のためにデフラグを掛けると次のようになる。

内蔵HDDとして立ち上げたため緑色のページファイルが割り当てられている。また。何故かMFT領域も青色になっている。(まったくWindowsは挙動がよく分からない。ちなみに、次の画面は、一通り動作確認をした上で不必要になったStandbyDisk(とついでに幾つかのアプリケーション)を削除して再度デフラグをかけた結果。今度はMFT Zoneが"未使用"として現れた。苦笑。)

とにかく、これで、VMwareの仮想ディスクをフラグメントない状態で配置するという目的は達成できた。仮想マシンを立ち上げてみたが、多分気のせいとは思うが、心もち早いような気がする。(車のエンジンを綺麗にする添加剤を使用すると、少しだけ加速が良くなったと感じるのと同じだろうが。)

バックアップツール

今回はStandbyDiskというバックアップツールを流用してデフラグした。しかし、ワザワザ市販のソフトを買わなくてもWindowsのバックアップツールを使って同様のことができる「かも」しれない。StandbyDiskは直接HDDからHDDへバックアップできるのでHDDが2台あえばできるが、Windows標準のバックアップツールを使う場合は一旦 *.bkf ファイルへ落とす必要がある。そのため、もう1台HDDを用意するか、ネットワーク上のサーバのディスクを間借りする必要があるかも知れない。その内、時間があったら試してみよう。

あと、他にもバックアップツールを使ったデフラグの良い点が幾つかある。一つはデフラグに失敗してもオリジナルのHDDがあるのでデータを失うことはない点。もう一つはデフラグの時間が早い点である。50GBのファイル群をコピーするのに私の遅いマシンでも1時間40分で終わった。いい加減なデフラグツールであればもっと速いが、完璧なデフラグは望めない。完璧なデフラグをしようとするとかなりの時間が必要になる。

MFTについて(補足)

バックアップツールを使ってコピーすると「未使用」のMFT領域が現れた。NTFSの場合、全ボリュームの12.5%(8分の1)がMFTとして予約されるらしい。75GBの場合、9.3GBにもなる。上で紹介したContigというソフトを作った会社が開発したDiskViewというソフトで見ると、綺麗にデフラグ(というかバックアップ)されたファイルシステムではMFT Zoneの殆どが未使用になっている。

この画面は、DiskViewを使ってMFT Zoneの先頭部分を拡大したもの。青色の部分は一般のファイル、緑色の部分は(MFTではない)システム領域(さらに他のツール(HDview)で調べたら C:\$LogFile らしい)、黄色のところがMFTファイル(C:\$MFT)、そして薄緑色のところがMFTとして予約された部分(MFT Zone)である。MFT Zoneの内、実際にMFTとして使っている部分(黄色い部分)は約109MBほどしかない。残りの9.2GBはMFTとして予約された未使用領域である。サイズの大きなファイルが多いファイルシステム仮想マシンを使うPC)ではMFTのエントリ数も少ない筈である。20GBのファイルは1MBのファイル2万個分に相当するのだから。未使用部分を最適化、再割り当てして一般ファイルでも使えると良いのだが。

とか思いながら、PCを暫く使っていた。VMware Playerのバージョンが上がっていたので、2.0.2をアンインストールして2.0.4をインストールした。VMnetの設定とかして、その他、ファイルを整理してからデフラグをかけてみたら、次のようになった。

なんとMFT Zoneが消えていた。他のツールを使ってもMFT Zoneは確認できなかったし、以前、MFT Zoneとして予約されていたエリアは一般のファイルで埋め尽くされていた。その代わりにPagefileの左側に未使用の空間が出来てる。丁度、MFT Zoneと同じくらいの大きさだ。しかし、何回デフラグをかけてもここが埋まることはない。ディスクの「空き領域」も以前と同じく約24GBと変わらない。本当に不可思議なファイルシステムだ。

これで一段落と思いきや、「MFTが壊れた」というオマケまで付いて来た。