Hyper-V Server 2012 R2環境での仮想マシンクローンの作成手順

Hyper-V Server 2012 R2はWindows Server 2012 R2付属のHyper-Vサーバ機能に特化した無償の仮想化ソフトウェアです。

Hyper-V環境の仮想マシンを新規に作成すると既存の仮想マシンと同じ設定をした積りでも実際にはSCSIコントローラ等各種デバイスのHardwareIDがランダムに割り当てられます。
しかし同じハードウェア構成の仮想マシンを複数用意して動作検証したいケースもあるかと思います。
そこでHyper-V Server 2012 R2環境での仮想マシンクローンの作成手順について以下に紹介致します。
方法は至って簡単でコピータイプのインポートを使って仮想マシンクローンを作成することでコピー元仮想マシンと同時に実行可能にするというものです。

今回使用したPCのハードウェア/ソフトウェア構成は以下の通りです。



■ コピー元仮想マシン(MasterVM1)の作成
仮想マシンクローンを作成するに当たってはコピー元仮想マシンの作成手順について特別な制約はありませんので既存の仮想マシンをいきなりエクスポートしても構いません。
しかしここでは仮想マシンクローンを作成することを前提にコピー元仮想マシンの定義・作成についても触れておきます。
  1. 事前のフォルダ作成
    コピー元仮想マシンと仮想マシンクローンを集中管理しやすいようにするために事前に以下のフォルダを作成しておくものとします(ドライブはCドライブ以外でもOK)。
    ・C:\hvclone
    ・C:\hvclone\MasterVM1(元になる仮想マシン名)
    ・C:\hvclone\MasterVM1(元になる仮想マシン名)\01master
    ・C:\hvclone\MasterVM1(元になる仮想マシン名)\02clone

  2. コピー元仮想マシンの定義
    コピー元仮想マシンの新規作成ウィザードでの指定は以下の通りとします。
    (1)仮想マシンの名前:MasterVM1
    (2)世代:第1世代(第2世代でも構いません)
    (3)起動メモリ:1024MB
    (4)接続する仮想スイッチ:仮想スイッチ1
    (5)新規作成する仮想ハードディスク
    ・名前:MasterVM1.vhdx
    ・場所:C:\hvclone\MasterVM1\01master\
    ・サイズ:127GB(デフォルトサイズ)
    (6)[後でオペレーティングシステムをインストールする]:on
    (7)要約



    <完了ボタン>をクリックすると仮想マシンが作成されます。


  3. MasterVM1の「設定」確認
    MasterVM1の「設定」画面を開いて下記を確認します。
    (1)ネットワークアダプタの[高度な機能]でMACアドレス設定を確認します。
    [動的]:on
    MACアドレス:00-00-00-00-00-00



  4. カスタマイズ(今回はスキップ)
    通常ならこの時点でゲストOSの特性・用途等に応じて仮想マシン構成についての各種のカスタマイズ設定を実施するかと思いますが今回はカスタマイズはしないという前提で説明を進めます。

  5. 構成ファイルの確認
    仮想マシンを定義すると仮想マシン識別子(VMId)が割り振られます。
    構成ファイルの格納場所はデフォルトではC:\ProgramData\Microsoft\Windows\Hyper-V\Virtual Machinesで、構成ファイル名はVMId.xml(例:6CD1FA6B-CD8D-4A2F-A60C-1E85E16C6D43.xml)となります。
    構成ファイルをメモ帳で確認すると仮想マシンの新規作成ウィザードで指定した以外の構成情報が多々含まれていることが確認できます。
    尚、構成ファイル内ではVMIdは下記のようにglobal_idというタグで扱われています。
    <global_id type="string">6CD1FA6B-CD8D-4A2F-A60C-1E85E16C6D43</global_id>

  6. MasterVM1の初回ダミー起動によるMACアドレス割り当て確認
    ゲストOSをインストールせずにMasterVM1を最初にダミー起動(初回ダミー起動)すると当然起動エラーとなりますが、この初回起動でMACアドレスが割り振られます。
    ネットワークアダプタの[高度な機能]でMACアドレス設定を確認できます。
    [動的]:on
    例:MACアドレス:00-15-5D-00-7B-77



    ゲストOSのLinux Live版のDVDイメージで仮想マシンを起動してMACアドレスを実際に確認してみました(00:15:5D:00:7B:77表示になっています)。



    MACアドレス確認後は仮想マシンをシャットダウンして停止させます。

  7. ゲストOSのインストール
    ここでMasterVM1にゲストOSをインストールします。
    ゲストOSとしてWindows PowerShellを使用できるWindows 8.1等のWindowsをインストールした場合はデバイス情報を下記のコマンドレットで取得して保存して後で見直してみるのもいいかと思います。
    デバイスマネジャでの確認が困難なデバイス情報も下記のコマンドレットでは確認しやすい形式で表示されます。
    Get-WmiObject Win32_PNPEntity


■ MasterVM1のエクスポート実行

  1. MasterVM1のエクスポート
    (1)Hyper-VマネジャでMasterVM1に対する[エクスポート]を起動します。
    (2)仮想マシンのエクスポートファイルの保存先フォルダとして以下のフォルダを指定します。
    C:\hvclone\MasterVM1\01master\export



    (3)<エクスポート>ボタンをクリックします。

  2. エクスポート結果確認
    エクスポートを実行するとC:\hvclone\MasterVM1\01master\export直下にMasterVM1以下のフォルダが自動生成されます。
    C:\hvclone\MasterVM1\01master\export\MasterVM1\Snapshots
    C:\hvclone\MasterVM1\01master\export\MasterVM1\Virtual Hard Disks ※仮想ハードディスクMasterVM1.vhdxが保存されます
    C:\hvclone\MasterVM1\01master\export\MasterVM1\Virtual Machines
    ※Virtual Machinesサブフォルダには構成ファイル(6CD1FA6B-CD8D-4A2F-A60C-1E85E16C6D43.XML)が格納されます。


■ エクスポートされたMasterVM1フォルダからのコピータイプのインポート実行

  1. インポート準備
    インポート時の仮想マシンファイルの保存先フォルダとして以下のフォルダを事前に作成しておきます。
    C:\hvclone\MasterVM1\02clone\01Conf ※仮想マシンの構成フォルダ
    C:\hvclone\MasterVM1\02clone\02CheckPS ※チェックポイントストア用フォルダ
    C:\hvclone\MasterVM1\02clone\03SMartPS ※スマートページングフォルダ
    C:\hvclone\MasterVM1\02clone\04Disks ※インポートした仮想ハードディスクの保存フォルダ

  2. MasterVM1の仮想マシン名の一時的変更
    インポートを実行するとHyper-Vマネジャにはインポート元と同名の仮想マシンが追加表示されます。
    但し同名の仮想マシン名であってもVMIdは異なるのでHyper-Vマネジャとしては区別が付くようになっています。
    しかしユーザにとっては仮想マシン名だけでは区別がしにくくなるためインポート前に一旦インポート元の仮想マシン名を変更しておくのがベターです。
    今回は「MasterVM1」を「MasterVM1.01master」に名称変更しておきます。

  3. エクスポートされたMasterVM1フォルダからのコピータイプのインポート実行
    (1)Hyper-VマネジャでHyper-Vホスト(ここではHVS12R2)のメニューから[仮想マシンのインポート]を起動します。



    [仮想マシンのインポート]を起動すると「仮想マシンのインポート」画面が表示されます。

    (2)インポートする仮想マシンを含むフォルダとして以下のフォルダを選択します。
    C:\hvclone\MasterVM1\01master\export\MasterVM1

    (3)[仮想マシンの選択]では「MasterVM1」を選択します(自動選択されています)。
    (4)[インポートの種類の選択]では[仮想マシンをコピーする(新しい一意なIDを作成する)]をonにします。



    [インポートの種類の選択]で[仮想マシンをコピーする(新しい一意なIDを作成する)]をonにして<次へ>ボタンをクリックすると[移動先の選択]画面が表示されます。

    (5)[移動先の選択]では以下の設定・選択をします。
    ・[仮想マシンを別の場所に保存する]:onにします。
    ・仮想マシンの構成フォルダとして以下のフォルダを選択します。
    C:\hvclone\MasterVM1\02clone\01Conf
    ・チェックポイントストアとして以下のフォルダを選択します。
    C:\hvclone\MasterVM1\02clone\02CheckPS
    ・スマートページングフォルダとして以下のフォルダを選択します。
    C:\hvclone\MasterVM1\02clone\03SMartPS

    (6)インポートした仮想ハードディスクの保存場所として以下のフォルダを選択します。
    C:\hvclone\MasterVM1\02clone\04Disks

    (7)要約



    <完了>ボタンをクリックすると仮想マシンがインポートされてHyper-Vマネジャにインポートされた「MasterVM1」が追加表示されます。

  4. 仮想マシン名の変更
    Hyper-Vマネジャに表示されている仮想マシン「MasterVM1」と「MasterVM1.01master」を次のように名称変更します。
    ・「MasterVM1」を「MasterVM1Clone」に名称変更。
    ・「MasterVM1.01master」を「MasterVM1」に名称変更(元の仮想マシン名への戻し)。

  5. インポートされた仮想ハードディスクファイルの名称変更
    インポートされた仮想ハードディスクファイルの名称はインポート元と同じ「MasterVM1.vhdx」となります。
    インポート元での仮想ハードディスクファイルとインポートされた仮想ハードディスクファイルの名称が同じでも格納場所が異なるので区別は付くのですが判別しやすくするためにインポートされた仮想ハードディスクファイルの名称を次のように変更します。
    ・C:\hvclone\MasterVM1\02clone\04Disks中の「MasterVM1.vhdx」を「MasterVM1Clone.vhdx」に名称変更。
    更にMasterVM1Cloneの「設定」画面を開いて仮想ハードディスクのパスをC:\hvclone\MasterVM1\02clone\04Disks\MasterVM1Clone.vhdxに変更します。

  6. コピータイプのインポート実行後の確認
    (1)今回のコピータイプのインポート実行で新しい仮想マシンに割り振られた新しい一意なID(VMId)は「3A89BB70-C9BF-44FA-BCDE-6A91635E370D」となりました。
    その構成ファイルのパスは下記の通りです。
    C:\hvclone\MasterVM1\02clone\01Conf\Virtual Machines\3A89BB70-C9BF-44FA-BCDE-6A91635E370D.xml

    (2)ゲストOSがWindowsの場合のMasterVM1Cloneを最初に起動した際、「デバイスを準備しています」、「準備しています」という表示は出ませんでした。
    これはMasterVM1が動作していたマシン構成とMasterVMCloneが動作しているマシン構成にWindowsが重要な違いと認識する程の違いがないということを意味しています。
    MasterVMCloneを起動後に下記のコマンドレットでデバイス情報を取得してみました。
    Get-WmiObject Win32_PNPEntity

    MasterVM1での「Get-WmiObject Win32_PNPEntity」出力結果とMasterVM1Cloneでの「Get-WmiObject Win32_PNPEntity」出力結果での相違点は「Microsoft Hyper-V SCSI コントローラー」のDeviceID, HardwareID , PNPDeviceIDの値だけでした。
    他のデバイス(例えばMicrosoft Hyper-V ネットワーク アダプター等)についてはDeviceID, HardwareID , PNPDeviceIDの値はそのまま引き継がれていました。

    (3)Microsoft Hyper-V ネットワーク アダプターのMACアドレスについて
    MasterVM1のMACアドレスは00-15-5D-00-7B-77でしたが、MasterVM1CloneのMACアドレスはMasterVM1のMACアドレスを1upさせた00-15-5D-00-7B-78となりました。
    ・MasterVM1と同時起動したMasterVM1CloneでのLinux Live版によるMACアドレス確認



    ・MasterVM1とMasterVM1Cloneの同時起動時のPowerShellによるVMId等の確認の様子



  7. MasterVM1Cloneと新たな仮想マシン定義との比較
    (1)MasterVM1及びMasterVM1Cloneとは別にMasterVM1の新規作成ウィザードで設定した内容と同等指定のMasterVM2を定義してみました。
    ・要約



    (2)MasterVM1の仮想ハードディスク(MasterVM1.vhd)をMasterVM2.vhdという名称のファイルにリネームコピーしてMasterVM2にMasterVM2.vhdを割り当てて起動してみました。
    ゲストOSがWindowsの場合にMasterVM2を最初に起動する際、「デバイスを準備しています」、「準備しています」という表示が出ます。
    これはMasterVM1が動作していたマシン構成とMasterVM2が動作しているマシン構成に大きな違いがあるということを意味しています。
    MasterVM2を起動後に下記のコマンドレットでデバイス情報を取得してみました。
    Get-WmiObject Win32_PNPEntity

    MasterVM1での「Get-WmiObject Win32_PNPEntity」出力結果とMasterVM2での「Get-WmiObject Win32_PNPEntity」出力結果での相違点は数多くありました。



■ 仮想マシンクローンを別のHyper-Vホストで実行させる手順

  1. 仮想マシンクローンのエクスポート
    (1)Hyper-VマネジャでMasterVM1Cloneに対する[エクスポート]を起動します。
    (2)仮想マシンのエクスポートファイルの保存先フォルダとして以下のフォルダを指定します。
    C:\hvclone\MasterVM1Clone\01master\export

    (3)<エクスポート>ボタンをクリックします。
    (4)エクスポートを実行するとC:\hvclone\MasterVM1Clone\01master\export直下にMasterVM1Cloneフォルダが自動生成されます。
    (5)C:\hvclone\MasterVM1Clone\01master\export\MasterVM1Cloneフォルダを別のHyper-Vホストから参照可能領域に転送します。

  2. 別のHyper-Vホストでのインプレースタイプのインポート実行
    (1)別のHyper-VホストでのHyper-Vマネジャのメニューから[仮想マシンのインポート]を起動します。
    [仮想マシンのインポート]を起動すると「仮想マシンのインポート」画面が表示されます。
    (2)インポートする仮想マシンを含むフォルダとして元のHyper-Vホストから転送された当該Hyper-Vホスト側から参照可能なMasterVM1Cloneフォルダを選択します。
    (3)[仮想マシンの選択]では「MasterVM1Clone」を選択します(自動選択されています)。
    (4)[インポートの種類の選択]では[仮想マシンをインプレースで登録する(既存の一意なIDを使用する)]をonにします。
    (5)仮想スイッチ名が元のHypey-Vホストでの仮想スイッチ名と異なっている場合はインポートする側の仮想スイッチを選択し直します。
    (6)要約表示の画面で<完了>ボタンをクリックすると仮想マシンがインポートされてHyper-Vマネジャにインポートされた「MasterVM1Clone」が追加表示されます。
    (7)MasterVM1Cloneを起動します。