SCVMMへHyper-Vでエクスポートしたイメージをインポートする方法

他の環境で作成された仮想マシンのSCVMMへの正しいインポート方法がわかりません。以前も同じことがあったのですがよくわからずに棚上げしてありました。

この問題に度々直面し、そのたびにごまかしてきたのですが、きちんと手順化をしなくてはいけないことになり本腰をいれて調査することに決めました。

現状のステータスは以下の通りで、大きく以下の3パターンがあるように思われます。

  1. Hyper-Vコンソールでインポートする。インポートされ作成された仮想マシンをSCVMMが認識する。
  2. SCVMMのライブラリにファイル群を配置する。SCVMMのライブラリが更新され、保存された仮想マシンとして認識される。新規に仮想マシンを作成する際にそれを選択する。
  3. SCVMMにて新規に 仮想マシンを作成する。作成された仮想マシンのVHD(X)ファイルをエクスポートされたものと差し替える。

1の方法に関しては以下の状況です。

  • うまくいくケースもあれば、インポートして稼働しているにもかかわらずいつまでたってもSCVMMで認識されないケースがある(今取り組んでいるものは認識されない)。そもそも正しい方法なのかどうかよくわからない。
  • 認識されたとしても高可用性の仮想マシンにならない。その後変更する方法も不明。
  • 一度ホストからエージェントをアンインストールし、再インストールすると仮想マシンは認識されるが、仮想マシンのクラウドなどの設定がクリアされてしまうので作りこんだ環境では現実的ではない。
  • 以下のように書かれているので、認識されないケースが異常に思われる。

Frequently Asked Questions: Data Refreshes http://technet.microsoft.com/en-us/library/dd221389.aspx

Frequency: Every 2 minutes on each host.

Data updates:

    • Checks the host status to determine whether the VMM agent is running and the status of the virtualization software on the host.
    • Synchronizes the statuses of virtual machines deployed on the host.
    • Places virtual machines with missing objects in a Missing state.
    • Imports new virtual machines created outside VMM. When the refresher detects a new virtual machine, it imports the virtual machine into VMM and runs the VM Heavy Refresher to add virtual machine properties, resource pools, cluster information, and snapshots to the VMM database.

2の方法に関しては以下の状況です。

  • きちんと認識され、新規作成時に選択可能だが、実際に作成しようとするとジョブが失敗してしまう。
  • 失敗するのが操作方法の問題なのか、環境の問題なのか、エクスポートされたイメージの問題なのか現時点では不明。
  • 以下のURLではこの方法が正しいインポートの方法として提示されている。

3の方法に関しては以下の状況です。

  • うまくいくだろうと思われるが、仮想マシンの設定等がクリアされてしまう(同じように作らなくてはいけない)のでできればやりたくない。
  • NIC周りなど、別のものと認識され、再設定が発生してしまうのはできれば避けたいが、この方法では不可避に思われる。

おそらく方法として1の方法が簡単であり、きっと製品でも想定しているパターンなのだろうと思うのですが、いかんせんHyper-Vマネージャーから見えるし、可動もしているくせにSCVMMに出てこないのです。とはいえ、うまく認識されて出てきたこともあり、それがいったい何を引き金にしているのか、なにによってその認識される、されないの差異が発生しているのかがわかりません。

2分毎に

Imports new virtual machines created outside VMM. When the refresher detects a new virtual machine, it imports the virtual machine into VMM and runs the VM Heavy Refresher to add virtual machine properties, resource pools, cluster information, and snapshots to the VMM database.

をやっているのであれば、出てこない方がおかしいのでしょうが、いかんせん、SCVMMのジョブをより詳細に追いかける方法がわかりません。SCCMみたいに細かいログが出ててくれればまだ当たりのつけようもあるのですが・・・。

一方3の方法はやればできちゃうのはわかっているのですが副作用が大きいので最後の手段にしておこうと思います。

というわけでうまくいくはずなのにうまくいっていない2の方法に関してもうちょっと詳細をおいかけて見たいと思います。

エクスポートした状態

まず、今回は2008R2のHyper-Vからエクスポートしたイメージを対象にします。エクスポートされたものは以下のようになっています。

\ホスト名

\Snapshots(空)

\Virtual Hard Disks

\vmname.vhd

\Virtual Machines

\(GUID).exp

config.xml

この辺りバージョン毎に構成は異なっているようです。このエクスポートファイルの構造の違いによる結果の違いもありそうですが・・・。

今回はスナップショットは空です。また、Virtual Hard Disksも単純に1つのvhdファイルがあるのみです。

Virtual Machinesフォルダ以下にあるGUIDがファイル名になっているexpファイルには仮想マシンの構成が書かれているようです。

<?xml version=”1.0″ encoding=”UTF-16″ standalone=”yes”?>
<DECLARATIONS>
<DECLGROUP>
<VALUE.OBJECT><INSTANCE CLASSNAME=”Msvm_VirtualSystemExportSettingData”><PROPERTY NAME=”Caption” TYPE=”string”><VALUE>仮想システムのエクスポート設定データ</VALUE></PROPERTY><PROPERTY NAME=”CopySnapshotConfiguration” TYPE=”uint8″><VALUE>0</VALUE></PROPERTY><PROPERTY NAME=”CopyVmRuntimeInformation” TYPE=”boolean”><VALUE>TRUE</VALUE></PROPERTY><PROPERTY NAME=”CopyVmStorage” TYPE=”boolean”><VALUE>TRUE</VALUE></PROPERTY><PROPERTY NAME=”CreateVmExportSubdirectory” TYPE=”boolean”><VALUE>TRUE</VALUE></PROPERTY><PROPERTY NAME=”Description” TYPE=”string”><VALUE>Microsoft 仮想システムのエクスポート設定データ</VALUE></PROPERTY><PROPERTY NAME=”ElementName” TYPE=”string”><VALUE>Microsoft 仮想システムのエクスポート設定データ</VALUE></PROPERTY><PROPERTY NAME=”InstanceID” TYPE=”string”><VALUE>Microsoft:E5F6F01F-5503-432C-9B0B-6596FBF7E684</VALUE></PROPERTY><PROPERTY NAME=”SnapshotVirtualSystem” TYPE=”string”></PROPERTY></INSTANCE>
</VALUE.OBJECT>
<VALUE.OBJECT><INSTANCE CLASSNAME=”Msvm_VirtualSystemGlobalSettingData”><PROPERTY NAME=”AdditionalRecoveryInformation” TYPE=”string”></PROPERTY><PROPERTY NAME=”AllowFullSCSICommandSet” TYPE=”boolean”><VALUE>FALSE</VALUE></PROPERTY><PROPERTY NAME=”AutoActivate” PROPAGATED=”true” TYPE=”boolean”></PROPERTY><PROPERTY NAME=”AutomaticRecoveryAction” TYPE=”uint16″><VALUE>1</VALUE></PROPERTY><PROPERTY NAME=”AutomaticShutdownAction” TYPE=”uint16″><VALUE>1</VALUE></PROPERTY><PROPERTY NAME=”AutomaticStartupAction” TYPE=”uint16″><VALUE>1</VALUE></PROPERTY><PROPERTY NAME=”AutomaticStartupActionDelay” TYPE=”datetime”><VALUE>00000000000000.000000:000</VALUE></PROPERTY><PROPERTY NAME=”Caption” TYPE=”string”><VALUE>グローバル仮想マシン設定</VALUE></PROPERTY><PROPERTY NAME=”CreationTime” TYPE=”datetime”><VALUE>20100707055421.843750-000</VALUE></PROPERTY><PROPERTY NAME=”DebugChannelId” TYPE=”uint32″></PROPERTY><PROPERTY NAME=”Description” TYPE=”string”><VALUE>仮想マシンのグローバル設定</VALUE></PROPERTY><PROPERTY NAME=”ElementName” TYPE=”string”><VALUE>A-Kind</VALUE></PROPERTY><PROPERTY NAME=”ExternalDataRoot” TYPE=”string”><VALUE></VALUE></PROPERTY><PROPERTY NAME=”InstanceID” TYPE=”string”><VALUE>Microsoft:E5F6F01F-5503-432C-9B0B-6596FBF7E684\Global</VALUE></PROPERTY><PROPERTY NAME=”OtherVirtualSystemType” PROPAGATED=”true” TYPE=”string”></PROPERTY><PROPERTY NAME=”ScopeOfResidence” TYPE=”string”><VALUE></VALUE></PROPERTY><PROPERTY NAME=”SettingType” TYPE=”uint16″><VALUE>32768</VALUE></PROPERTY><PROPERTY NAME=”SnapshotDataRoot” TYPE=”string”><VALUE></VALUE></PROPERTY><PROPERTY NAME=”SystemName” TYPE=”string”><VALUE>E5F6F01F-5503-432C-9B0B-6596FBF7E684</VALUE></PROPERTY><PROPERTY NAME=”Version” TYPE=”string”><VALUE>2.0</VALUE></PROPERTY><PROPERTY NAME=”VirtualSystemType” TYPE=”uint16″><VALUE>301</VALUE></PROPERTY></INSTANCE>
</VALUE.OBJECT>
<VALUE.OBJECT><INSTANCE CLASSNAME=”Msvm_VirtualSystemSettingData”><PROPERTY NAME=”AutoActivate” PROPAGATED=”true” TYPE=”boolean”></PROPERTY><PROPERTY NAME=”BaseBoardSerialNumber” TYPE=”string”><VALUE>4105-9897-9514-6551-3613-1594-71</VALUE></PROPERTY><PROPERTY NAME=”BIOSGUID” TYPE=”string”><VALUE>{F9954C4D-AB34-4C40-B16C-5CFB7FA6B348}</VALUE></PROPERTY><PROPERTY NAME=”BIOSNumLock” TYPE=”boolean”><VALUE>FALSE</VALUE></PROPERTY><PROPERTY NAME=”BIOSSerialNumber” TYPE=”string”><VALUE>4105-9897-9514-6551-3613-1594-71</VALUE></PROPERTY><PROPERTY.ARRAY NAME=”BootOrder” TYPE=”uint16″><VALUE.ARRAY><VALUE>1</VALUE><VALUE>2</VALUE><VALUE>3</VALUE><VALUE>0</VALUE></VALUE.ARRAY></PROPERTY.ARRAY><PROPERTY NAME=”Caption” TYPE=”string”><VALUE>仮想マシンの設定</VALUE></PROPERTY><PROPERTY NAME=”ChassisAssetTag” TYPE=”string”><VALUE>4220-1056-9941-6759-2197-7832-10</VALUE></PROPERTY><PROPERTY NAME=”ChassisSerialNumber” TYPE=”string”><VALUE>4105-9897-9514-6551-3613-1594-71</VALUE></PROPERTY><PROPERTY NAME=”CreationTime” TYPE=”datetime”><VALUE>20100707055421.843750-000</VALUE></PROPERTY><PROPERTY NAME=”Description” TYPE=”string”><VALUE>仮想マシンでアクティブな設定です。</VALUE></PROPERTY><PROPERTY NAME=”ElementName” TYPE=”string”><VALUE>A-Kind</VALUE></PROPERTY><PROPERTY NAME=”InstanceID” TYPE=”string”><VALUE>Microsoft:E5F6F01F-5503-432C-9B0B-6596FBF7E684</VALUE></PROPERTY><PROPERTY NAME=”Notes” TYPE=”string”><VALUE></VALUE></PROPERTY><PROPERTY.ARRAY NAME=”NumaNodeList” TYPE=”uint16″><VALUE.ARRAY></VALUE.ARRAY></PROPERTY.ARRAY><PROPERTY NAME=”NumaNodesAreRequired” TYPE=”boolean”><VALUE>FALSE</VALUE></PROPERTY><PROPERTY NAME=”OtherVirtualSystemType” PROPAGATED=”true” TYPE=”string”></PROPERTY><PROPERTY NAME=”Parent” TYPE=”string”></PROPERTY><PROPERTY NAME=”SettingType” TYPE=”uint16″><VALUE>3</VALUE></PROPERTY><PROPERTY NAME=”SystemName” TYPE=”string”><VALUE>E5F6F01F-5503-432C-9B0B-6596FBF7E684</VALUE></PROPERTY><PROPERTY NAME=”VirtualSystemType” TYPE=”uint16″><VALUE>301</VALUE></PROPERTY></INSTANCE>
</VALUE.OBJECT>
<VALUE.OBJECT><INSTANCE CLASSNAME=”Msvm_ResourceAllocationSettingData”><PROPERTY NAME=”Address” PROPAGATED=”true” TYPE=”string”></PROPERTY><PROPERTY NAME=”AllocationUnits” TYPE=”string”><VALUE>キーボード</VALUE></PROPERTY><PROPERTY NAME=”AutomaticAllocation” TYPE=”boolean”><VALUE>TRUE</VALUE></PROPERTY><PROPERTY NAME=”AutomaticDeallocation” TYPE=”boolean”><VALUE>TRUE</VALUE></PROPERTY><PROPERTY NAME=”Caption” TYPE=”string”><VALUE>キーボード</VALUE></PROPERTY><PROPERTY.ARRAY NAME=”Connection” PROPAGATED=”true” TYPE=”string”></PROPERTY.ARRAY><PROPERTY NAME=”ConsumerVisibility” TYPE=”uint16″><VALUE>3</VALUE></PROPERTY><PROPERTY NAME=”Description” TYPE=”string”><VALUE>Microsoft 仮想キーボードの設定です。</VALUE></PROPERTY><PROPERTY NAME=”ElementName” TYPE=”string”><VALUE>キーボード</VALUE></PROPERTY><PROPERTY.ARRAY NAME=”HostResource” PROPAGATED=”true” TYPE=”string”></PROPERTY.ARRAY><PROPERTY NAME=”InstanceID” TYPE=”string”><VALUE>Microsoft:E5F6F01F-5503-432C-9B0B-6596FBF7E684\655BC5C5-A784-46B7-81BC-E26328F7EB0E\Keyboard</VALUE></PROPERTY><PROPERTY NAME=”Limit” TYPE=”uint64″><VALUE>1</VALUE></PROPERTY><PROPERTY NAME=”MappingBehavior” TYPE=”uint16″></PROPERTY><PROPERTY NAME=”OtherResourceType” PROPAGATED=”true” TYPE=”string”></PROPERTY><PROPERTY NAME=”Parent” PROPAGATED=”true” TYPE=”string”></PROPERTY><PROPERTY NAME=”PoolID” PROPAGATED=”true” TYPE=”string”></PROPERTY><PROPERTY NAME=”Reservation” TYPE=”uint64″><VALUE>1</VALUE></PROPERTY><PROPERTY NAME=”ResourceSubType” TYPE=”string”><VALUE>Microsoft Virtual Keyboard</VALUE></PROPERTY><PROPERTY NAME=”ResourceType” TYPE=”uint16″><VALUE>13</VALUE></PROPERTY><PROPERTY NAME=”VirtualQuantity” TYPE=”uint64″><VALUE>1</VALUE></PROPERTY><PROPERTY.ARRAY NAME=”VirtualSystemIdentifiers” PROPAGATED=”true” TYPE=”string”></PROPERTY.ARRAY><PROPERTY NAME=”Weight” TYPE=”uint32″><VALUE>0</VALUE></PROPERTY></INSTANCE>
</VALUE.OBJECT>

上記の様な形でずらずらっと65行に渡って記載されています。

一部ハードディスクの配置場所などに関して「C:\hyper-vHDD\vmname\Virtual Hard Disks\vmname.vhd」のように固定パスが書かれています。ちょっと気になります。このままでいいのでしょうか?でも、エクスポートしたファイルを別マシンの別パスに持って行ってからHyper-Vマネージャーでインポートするようなことは成功するわけであり、このままで良いのだとは思いますが・・・。

config.xmlの中身はシンプルで以下のようになっています。

<?xml version=”1.0″ encoding=”UTF-16″ standalone=”yes”?>
<configuration>
<SnapShotDataRoot type=”string”></SnapShotDataRoot>
<ExternalDataRoot type=”string”></ExternalDataRoot>
<vhd>
<source type=”string”>C:\hyper-vHDD\A-Kind\Virtual Hard Disks\vmname.vhd</source>
<target type=”string”></target>
</vhd>
<VmStateCopied type=”bool”>true</VmStateCopied>
</configuration>

ここでもvhdファイルの場所に関して固定パスが書かれているのが気になります。

ライブラリへの配置

これをSystem Centerで管理されているライブラリパスの中に配置します。具体的には今回はクラウドのセルフサービスユーザーが勝手に使いたいので、クラウドのライブラリにコピーしました。保存された仮想マシン用の共有ではなく、通常のライブラリ共有側です。

コピー後、ライブラリを更新するとSCVMMにVMとして認識されると同時にconfig.xmlの中身も書き換えられていました。

config.xmlは以下のようになりました。

<?xml version= “1.0” encoding= “utf-16″ ?>

<configuration xmlns:xsd=” http://www.w3.org/2001/XMLSchema” xmlns:xsi=” http://www.w3.org/2001/XMLSchema-instance “>

<vhd >

<source type=” string”> C:\hyper-vHDD\vmname\Virtual Hard Disks\vmname.vhd </source>

<target type=” string”> \\server\share\vmname\Virtual Hard Disks\vmname.vhd </target>

</vhd >

<VmStateCopied type= “bool” >True</ VmStateCopied>

<ExternalDataRoot type= “string” >\\server\share\vmname </ExternalDataRoot >

<SnapShotDataRoot type= “string” >\\server\share\vmname </SnapShotDataRoot >

</configuration>

共有のパスが書き込まれています。sourceはローカルパスのままで良いのでしょうか・・・?一方GUID.expファイルの中身には変化がないようです。更新日時が変わっていません。

仮想マシンの生成

この状態でSCVMMには認識されているので新規仮想マシン生成時にこの仮想マシンを選択できるようになっています。

しかし、この時にクラウドの機能プロファイルは選択できません。なぜなのかはよくわかりません。

clip_image001

HDDに関してはきちんと共有上のパスが指定されています。ここは問題無さそうに思います。

clip_image002

ネットワークアダプターは未接続になっているので、きちんと接続してあげます。

clip_image003

可用性も標準になっているので、必要に応じて変更します。

clip_image004

展開先はクラウドの展開プロファイルが選択できない関係上クラウドには配置できないので、ホストに配置するより方法が無さそうです。この点に関してはあとからクラウドに割り当てればよいでしょう。とはいえはじめからクラウドに展開したいものですが・・・。

clip_image005

あとはウィザードを進めて展開できます。設定上何も問題無いように思えます。

 

・・・と実行したら成功してしまいました。いままで何度やってもうまくいかなかったのでこうやって記録しながらやってみたのですが。うーん。

とりあえず、「ライブラリにおいて認識させた後でそれを展開する」という手法はうまくいくようです。

 

今までとの違いを考えてみるとエクスポートしたイメージを配置する場所として通常のライブラリ共有にしたのが良かったのかもしれません。今までは「保存されたVM」の共有においていたような気がします。

 

何はともあれ、この方法であればうまくいくようです。Hyper-Vマネージャーからインポートした場合と違ってきちんと高可用性にもできますし、これが想定された正しい手順なのかもしれません。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です