年初の整理整頓術: 容量可変 VHD の物理的な断片化状態を徹底解消|Windows Server|ブログ|Computerworld

header_cwr_head_mid_fl_logo

CW_ウルトラバナー_Topics08

CW_ウルトラバナー_Topics04

CW_ウルトラバナー_Topics02

CW_ウルトラバナー_Topics05

CW_ウルトラバナー_Topics06

CW_ウルトラバナー_Topics07

Windows Server

年初の整理整頓術: 容量可変 VHD の物理的な断片化状態を徹底解消

Posted by 山市良 ( 2012年01月10日 )

1月5日の早朝、ようやく今年初めての日の出を拝むことができました。1月1日は、日の出前に氏神様の元旦祭があり、日の出を拝むことができず、その後は天候や二日酔いの関係で...

さて、今年2回目の、99回目という記念すべき投稿は、昨年末の投稿についての補足(お詫び?)から。昨年末の投稿「ダイエットするつもりが太っちゃう!? (容量可変タイプの仮想ディスクの話)」で、容量可変タイプの仮想ハードディスクの最適化(縮小)の前後に、“物理ディスクの最適化(デフラグ)をすることをお勧めします”というようなことを安易に(固定観念で)言ってしまいましたが、1つ重要なことを忘れていました。

Windows 7やWindows Server 2008 R2では物理ディスクの最適化しても、仮想ハードディスクの断片化状態はおそらく完全には解消されないでしょう。Windows VistaおよびWindows Server 2008以降、Windows標準のディスクの最適化ツールは、64MB以上のフラグメント(断片)を結合しなくなったからです。サイズの大きな仮想ハードディスクは、その断片も 64MB 以上の大きな塊になるはずです。

Windows VistaおよびWindows Server 2008では、コマンドラインの Defrag.exe に -w オプション(完全な最適化を実行します。サイズに関係なく、すべてのファイルの断片を結合します) を指定しないと、64MB以上の断片を結合してくれません。また、Windows 7およびWindows Server 2008 R2の Defrag.exe には、この -w 相当のオプションは提供されなくなりました。つまり、Windows 7およびWindows Server 2008 R2の標準のデフラグ ツールでは、64MB以上の断片を結合する機能が無くなっちゃったんです。

実際に見てみましょう。次のスクリーンショット (Windows 7) の、Eドライブの断片化状態は 0% です。既定でデフラグがスケジュール実行されるため、明示的に最適化を実行しなくても、常に良好な状態が保たれています (ようみ見えます)。Windows Sysinternals の Contig ユーティリティを使用して、Eドライブ上のWindows Virtual PC仮想マシンの仮想ハードディスク (VHD) の断片化状態を調べてみました。Contig は、単一のファイルや特定のディレクトリを再帰的に、あるいはドライブを対象に、断片化状態の分析やデフラグを可能にするユーティリティです。-a オプションで分析してみると、1つのVHDが、25の断片に分かれているのがわかります。

Windows Sysinternals > Contig
[URL] http://technet.microsoft.com/ja-jp/sysinternals/bb897428

Defrag.exe を使用してコマンドラインからEドライブのデフラグを実行 (削除された /W オプションを付けてもみましたが、無視されました) すると、一瞬で終了し、断片化状態はやはり 0% のままです。

Contig を -a オプションなしで実行すると、単一のファイルをデフラグできます。25の断片に分かれた VHD に対して実行すると、断片化なしの状態 (1断片) になりました(計測していませんでしたが、7GBで10分くらいだったと思います)。

Contig -s <ディレクトリ名> を実行すれば、指定したディレクトリ内のファイルを再帰的にデフラグしてくれます。1 ファイルあたり 1.16092 断片の状態が、断片に解消されました。ディスク使用領域 90GB で 1 時間くらいかかったと思います。なお、Contig は Windows 標準のデフラグ API を使用しているそうなので、中断 (Ctrl+Cや PC の再起動などで) されても大丈夫、安心して使用できます。

もっとビジュアル的なインパクトをお望みなら、同じく Windows Sysinternals の DiskView をお勧めします。

Windows Sysinternals > DiskView
[URL] http://technet.microsoft.com/ja-jp/sysinternals/bb896650

次のスクリーンショット (Windows Server 2008 R2) の黄色い部分は、1年以上前に新しい物理ディスクに最初に作成した、Hyper-V 仮想マシン用の 300MB の“容量固定”タイプの VHD が占有しているクラスタを示しています。DiskView の画面に収まり切れてませんが、1 断片で完全に連続しており、すっきりさわやか。

次は、同じ時期に同じ物理ディスク上の作成した“容量可変”タイプの VHD が占有しているクラスタです。DiskViewの表示上は 2 つの断片しか表示されていませんが、15 の断片に分かれて、物理ディスクのいたるところに分散配置されています。

Contig -s E:\VM でデフラグを実行すると、1 ファイルあたり平均 1 断片に。これで、すっきり。1  frags/fileって、整理整頓好きにはたまりません。

ちなみに、Windows 7やWindows Server 2008 R2で64MB以上の断片を結合するオプションが提供されなくなったのは、長時間かけてファイルの配置を移動して、より大きな断片の塊に結合しても、そのコストに見合うだけのパフォーマンス向上が得られない (場合によっては逆効果もある) からということです。詳しくは、以下のブログで説明されていますが、これは通常の物理マシンの話でしょう。仮想マシンのディスクI/Oにとって、断片化が I/O にどのような影響をもたらすのか、詳細な分析あるといいですね。

MSDN Blogs > Engineering Windows 7 > Disk Defragmentation - Background and Engineering the Windows 7 Improvements
[URL] http://blogs.msdn.com/b/e7/archive/2009/01/25/disk-defragmentation-background-and-engineering-the-windows-7-improvements.aspx

ページの先頭へ戻る