Hyper-VとかvirtualPCとか

まいど。

 

最近職場でもテスト環境としてHyper-Vを使用する事が多くなってきました。

一昔前にWindowsで仮想環境と言ったらvirtualPCかvirtual Serverだった訳ですが、クライアントOSでも64bit可が進んでいるように、Server製品も64bit化が進み64bit環境でないと動かない製品も出てきており、検証環境を作ろうとしたら必然的にHyper-Vに。
(VMwareServerも有りますが、会社がMS系なのと個人的にHyper-Vの方が好きなのでw)

なので何となくHyper-VとvirtualPCの違いとか、移行方法とかをまとめてみる。

※Hyper-Vは今普通に使っているので大体合ってるとおもいますが、virtual系はちょっと調べ直した以外は記憶で書いているので、もしかしたら間違っている所があるかも…

まずはvirtualPCやvirtual ServerとHyper-Vの違いのおさらいから。

○virtualPC・virtual ServerとHyper-Vの違い

今までのvirtual PC/Serverと違いハイパーバイザ型で64bit OS等のホストも可能。

image

VirtualServer 2005 R2の64bit版は64GBのメモリを認識することはできますが、ゲストOSは32bitのみなので、その制限で4GB以上のメモリを割り当てることはできない。
Hyper-VのVM最大メモリはゲストOSの制限次第。

違いは簡単に書くと、ソフトウェアエミュレート系はホストOSの上にアプリケーションとしてインストールしていましたが、Hypervisor型はOSより上位の部分に仮想化レイヤーとしての必要最低限の機能のみ実装されており(仮想化レイヤーのサイズは1MBにも満たない実行ファイルと複数のシステムファイルのみ)、制御はルート パーティションの管理OSに依存する方式です。
エミュレートと違い、物理HW上に直接乗っている状態に限りなく近い為VirtualPC/Server系に比べパフォーマンスが良いわけですね。
(実際には管理OSと色々やり取りがありますが…IOの流れ・VMbus等の細かい所はまた今度)

image

 

○ 状態保存・復元機能

  • virtualPC/Virtual Server (復元ディスク)
    ・仮想マシンの環境を一つ分しか保存できない。
    ・仮想マシン開始直前の状態へ戻る事のみ可能。一度復元すると復元前の状態(アンドゥ)へは戻せない。
    ・ディスクベースの保存機能なので、実行中のメモリ状態等は保存できない。
    ・復元ディスクは仮想マシン単位で設定する為、ディスク毎に設定はできない。
  • Hyper-V (スナップショット)
    ・仮想マシンの状態を複数保存できる。
    ・ツリー上に分岐する複雑な履歴も可能。
    ・任意の状態に戻すことができる、アンドゥも可能。
    ・状態の保存・復元機能なので、実行中の仮想マシンのメモリ状態まで保存でき、実行中に保存し、復元すると実行中の状態から再開する。
    ・仮想マシン単位で設定する為、ディスク毎に設定はできない。

Diskの状態保存方法については、VirtualPC系もHyper-Vも似たような感じで元のDiskは読み取りのみで、差分のみを別のファイルに保存する。

※通常の読み書き
image

・復元ディスクの読み書き
image

・スナップショット の読み書き
「VHD」と「差分1」から読み込み、差分が「現在」に書き込まれる。
image

復元ディスク・スナップショット共に気を付けないといけない事は、マスタVHD作成時に容量を設定しても、「差分Diskの容量はその容量に含まれない」という事。

特にHyper-V環境で起きやすく、容量50GBのDiskを作ったとして、簡単に戻せるからとスナップショットを作成しまくると、差分Diskがどんどん作成され、気が付いたら物理HDDの空き容量がなくなってしまった、なんて話はよくある。

ゲストOS上での使用量は約26.5GB。image
OSインストールから、各アプリをインストール・設定するたびにスナップショットを作成。
image
マスタVHDと差分Diskの合計が33GBになっている
image

 

○ 仮想マシンのエクスポート・インポート

基本的には、アーキテクチャの違いを事を考えなければ、単一VHDの場合は丸ごとコピーすれば問題ない、差分Diskの場合は適用or破棄し、単一VHD状態にする。

・Virtual PC/Virtual Server 単一VHD の場合
(復元Disk等を設定せず、マスタVHDのみの場合)
同じパスに復元予定の場合はVHDファイル(.vhd)と仮想マシン設定ファイル(.vmc)等を、別のパスの場合はvhdファイルのみコピーし新規仮想マシンを作成した後、「デバイス」の項目で既存のVHDファイルを指定する方が早い。

・VirtualPC/Virtual Server マスタVHD+復元VHD の場合
(復元Diskを設定し、マスタVHDと差分が存在する場合。)
復元Diskの内容を、保存(復元Diskを設定した後の変更内容をマスタVHDへ反映する)するか破棄(変更部分を全て削除し、復元Diskを設定する直前まで戻る)し、単一VHDの状態にする、以降は単一VHDと同じ扱いで問題ない。

・Hyper-V 単一VHDファイルの場合
基本的には、VirtualPC/Server等と同じ。

・Hyper-V スナップショットの場合
マスタVHDと各差分のつながりをXMLファイルで保持している為、そのまま別環境に丸ごとコピーしても動かない、管理画面にて、対象のVMを右クリックしメニューから「エクスポート」で、VM構成情報(マスタVHD、スナップショットツリーの親子関係情報、VMの設定)含めすべて書き出す。
単一VHDでも別の環境へ持って行ってインポートすれば、VM構成情報も含めて移行できる為、Hyper-V環境の場合はVHDファイルコピーではなく、エクスポートで書き出すようにしたほうが何かと楽。
image

○VirtualPC/ServerとHyper-V環境での移行について

  • Virtual PC/Server → Hyper-V
    稼働中のゲストOSからVirtualPC/Server統合サービスを削除。
    VHDファイルをHyper-v環境へコピー。
    新しい仮想マシンを作成し、既存のVHDファイルを指定。
    ゲストOSを起動。
    Hyper-V用統合サービスをインストール。
    数回再起動。
  • Hyper-V → virtualPC/Server
    通常の手順では不可、起動しても画面が真っ黒なままになる。

○どうしてもHyper-V環境で使用していたVHDをVirtual Server等で使いたい場合

※下記はかなりイレギュラーな方法になるので、この方法で確実に動くわけではありません、ゲストOSは起動してもサービスが起動しない等と問題が起きる可能性もあります。
決まり文句ですが「自己責任で」

  • HALを書き換える

・ゲストOSのHyper-V統合サービスを削除する。
・Virtual PC/Server環境で仮想マシン設定を行う。
・ゲストOSのインストールメディアをマウントする。
・ゲストOSを起動せず、インストールメディアからブートする。
・インストールの種類で「修復インストール」を選択する。
・ローカルのAdministratorのパスワードを入力する。
・コマンドプロンプトが起動するので下記を実行する。

C:WINDOWS>cd system32
C:WINDOWSSYSTEM32>copy d:i386HALACPI.DL_ c:windowssystem32
C:WINDOWSSYSTEM32>rem HAL.DLL HAL.dll.bak
C:WINDOWSSYSTEM32>rem HALACPI.DL_ HAL.DLL

・ゲストOSを再起動する。

これで一応OSは起動はするはずですが、他にネットワークの再設定等の作業があります。

 

長くなってきたのでとりあえず今回はここまで。

---------- キリトリ -----------

VirtualPC/Server環境からHyper-V環境への移行をした場合に、ゲストOSがネットワークを認識しなかったり、デバイスマネージャーに[!]が出たり、妙に重くなったりします。

そういう時は、msconfigを起動し

「ブート」タブの「詳細オプション」で「HALの検出」にチェックを入れて再起動すると幸せになれたりします。

VirtualPC/ServerとHyper-vのHALが違う為なので、HALを再検出させてあげればいいわけです。

カテゴリー: Windows Server タグ: , , パーマリンク

コメントを残す

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

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください