仮想化

バーチャル マシンのホストの展開を自動化する

Fergus Strachan

 

概要:

  • Hyper-V の展開と自動化
  • Sysprep による汎用化の問題を解決する
  • 仮想リソースを準備する
  • ゲスト OS とサーバー テクノロジの無人展開を構成する

コードのダウンロード: StrachanHyperV2009_02.exe(1,026 KB)

目次

展開のアーキテクチャ
WDS ベースの Hyper-V の展開
WMI ベースの Hyper-V の構成
バーチャル ラボの展開
サーバー アプリケーションの展開
まとめ

おそらく Hyper-V 環境を構築すべきさまざまな理由についてはご存じのことと思いますが、Hyper-V によって、64 ビット システムとの互換性を犠牲にすることなく、テスト ラボ環境や学習環境で製品の評価やトレーニングの実施を容易にする方法に興味のある方はいらっしゃるでしょう。Hyper-V は、ハードウェアの仮想化に対応している CPU を搭載していて、新しい BIOS の更新が適用されていれば、エントリ レベルの 64 ビット ハードウェアでも動作します。このため、64 ビット版の Microsoft Exchange Server 2007 など、完全にサポートされているバージョンを基に運用時並みのテスト環境を簡単に展開できます。一度展開したら、新製品を検証したり、新しいトレーニングを始めるときなど、最初から環境を構築し直す必要がある場合はいつでも簡単に環境を再展開できます。

2 台のドメイン コントローラ (DC)、1 台の SQL Server コンピュータ、2 台の SharePoint フロントエンド サーバー、1 台の Exchange 2007 メールボックス サーバー、1 台のハブ トランスポート サーバー、および 1 台のクライアント アクセス サーバーで構成されるテスト環境を顧客のために展開する場合でも、かなりの手間がかかります。たとえば 600 個のバーチャル マシン (VM) から成る、かなり規模の大きな環境があるとします。これだけの数の VM を毎週または新しいラボ環境が必要になるたびに再インストールすることを想像してみてください。このような展開は自動化する必要があり、このような場合には Hyper-V を利用すると便利です。

Hyper-V は Windows テクノロジです。Windows Management Instrumentation (WMI)、Windows PowerShell、Windows 展開サービス (WDS)、Windows 自動インストール キット (AIK)、Windows プレインストール環境 (Windows PE) 2.0 と組み合わせて、一瞬のうちに (少なくとも、それほど多くの作業を行わずに) 運用時並みの展開を実現できます。自動で展開と構成が行われている間にインストール画面と進行状況バーを確認することもできますが、他に優先事項がある場合はこのような確認をする必要もありません。

この記事では、WDS、カスタムのインストール イメージ、unattend.xml ファイル、および WMI スクリプトを使用して、管理者の操作なしに Hyper-V サーバー、VM、ゲスト オペレーティング システム、およびサーバー アプリケーションを展開する方法を説明します。この目的は、WDS 環境を一度事前に構成しておけば、トレーニング環境の再インストール、さまざまな構成で複雑な問題のトラブルシューティングを行う場合、カスタム ソリューションの開発とテストなど、必要に応じていつでもテスト システムをインストールできるようにすることです。

展開中に実行する必要がある唯一の操作は、F12 キーを押して Preboot eXecution Environment (PXE) を起動することです。ただし、WDS の構成で既定の Startrom.com ブート ファイルではなく Startrom.n12 を使用する場合は、この操作も省略できます (詳細は TechNet サイトの記事「完全自動化インストールの設計の背景」を参照してください)。

Hyper-V VM が起動されたら、残りの作業は WDS、AIK、および WMI によって自動的に処理されます。構成ファイルとスクリプトは、TechNet Magazine Web サイトの「2009 コード ダウンロード」(technet.microsoft.com/magazine/cc135868) の 2 月号のセクションからダウンロードできる付属リソースに含まれています。実際のインストール イメージはサイズが大きいため含まれていませんが、この付属ファイルは皆さんのラボ環境でご利用いただけます。

展開のアーキテクチャ

この記事のラボ展開インフラストラクチャの中核となるのは、Active Directory ドメイン サービス (AD DS)、ドメイン ネーム システム (DNS)、動的ホスト構成プロトコル (DHCP)、および WDS を実行する WDS サーバーです。ここでは、管理容易性を考慮して、AIK とリモート管理用の Hyper-V ツールもこのサーバーにインストールしました。Hyper-V を効率的に展開するために必要なものは、これだけです。これ以外に必要なものはありませんが、冗長性による高可用性を実現する必要がある場合は、追加の WDS サーバーを導入することもできます。残りの物理コンピュータは Hyper-V サーバーです。これらのサーバーは、WDS によって展開し、実際のテスト環境を構成する VM をホストします (図 1 参照)。

fig01.gif

図 1 Hyper-V とバーチャル マシンを基盤とする運用時並みのラボ環境

WDS サーバーの展開手順については、前述のダウンロード サイトから入手できる付属リソースの Excel ブックの Deploying Windows Deployment Services シートを参照してください。いずれおわかりになると思いますが、インストールは簡単です。難しいのは Hyper-V ホストの展開と構成ですが、この詳細についてはすぐに説明します。

WDS ベースの Hyper-V の展開

WDS による Hyper-V 展開メリットの 1 つは、WDS を使用することで Windows Server 2008 インストール メディアを簡単に更新できることです。オリジナルの Windows Server 2008 インストール メディアには、プレリリース版の Hyper-V しか含まれていないため、必ず更新する必要があります。リリース版は、別個の更新プログラムとして Microsoft ダウンロード センターで提供されています。

手順を簡単にまとめると、次のようになります。まず、Windows Server 2008 を参照コンピュータに展開し、最新の Hyper-V ファイルを使用して Windows Server 2008 インストールを更新し、Hyper-V をインストールします。次に、Sysprep.exe を使用してインストールを汎用化し、汎用化したインストール イメージをキャプチャして WDS サーバーにアップロードし、物理インフラストラクチャ内のすべてのホストを対象に既定の Hyper-V 展開を自動化します。ここでは、Hyper-V の OS に Windows Server 2008 Server Core を使用します。この記事の Hyper-V サーバーは VM のホスト専用サーバーなので、Server Core であればオペレーティング システムが使用するリソースが少なくて済むだけでなく、セキュリティ、信頼性、管理面でのメリットもあります。また、インストール イメージのキャプチャには、(言うまでもないことですが) WDS を使用します。付属リソースの Excel ブックの Deploying Default Hyper-V Hosts by Using Windows Deployment Services シートを参照すると、更新された Hyper-V インストール イメージは、簡単に作成、アップロード、および使用できることがおわかりいただけると思います。これはとても簡単に行えます。

ここまでは順調ですね。WDS ベースの既定の Hyper-V の展開は簡単ですが、無人構成は一筋縄ではいきません。インストール イメージをキャプチャおよびアップロードする前に、Sysprep.exe を実行して参照インストールを汎用化する必要がありますが、Sysprep.exe によって汎用化された Hyper-V イメージからは重要な構成情報が削除されてしまうという問題があります。

中でも問題なのは、Sysprep.exe によりブート構成データ (BCD) が汎用化され、BCD ストアからハイパーバイザ起動ディレクティブが削除されることです。BCD はファームウェアの種類に依存しないとされていますが、これは Hyper-V には当てはまりません。ハイパーバイザは基盤となるハードウェアと BIOS の仮想化機能に依存するため、インストール イメージを汎用化するには、ハイパーバイザ起動ディレクティブは破棄する必要があります。Sysprep による汎用化後に BCD ストアをオフラインで変更することもできますが、これは解決策にはなりません。

ImageX.exe (AIK に収録されているツール) を使用してインストール イメージをマウントすると、BCDEdit.exe を使用して起動ディレクティブを再入力できますが、Windows セットアップにより、このディレクティブは、実際のインストール ルーチンの汎用化処理で再び削除されます。これでは、元の木阿弥です。

ハイパーバイザを起動するには起動ディレクティブが必要なため、これは少し厄介な状態です。ハイパーバイザを実行しないと、Hyper-V サーバーは使い物になりません。ブート構成を調整せずにカスタム インストール イメージを使用して展開した Hyper-V サーバー上で VM を起動すると、図 2 のようなエラー メッセージが表示されます。

fig02.gif

図 2 ハイパーバイザが実行されていないことが原因でバーチャル マシンを起動できない

ハイパーバイザの起動ディレクティブを再入力する 1 つの方法として、サーバーのインストール後に手動で追加する方法があります。それには、まず次のコマンドを実行します。

bcdedit /set hypervisorlaunchtype auto

次に、Hyper-V サーバーを再起動します。ただし、この手動の方法は、テスト ラボの完全な無人展開を実現するうえで大きな障害となります。さいわい、AIK に収録されている Windows System Image Manager というツールを使用すると、インストール イメージ用の unattend.xml ファイルを作成できます。このファイルは、WDS により WDSClientUnattend.xml ファイルと併せてインストール時に適用されます。この unattend.xml ファイルでは、セットアップが WDS クライアントから渡された管理者資格情報を使用して自動的に Windows にログオンし、ハイパーバイザの起動ディレクティブを BCD ストアに挿入し直してサーバーを再起動するスクリプトを実行するように指定できます。

図 3 は、ハイパーバイザを再構成して起動する一般的な方法を示しています。また、付属リソースには、完全なバージョンの unattend.xml ファイルと完全な hypervconfig.vbs スクリプトが含まれています。hypervconfig.vbs スクリプトは直接インストール イメージに含めて、インストール中に実行できるようにすることもできます。必要な作業は、ImageX.exe を使用してイメージをマウントするだけです (詳細については、付属リソースの Excel ブックの Customizing Hyper-V Deployments シートを参照してください)。

fig03.gif

図 3 ハイパーバイザの再構成と起動

WMI ベースの Hyper-V の構成

ハイパーバイザを再び有効にすることはそれほど難しくありませんが、付属リソースの hypervconfig.vbs スクリプトをよく見ると、図中の簡単な 5 行のコード以外の処理が含まれていることがわかります。起動ディレクティブに加えて、Hyper-V 環境全体を構成する必要があり、これが Hyper-V の展開において難しい部分です。

単純にイメージをキャプチャする前に参照システムに VM を作成し、これらをインストール イメージに含めて、ハイパーバイザの起動ディレクティブを修正したらすべてがうまくいくと考えることはできません。サーバーには VM が作成されますが、ハードウェアの依存関係に関する情報が不足しています。

イメージの汎用化により、物理的なネットワーク インターフェイス カード (NIC) から VM のイーサネット ポートが、基盤のハード ディスクと CD/DVD デバイスからパススルー ドライブが切断されます。汎用化を省略することもできますが、あらかじめインストールした VM をインストール イメージに含めるのはお勧めできません。あらかじめインストールした VM を含めるとイメージのサイズが格段に大きくなります。また、展開したテスト サーバーの評価ライセンスはいずれは期限が切れますし、Active Directory ドメインを長時間オフラインにすることも好ましくありません。数か月前にインストールされた VM のバックアップを使用してラボ環境を復元すると、おそらく Active Directory の認証とレプリケーションで問題が発生します。そのため、その都度、最初から環境を構築し直す方が望ましいという状況に陥ります。

では、実際にテスト ラボ環境の展開に取り掛かる前に、VM と関連リソース (NIC、ハード ディスク、DVD ドライブなど) を Hyper-V 環境にプロビジョニングしましょう。ご想像のとおり、このような仮想リソースのプロビジョニングが、hypervconfig.vbs スクリプトの主要な作業です。

方法はいたって簡単です。このスクリプトでは、まずローカルの Hyper-V サーバーの名前を特定し、ホスト固有の VM を構成します。各 VM には、サーバー固有の .iso ファイルと汎用インストールの .iso ファイルにマップされた 2 つの仮想 DVD ドライブが割り当てられます。サーバー固有の .iso ファイルはブート ドライブとなる DVD ドライブに対応しています。この .iso ファイルには、特定のラボ サーバーの無人インストールに必要なすべてのスクリプトと構成ファイルが含まれています。

汎用インストール ファイルでは、実際のインストール メディアが提供されます。同じサーバー上のすべての VM で汎用インストールの .iso ファイルを共有すると、Hyper-V インストール イメージのサイズを適度に抑えることができます。.iso ファイルはネットワーク サーバーに置くこともできますが、.iso ファイルはなんらかの方法で Hyper-V サーバーにコピーする必要があるため、ここでは直接インストール イメージに含めることにしました。こうすれば、必要に応じていつでも .iso ファイルをローカルで利用できます。この構成は、たとえば、ラボ環境全体を破棄せずに、追加のコンポーネントをインストールしたり、特定の VM を再インストールしたりするときに便利です。

サーバー固有のインストール ファイルについては、この後すぐに説明します。まず、WMI ベースのスクリプトを使用して、Hyper-V インフラストラクチャの構成を行います。図 4 に示すように、プロビジョニングが必要な仮想リソースはさまざまで、内部および外部スイッチ ポートが割り当てられた仮想スイッチ、専用の仮想イーサネット カードが割り当てられた VM、仮想ハード ディスク (VHD) ファイルに関連付けられた仮想 IDE ドライブ、およびゲスト オペレーティング システムとサーバー アプリケーションのインストールに使われる .iso ファイルに関連付けられた仮想 DVD ドライブなどがあります。

fig04.gif

図 4 ラボ環境に必要な仮想リソースのプロビジョニング

また、VM の自動起動の構成を調整し、最初に仮想ディスク ドライブ、次にサーバー固有の .iso ファイルに関連付けられている DVD ドライブが使用されるように起動順序を変更する必要もあります。この構成では、仮想ハード ディスクに OS がインストールされるまで、VM は DVD から起動します。これは最近のパーソナル コンピュータの標準的な起動シーケンスなので、よくご存じのことと思います。

hypervconfig.vbs スクリプトでは、物理コンピュータが起動されると自動的に VM が起動されて、HypervisorLaunchType の再起動後に VM がオンラインになり、これによりラボのインストールが開始されるように構成しています。最終的に VM では、ゲスト オペレーティング システムのセットアップ ルーチンを起動します。これは、完全な無人ラボ展開を実現する鍵となる部分です。

VM を構成する際の基本方針は、複数の IDE コントローラに関連付けられた複数のドライブが搭載された物理コンピュータを構成するときとほぼ同じです。ただし、仮想スイッチについては、同じ Hyper-V サーバー上の VM 間、およびコンピュータ ネットワーク経由で別のサーバー上の VM との間の通信を実現する鍵となるため、詳しく解説しましょう。基本的に、仮想スイッチは物理スイッチと同様に考えられます。仮想スイッチは、CreatedVirtualSwitch メソッドを呼び出して作成しますが、ポートが割り当てられていないスイッチはそれほど利用価値があるとはいえません。

スイッチを物理ネットワークに接続するには、CreateSwitchPort メソッドを呼び出してスイッチ ポートを作成し、サーバーにある利用可能なイーサネット ネットワーク カードにポートを関連付ける必要があります。1 枚の物理ネットワーク カードを接続できるのは 1 つの仮想スイッチだけですが、複数のスイッチどうしを直接またはルーター ソフトウェアを実行する VM を利用して接続することはできます。ただし、ここでは、ネットワーク ルーターのない基本的な LAN 環境で十分なため、Hyper-V サーバーごとに 1 つの仮想スイッチを用意し、スイッチは利用可能な最初の物理イーサネット カードに接続するように構成しました。

また、VM を仮想スイッチに接続する必要もあります。この場合も、CreateSwitchPort メソッドを呼び出して各 VM に専用のスイッチ ポートを作成する必要があります。作成した各スイッチ ポートは、VM の仮想ネットワーク アダプタに関連付けます。外部ネットワークに接続できるようにする場合は、親パーティションを仮想スイッチに接続する必要もあります。この作業は、SetupSwitch メソッドを呼び出すだけで簡単に実行できます。この際、外部スイッチ ポートと内部スイッチ ポート、利用可能な物理イーサネット カードへの参照、および一意のデバイス名と表示名をパラメータとして指定する必要があります。

付属リソースの hypervconfig.vbs スクリプトからもわかるように、SetupSwitch メソッドを呼び出すと、仮想スイッチがプライベート スイッチから外部スイッチに変換されます。このスクリプトには、VM の外部ネットワーク接続を設定するのに必要な詳細情報がすべて含まれています。詳細については、MSDN サイトの仮想化 WMI プロバイダのドキュメントを参照してください。この記事の hypervconfig.vbs スクリプトの大部分は、仮想化 WMI プロバイダの使用に関するセクションで提供されているサンプルを基にしています。

バーチャル ラボの展開

Hyper-V の展開が完了し、各システムの再起動後に VM が自動的に起動されるようになったら、ラボ環境の実際の展開に取り掛かることができます。トレーニング センターの場合は、仮想ネットワーク インフラストラクチャとゲスト オペレーティング システムを展開して、後で受講者に残りのサーバー アプリケーションを展開してもらえば十分でしょう。しかし、開発、テスト、および評価に使用する場合は、ラボ環境の展開全体を自動化するのが望ましいでしょう。

全体的な方法は、Hyper-V の展開方法と似ています。OS の無人インストールが完了したら、Administrator アカウントで自動的にログオンし、追加のセットアップ コマンドを実行します。ただし、展開を調整する必要があります。

すべての VM を起動すると、各 VM では、ほぼ同時に各自のセットアップ ルーチンを開始しますが、他のサーバーに依存しているサーバーもあるため、すべてのインストールを同時に実行することはできません。たとえば、AD DS をインストールしないと他のサーバーをドメインにインストールすることはできません。また、Exchange Server 2007 にも AD DS が必要で、SharePoint サーバー ファームには SQL Server が必要です。したがって、このシナリオで Windows セットアップを直ちに実行できる VM は DC01.Litware.com のみです。他のすべての VM は、この DC が稼動するまで待機する必要があります。

インストール シーケンスを実装する方法はいくつかあります。VM の起動遅延を構成することもできますが、この方法は信頼性が低いことが知られています。というのも、Active Directory のインストールが必ず 15 分以内に完了する保証はなく、AD のインストール直後に行う Exchange Server のインストールにどれくらいの時間がかかるかわからないからです。

別の方法としては、インストール要件に問題がなければ、WMI ベースのスクリプトを VM に対して実行することができます。これは前述の方法より適切ですが、分散型 VM 展開では一元的なスクリプト実行を準備する必要があります。個別にセットアップ ルーチンをカスタマイズして、各 VM でそれぞれの Windows セットアップ ルーチンを開始する前に指定のインストール要件を確認するようにした方が簡単です (図 5 参照)。

fig05.gif

図 5 インストール要件に基づいた展開シーケンスの実装

Windows PE を使用すると、このようなカスタム セットアップ ルーチンを実装できます。これは限られたサービスを提供する最小の Win32 オペレーティング システムですが、Windows スクリプト ホスト (WScript)、WMI、および Microsoft Data Access Component (MDAC) をサポートしています。カスタマイズした Windows PE イメージを作成し、必要な Windows 機能パッケージとカスタム スクリプトを追加して、Windows PE イメージの %SYSTEMROOT%\System32 にある Startnet.cmd ファイルを編集するだけで、カスタム スクリプトを実行できます。

テスト ラボ環境のサーバーごとにカスタマイズされた Windows PE イメージを作成する方法については、付属リソースの Excel ブックの Creating Custom Boot Images for Server Deployments シートを参照してください。図 6 に、この方法を使用して 2 台目の DC の展開を調整する方法を示します。

fig06.gif

図 6 テスト ラボ環境への 2 台目のドメイン コントローラの展開の調整

Startnet.cmd ファイルには、静的 IP アドレスを VM のネットワーク インターフェイスに割り当て、その後 StartSetup スクリプトを呼び出す netsh コマンドが含まれています。厳密には、netsh コマンドは DHCP 対応環境では必要ありませんが、ネットワーク関連のエラーを特定するうえで便利です。たとえば、Hyper-V 構成スクリプトで、従来のネットワーク カード (Microsoft Emulated Ethernet Port) ではなく、標準のネットワーク カード (Microsoft Synthetic Ethernet Port) を VM にプロビジョニングすると、netsh コマンドによって Windows PE が NIC を認識できないことが通知されます。

StartSetup スクリプトでは、On Error Resume Next ステートメントによって実行時エラーが発生しても処理が続行されるため、ネットワーク リソースにアクセスしたときには、この問題について通知されません。なんらかの理由で DC01 が利用できない場合、接続は失敗し、スクリプトは無限ループ状態になります。このループは、接続が成功するか、DC01 がグローバル カタログ サーバー (つまり AD DS がインストールされているサーバー) でない限り、終了しません。

ループが終了すると、スクリプトはサーバー固有の設定が含まれた unattend.xml を使用して、実際のセットアップ コマンドを呼び出します。図 6 は、グローバル カタログ サーバーがオンラインになるまで待機する方法を示していますが、ファイル共有や SQL Server データベースが利用可能かどうかを確認する場合など、他のシナリオでも同じ原理を応用できます。それには、必要なリソースへのアクセスを試行し、アクセスが成功したらループを終了するようにします。

Hyper-V の関連情報

Windows Server 2008 Hyper-V Web サイト

Windows 仮想化チームのブログ

Windows 展開サービス ガイド

Windows 自動インストール キット

Windows の無人セットアップのリファレンス

サーバー アプリケーションの展開

後は、サーバーをドメインに追加するように unattend.xml ファイルを構成し、TCP/IP 設定を構成し、リモート デスクトップ プロトコル (RDP) を有効にして、必要なサーバー アプリケーションをインストールするための <FirstLogonCommands> を構成するだけです。ほとんどのマイクロソフト サーバー アプリケーションでは、無人展開をサポートしています。

AD DS については、応答ファイルを準備する必要があります。詳細については、マイクロソフト サポート技術情報の記事「無人モードを使用して Windows Server 2008 ベースのドメイン コントローラで Active Directory ドメイン サービスのインストールおよび削除を行う方法」を参照してください。Exchange Server 2007 については、コマンド ライン パラメータを使用する必要があります (詳細については、オンライン ヘルプの「無人モードで Exchange 2007 をインストールする方法」を参照してください)。SQL Server 2008 については、オンライン ヘルプの記事「コマンド プロンプトから SQL Server 2008 をインストールする方法」の手順に従ってください。Windows SharePoint Services 3.0 については、「Config.xml リファレンス (Windows SharePoint Services)」を参照してください。

要件は、展開するシステムの複雑さの程度によって異なりますが、上記のシステムは管理者の操作なしで展開できます。後は F12 キーを押せば、WDS ベースの展開システムを実行できます。

まとめ

Hyper-V は非常に魅力的なテクノロジです。完全な 64 ビット対応であるため、64 ビット版が提供されている場合は、評価やトレーニングのために 32 ビット版のソフトウェアを展開する必要はなくなりました。また、Windows テクノロジであるため、展開に WDS、AIK、および Windows PE を活用できます。Hyper-V では、仮想化 WMI プロバイダを介して WMI と Windows PowerShell をサポートします。これらを使用することで、展開プロセスにおけるリソースや VM のプロビジョニングも含めて、仮想化環境に関連する作業を包括的に管理できます。Hyper-V では、仮想マシン モニタ (VMM) ではなくハイパーバイザを使用して、優れたパフォーマンスを実現し、スケーラビリティを向上しています。また、このハイパーバイザは、Windows Server 2008 に無償で組み込まれています。

Hyper-V ベースの環境は、比較的簡単に展開できます。数回のクリック操作で最初の VM を準備することが可能で、Windows の展開テクノロジと組み合わせれば、非常に複雑なシナリオでも楽に自動化できます。

唯一欠点があるのは、仮想化 WMI プロバイダのオンライン ドキュメントでしょう。これはまだ初期段階であるため、すべての関連作業に対応したサンプル コードが提供されていません。それでも、このテクノロジを使用するのに時間と労力を費やす価値はあります。IT 環境で使用している VM の数が 600 個を大幅に下回っていても、IT 環境が自動的に展開されるのを目の当たりにするのは、おもしろいことだと思います。

Fergus Strachan は、マイクロソフト サーバー インフラストラクチャの設計と実装を専門とするロンドン在住のフリーランスのコンサルタントで、英国内の企業にサービスを提供しています。マイクロソフトのサーバー テクノロジについての技術記事を執筆しており、『Integrating ISA Server 2006 with Microsoft Exchange 2007』の著者です。また、『Microsoft Exchange Server 2003 Resource Kit』の共著者でもあります。