Hyper-V スナップショットの統合方法:ステップバイステップガイド
ゲスト仮想マシン(VM)の1つにOSの更新プログラムやセキュリティパッチをインストールする必要がある場合があります。しかし、更新プロセスで問題が発生し、システム障害、設定データの消失、あるいは特定のプログラムがアンインストールされてしまうことがあります。 Microsoft Hyper-V では、Hyper-V スナップショットを作成する機能が提供されています。これにより、特定の時点での VM の状態を保存し、システムエラーが発生した場合にシステムを以前の状態にロールバックすることができます。
このブログ記事では、Hyper-V スナップショットをマージする方法について説明します。 Hyper-V マネージャー やPowerShell、そしてそれらの活用方法についてです。しかし、Hyper-Vのスナップショットを管理する方法を学ぶには、まずその背後にある技術を理解する必要があります。
Hyper-Vのスナップショットとは何ですか?
Hyper-V スナップショットとは、仮想マシン(VM)の特定の時点におけるコピーであり、データを復元するために必要なすべての情報が含まれています。Hyper-V スナップショットを使用することで、VM の状態がキャプチャされ、スナップショットが作成された時点に VM を戻すことができます。Hyper-V スナップショット機能は、コンピュータに Hyper-V ロールがインストールされ、最初の VM が作成されると、デフォルトで有効になります。 選択した仮想マシンの Hyper-V スナップショットは、どのような状態でも作成できます(オフ, ランニング, 一時停止中、および 保存済み) 通常、この操作は数秒で完了します。
なお、Hyper-Vのスナップショットは現在"Hyper-Vチェックポイント"と呼ばれていますが、どちらの用語も同様に有効です。
Hyper-V スナップショットの種類
Microsoft Hyper-V では、2 種類のスナップショットが提供されています:
Production snapshotsゲストOS内のバックアップ技術を活用して、VMのデータ整合性が保たれたスナップショットを作成します。この目的のために、Windowsのボリューム シャドウ コピー サービス(VSS)またはLinuxのファイルシステムフリーズが使用されます。Hyper-Vのプロダクションスナップショットは、アプリケーションやゲストOSのデータ整合性を向上させるため、本番環境の状態をキャプチャするために利用できます。なお、Hyper-Vのプロダクションスナップショットでは、VMのメモリ状態、CPUの動作状況、およびハードウェア構成に関する情報はキャプチャされません。
新しい OS バージョン(Windows Server 2016 および Windows 10)では、チェックポイントの種類として"本番用チェックポイント"がデフォルトで設定されています。ただし、Hyper-V マネージャーまたは Windows PowerShell でこれを変更することができます。
Standard snapshots特定の時点におけるVMの状態(CPUの動作状況やメモリ、ハードウェア構成など)をキャプチャします。したがって、標準のHyper-Vスナップショットを使用することで、アプリケーションの現在の状態をキャプチャし、VMを特定の時点の状態や状況にロールバックすることが可能です。これらは主に開発やテストのシナリオで活用されます。 Hyper-Vの標準スナップショットの作成は、VSSに対応していないアプリケーションにおいてデータの不整合を引き起こす可能性があるため、信頼性の高いバックアップ戦略とは見なすことはできません。
Hyper-Vのスナップショットの仕組み
ご存知のように、Hyper-V 仮想マシンは、.vhd(x) ファイル形式の仮想ディスクに保存されます。また、これらの Hyper-V 仮想マシン上で作成されたスナップショットファイルは、.avhd(x) ファイル形式で保存され、ハードディスクイメージファイルと同じフォルダーに格納されます。 Hyper-Vのスナップショットは基本的に差分仮想ディスクであり、それぞれが対応する親仮想ハードディスクと親子関係にあります。各VMにつき最大50個のスナップショットを作成できます。すべてのHyper-Vスナップショットは階層構造で整理されており、チェックポイントのサブツリーを構成しています。

しかし、問題となるのは、.avhd(x) ファイルが蓄積されやすく、ディスク容量を大量に消費してしまうことで、その結果、仮想マシンのパフォーマンスに影響を及ぼすことです。不要な .avhd(x) ファイルを削除したい場合は、Hyper-V スナップショットを削除する必要があります。この操作は、スナップショットそのものを実際に削除することを意味するものではありません。 その代わりに、Hyper-Vスナップショットとそこに含まれるデータを、親ディスクまたは別の仮想ディスクにマージするだけです。コンピュータからHyper-Vスナップショットを直接削除することは推奨されません。Hyper-Vスナップショットをマージすると、ディスクからすべての.avhd(x)ファイルが削除されます。これにより、Hyper-Vホスト上に追加の空き領域を確保できます。
Hyper-Vのスナップショットを結合する方法
以前のブログ記事の一つで、私たちは……について解説しました Hyper-Vのスナップショットを管理する (作成、適用、名前変更、有効化/無効化など)。しかし、本日のブログ記事では、Hyper-V スナップショットを手動でマージする方法について解説します。
Hyper-V スナップショットをマージするには、Hyper-V マネージャーまたは PowerShell を使用する必要があります。これら両方の方法について、以下で説明します。
Hyper-V マネージャーの使用
Hyper-Vのスナップショットをマージする方法について説明する前に、まずどのスナップショットをマージするかを決定する必要があります。Hyper-Vのスナップショットは、子から親へと進む特定の順序でマージする必要があります。そのため、作成順(新しいものから古いものへ)を明確にし、チェックポイントツリーの構造を確立することが重要です。
上述の通り、各スナップショットは、それ以前に作成された別のスナップショットと親子関係にあります。 これらすべてを組み合わせると、チェーンの形で表すことができます。例えば、1つの仮想ハードディスクに対して3つのスナップショットが作成されたとします。VMが実行されているメインの仮想ディスクは最初のチェックポイントの親となり、このチェックポイントは2番目のチェックポイントの親となり、2番目のチェックポイントは3番目のチェックポイントの親となります。
チェックポイントの構造を確立するには、次の手順を実行します:
- Hyper-V マネージャーを開きます。
- 中央のペインで、スナップショットを統合したいVMを選択します。
- 右側の"アクション"セクションで、[ ] をクリックします
Inspect Disk.
- .avhd(x) ファイルを選択し、クリックしてください
OK.
- 次に、仮想ハードディスクのプロパティの概要(名前、保存場所、親ファイル名など)が表示されます。選択した .avhd(x) ファイルの親ファイルを確認してください。
- 各 .avhd(x) ファイルについて手順 3~5 を繰り返し、マージする順序を特定してください。

その後、Hyper-V スナップショットのマージ処理を開始できます。マージ操作中に問題が発生しないよう、仮想マシンは電源をオフにしておく必要があります。
Hyper-V スナップショットをマージするには、次の手順を実行します。
- Hyper-V マネージャーを開きます。
- 必要なVMを選択してください。
- クリック
Edit Disk."仮想ハードディスクの編集ウィザード"が開きます.クリックNext. - クリック
Browse最新の .avhdx ファイルを選択するには、[クリック]Next.
- 選択
Merge差分ディスクに保存された変更を、親ディスクまたは別のディスクにマージするには、[クリック]Next.
- 選択
To the parent virtual hard diskをクリックしてFinish.
- Hyper-V スナップショットのマージ処理を完全に完了するには、すべての変更が元の親ディスクにマージされるまで、各 .avhd(x) ファイルに対して手順 1 ~ 5 を繰り返します。
- 最後のステップは、VMを再起動して、適用した変更を反映させることです。
PowerShell の使用
Hyper-V スナップショットのマージを開始する前に、お使いのコンピューターで Merge-VHD コマンドレットが有効になっていることを確認してください。有効になっていない場合、画面に次のエラーが表示されます:
The term 'Merge-VHD' is not recognized as the name of a cmdlet, function, script file, or operable program.
Check the spelling of the name, or if a path was included, verify that the path is correct and try again.
この問題を解決するには、PowerShell を管理者として開き、次のコマンドを実行してください:
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V-Management-PowerShell
すべてが正しければ、次のような画面が表示されるはずです:

これで、Merge-VHD コマンドレットを実行する準備が整いました。この操作はオフラインで行われる点に注意してください。
Hyper-V スナップショットをマージするには、次のコマンドレットを実行します。
Merge-VHD Path = '' DestinationPath = ''
この場合、最新のものから順に、複数の子ディスクのデータを最も古い親ディスクに統合することができます。画面には、次のように表示されます:

操作が完了したら、ゲストVMをシャットダウンし、システムを再起動してください。ディスクチェーンの各レイヤーを個別にマージする必要があるHyper-V Managerとは異なり、PowerShellでは、このような複雑な操作を1つのコマンドで実行できます。
Hyper-Vのスナップショットを使うべき理由
Hyper-V スナップショットを使用すると、構成の変更を適用する前、新しいソフトウェアをインストールする前、OS の更新を実行する前、セキュリティパッチを適用する前などに、仮想マシンの状態を保存することができます。仮想インフラストラクチャに変更を加える可能性のある操作を実行する場合や、操作が失敗するリスクが高い場合は、事前に仮想マシンの Hyper-V スナップショットを作成してください。これにより、万が一問題が発生してシステムを以前の状態に戻す必要が生じた際に、安全策として機能します。
ただし、Hyper-Vスナップショットは、開発およびテスト環境で使用した場合に最も効果を発揮します。これらは効果的かつ信頼性の高いバックアップの代替手段ではなく、本番環境での使用は推奨されません。代わりに、複数のデータ保護オプションを備え、従来のインフラストラクチャのメンテナンスと比較して、時間、費用、労力を大幅に節約できる、フル機能のHyper-Vバックアップソリューションの利用をご検討ください。