2012/01/10

COMPUTERWORLD Blog アップ: 容量可変 VHD の物理ディスク上での断片化解消について

COMPUTERWORLD Blog に 99 回目の投稿をアップしました。容量可変 VHD の物理ディスク上での断片化 (フラグメンテーション) 状態を、Windows 7 や Windows Server 2008 R2 のデフラグ ツール (Defrag.exe) では完全に解消できないという話。Windows Sysinternals の Contig で解消できます。

COMPUTERWORLD Blog > 年初の整理整頓術: 容量可変 VHD の物理的な断片化状態を徹底解消 (2010年01月10日)


(古い記事の復活。テキストはあったけど画面はありません)
 
Windows 7やWindows Server 2008 R2では物理ディスクの最適化しても、仮想ハードディスクの断片化状態はおそらく解消されないでしょう。Windows VistaおよびWindows Server 2008以降、Windows標準のディスクの最適化ツールは、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の断片に分かれているのがわかります。

01.png

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

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

02.png

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

03.png

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

04.png

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

05.png

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

06.png

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

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

07.png

ちなみに、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

0 件のコメント: