VHD/VHDXのサイズを縮小するための事前準備は面倒?──その行為、無駄です!その知識、ホントに正しい? Windowsにまつわる都市伝説(67)(2/2 ページ)

» 2016年09月26日 05時00分 公開
[山市良テクニカルライター]
前のページへ 1|2       

正解は「読み取り専用でマウントした状態で最適化」

 VHD/VHDXファイルを可能な限り小さくしたければ、次の手順で操作します。

(1)仮想マシンをオフにします。

(2)「ディスクの管理ツール」などを使用して、仮想マシンのVHD/VHDXファイルを「読み取り専用」でHyper-Vホストにローカルマウントします。

(3)「Hyper-Vマネージャー」から「仮想ハードディスクの編集ウィザード」を開始し、読み取り専用でマウント中のVHD/VHDXファイルのパスを指定して、「最適化」を実行します。または、次に説明する「Optimize-VHD」コマンドレットを実行します(画面4)。

画面4 画面4 最適化対象のVHD/VHDXを読み取り専用でマウントした状態で最適化を実行する

 なお、Windows Server 2016 Technical Preview 5では、読み取り専用でマウントされたVHD/VHDXを「仮想ハードディスクの編集ウィザード」で最適化することはできません。これはプレビュー版の不具合なのかもしれませんが、Windows 10 バージョン1607の編集ウィザードでは読み取り専用でマウントされた仮想HDDを最適化できました。

 Windows PowerShellであれば、次のように3行のコマンドラインで素早く実行できます。なお、「Optimize-VHD」コマンドレットを利用するには、コンピュータに「Hyper-Vの役割」がインストールされている必要があります。

Mount-VHD "VHD/VHDXファイルのパス" -NoDriveLetter -Readonly
Optimize-VHD "VHD/VHDXファイルのパス" -Mode QuickまたはFull
Dismount-VHD "VHD/VHDXファイルのパス"

 読み取り専用でマウントした状態で最適化を実行することに違和感を覚える人も多いでしょう。実は、筆者もその一人です。

 Optimize-VHDコマンドレットの既定は、「Quickモード」での最適化です。以下のサイトで公開されているOptimize-VHDコマンドレットの説明を見ると、QuickモードおよびFullモードは、「仮想ハードディスクが読み取り専用でマウントされている場合にのみ利用可能(Allowable only if the virtual hard disk is mounted read-only.)」とあります。つまり、これが正しい操作手順なのです。

  • Optimize-VHD(マイクロソフト TechNetライブラリ)

「読み取り専用でマウント」効果と事前作業の無駄を実証

 読み取り専用でマウントして最適化を実行した場合の縮小効果と、デフラグやゼロクリアが無駄な作業であることを示すために、比較実験を行いました。

 Windows 7がインストールされているVHDを準備します。最適化前のVHDのサイズは8.83GBです。このVHDをローカルマウントし、OSボリュームをクイックフォーマットしてから、マウントを解除しました(画面5)。

画面5 画面5 Windows 7のVHDをローカルマウントし、OSボリューム(この例では「I:」)をクイックフォーマットしてから、マウントを解除

 OSボリュームのフォーマットにより、VHDの中にあったほとんどのファイルが削除されたわけですが、この時点でVHDのサイズは8.84GBです。この8.84GBのVHDのコピーを4つ作成し、次の4つのパターンで幾つかの最適化オプションを実行し、最適化後のファイルサイズ、最適化や事前準備作業の所要時間を比較してみました(画面6)。

  • パターン1:事前の準備作業なし、オフラインのVHD
  • パターン2:事前の準備作業なし、読み取り専用でマウントしたVHD
  • パターン3:事前にデフラグを実行した、オフラインのVHD
  • パターン4:事前にゼロクリアを実行した、オフラインのVHD
画面6 画面6 読み取り専用でマウントしたVHDの最適化だけが、実使用サイズに限りなく近いファイルサイズに縮小できた(win7disk2.vhdの140MB)

 実験結果をまとめたものを表1に示します。読み取り専用でVHDをマウントし、Optimize-VHDコマンドレットのQuickモードで実行するのが、最も短時間で縮小効果がありました。オフラインのVHDに対する最適化は、事前準備作業のあるなしに関係なく、最適化前とほとんどサイズは変わりませんでした。

表1 表1 実験結果

 Optimize-VHDコマンドレットの「Prezeroedモード」は読み取り専用でのマウントを必要としないオプションで、最適化前にゼロクリアしてくれるものです。実行結果はsdeleteツールでゼロクリアしたものと同じですが、Prezeroedモードの方が短時間で完了するという利点があります。ただし、今回の実験では、サイズの縮小効果はどちらも全くありませんでした。

 なお、今回の実験はVHDのOSボリュームのクイックフォーマット後の最適化を検証したものです。通常のファイルの追加/削除で肥大化したVHD/VHDXの最適化では、全く違った結果になるかもしれません。ですが、読み取り専用でVHDをマウントした状態で最適化するのが最も早く、効果が高いのには違いはないでしょう。

筆者紹介

山市 良(やまいち りょう)

岩手県花巻市在住。Microsoft MVP:Cloud and Datacenter Management(Oct 2008 - Sep 2016)。SIer、IT出版社、中堅企業のシステム管理者を経て、フリーのテクニカルライターに。マイクロソフト製品、テクノロジーを中心に、IT雑誌、Webサイトへの記事の寄稿、ドキュメント作成、事例取材などを手掛ける。個人ブログは『山市良のえぬなんとかわーるど』。


前のページへ 1|2       

Copyright © ITmedia, Inc. All Rights Reserved.

スポンサーからのお知らせPR

注目のテーマ

Microsoft & Windows最前線2025
AI for エンジニアリング
ローコード/ノーコード セントラル by @IT - ITエンジニアがビジネスの中心で活躍する組織へ
Cloud Native Central by @IT - スケーラブルな能力を組織に
システム開発ノウハウ 【発注ナビ】PR
あなたにおすすめの記事PR

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。