第4回では「Hyper-Vのバージョン」を取り上げました。では、Hyper-Vと共通のテクノロジで動いている(であろう)「Microsoft Azure」のHyper-Vは、どのバージョンなのでしょうか。Azure仮想マシンの内側から想像してみました。あくまでも筆者の“想像”ですので、新たな都市伝説に発展しないことを願います。
パブリッククラウドは文字通り“雲の向こう側の存在”であり、どうなっているのか、その仕組みは公開されていませんし、利用者が詳しく知る必要もありません。
主要なパブリッククラウドでは、ほぼ間違いなく仮想化環境が活用されていると思います。マイクロソフトのパブリッククラウドである「Microsoft Azure」(旧称、Windows Azure)なら、特にAzureコンピュートサービス(クラウドサービスおよび仮想マシン)に限定すれば、Hyper-Vベースの仮想化環境で動いていると容易に想像できます。
例えば、IaaS(Infrastructure as a Service)であるAzure仮想マシンは、Hyper-Vで作成した仮想マシンイメージ(VHD)をアップロードして展開できます。逆に、Microsoft Azureで作成した仮想マシンのVHDをオンプレミスのHyper-V環境にダウンロードして、そのままHyper-Vの仮想マシンとして動作させることもできます。このようなことが可能なのは、Hyper-Vという共通の仮想化テクノロジに基づいているからに他なりません(画面1)。
ただし、Microsoft Azureでは、Windows ServerのHyper-Vそのものが動いているというわけではないようです。Microsoft Azureは「Windows Azure Platform」という名前で2010年1月に正式にサービスを開始しましたが、ちょうどその1年前に次のようなブログ記事が投稿されました。
この記事によると、Microsoft Azureの仮想化基盤として「Windows Azure Kernel」に密接に統合、最適化された「Windows Azure Hypervisor」と説明されています。おそらく、当時のWindows Azure Kernelは、Windows Server 2008ベースのもので、Windows Azure HypervisorはカスタマイズされたWindows Server 2008 Hyper-V(Hyper-V 1.0)だったのでしょう。
Windows Server 2008 Hyper-Vは仮想マシン当たりの仮想プロセッサ数が最大4コアでしたが、Microsoft Azureでは当初から最大8コアが利用可能でした。Windows Server 2008 R2 Hyper-V(Hyper-V 2.0)に初めて実装された「第2レベルアドレス変換拡張」(Second Level Address Translation:SLAT)機能のサポートは、Windows Azure Hypervisorの初期バージョンで既に実装されていたようです。
Microsoft Azureが登場したとき、Windows Azure Hypervisorは当時のWindows Server 2008 Hyper-Vより先に進んでいましたが、現在はおそらく、Microsoft Azure向けの機能の一部がHyper-Vに取り込まれ、Hyper-Vに先に実装された新機能がMicrosoft Azureに取り込まれ、Hyper-VへのフィードバックがMicrosoft Azureに反映される、そういった循環の中でMicrosoft AzureとHyper-Vの両方の機能拡張や改善が行われているものと想像しています。
とはいえ、Microsoft AzureではどのバージョンのHyper-Vが動いているのか、ちょっと気になりませんか。Hyper-Vの「データ交換サービス」を利用して、ちょっと覗いてみました。
Hyper-Vの仮想マシン上で実行されるゲストOS、少なくともサポート対象のゲストOSの場合は、自分がHyper-V上の仮想化環境で動いていることを認識しています。そのため、比較的新しいバージョンのWindowsゲストやLinuxゲストは、Hyper-Vの仮想マシンにインストールするだけで、Hyper-Vのゲストコンポーネントである「統合サービス」(Integration Services)が自動的に組み込まれ、ホストとの連携機能(シャットダウン連携や時刻同期など)や仮想デバイスが利用可能になります。
ホストとゲスト間の連携機能の1つに、「データ交換サービス」または「KVPデータ交換サービス」(KVPはKey Value Pairの略)と呼ばれる機能があります。このサービスは、ホストとゲスト間でファイルを交換するようなサービスではありません。ホスト側からゲストの情報を取得したり、逆にホストからゲストに情報やデータを渡したりするのに利用されています。例えば、「Hyper-Vマネージャー」に表示される仮想マシンのIPアドレスは、データ交換サービスを通じてゲストから取得したものになります(画面2)。
仮想マシンのゲストOSでデータ交換サービスが開始すると、IPアドレスを含むさまざまな情報が生成され、ホストに提供されます。Windowsの場合は、レジストリキー「HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Virtual Machine\Auto」に生成された値とデータのペアが書き込まれます。
このゲストOSのシステム情報は、WMI(Windows Management Instrumentation)インターフェースを介してホスト側から参照することができます(画面3)。ちなみに、Linuxゲストの場合は、「/var/lib/hyperv」ディレクトリにあるファイルの1つに、値とデータのペアが書き込まれます。
*1 ここで使用しているサンプルスクリプト(kvptest.ps1)は、筆者が執筆した「Microsoft TechNet」の記事からダウンロードできます。
Hyper-Vデータ交換サービスは、双方向のサービスです。ゲストからホストに値とデータのペアを提供するだけでなく、ホストからゲストに値とデータのペアを提供することもできます。
WMIインターフェースを用いれば、任意の値とデータを書き込むこともできますが、Windows Server 2008 R2以降のHyper-Vでは標準でホストと仮想マシンに関する情報がゲストOSのレジストリキー「HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Virtual Machine\Guest\Parameters」に書き込まれるようになっています。
ゲストOSでこのレジストリキーの中の値とデータを参照すれば、ホストのコンピューター名やFQDN(Fully Qualified Domain Name:完全修飾ドメイン名)、OSのバージョン、OSのエディション、サービスパック(SP)レベル、自身の仮想マシン名、仮想マシンIDを知ることができます。
以下の画面4の例では、ゲストOSのレジストリキーの情報から、ホストOSがWindows Server 2012 R2(バージョン「6.3」)であり、Datacenterエディション(エディションID「8」)を実行していることが分かります。ちなみに、エディションIDが示すOSのエディションは、以下の通りです。なお、Windows Server 2012以降、GUI使用サーバーのServer CoreのエディションIDは共通になりました。また、評価版はこれらとは別の固有のエディションIDを持ちます。
エディションID | OS |
---|---|
7 | Windows Server Standard |
8 | Windows Server Datacenter |
10 | Windows Server Enterprise |
12 | Windows Server Datacenter Server Core |
13 | Windows Server Standard Server Core |
14 | Windows Server Enterprise Server Core |
42 | Microsoft Hyper-V Server |
4 | Windows Enterprise(クライアントHyper-V) |
48 | Windows Pro(クライアントHyper-V) |
103 | Windows Pro with Media Center(クライアントHyper-V) |
以上のように、Windows Server 2008 R2やMicrosoft Hyper-V Server 2008 R2以降のHyper-V、およびWindows 8以降のクライアントHyper-Vであれば、仮想マシンのゲストOS側から自身を実行しているHyper-VのホストOSの情報を取得できることが分かりました。
Microsoft AzureのクラウドサービスのWebロールやWorkerロールのインスタンス、およびAzure仮想マシンには、リモートデスクトップ接続を利用してデスクトップにログオンすることができます。Azure仮想マシンにWindows Serverゲストを展開し、Hyper-Vと同じテクニックを使って、ログオンしたデスクトップ環境からレジストリを参照してみました(画面5)。
その結果、OSのバージョン「6.2」、エディションID「8」となりました。この結果からは「Windows Server 2012 Datacenter」と判断できます。ここから想像できるのは、現在のWindows Azure HypervisorはおそらくWindows Server 2012 Hyper-Vベースだということ。また、筆者がAzure仮想マシンの展開先として選んだ日本(東日本)リージョンの、たまたま割り当てられた物理ホストがこのバージョンを実行していて、他にも別の新旧バージョンが混在して運用されているという状況も考えられます。どちらも想像の域を出ませんが、詮索はここまでとしましょう。
ところで、Microsoft AzureのWindows Server仮想マシンのデスクトップ右上には、パブリックIPなどのインスタンスの情報を表示できるようになりました。この表示は、2014年2月にAzure仮想マシンに新たに追加された「VMエージェント」の機能で実現されています。次回は、この秘密について探ってみます。そして、できればHyper-V環境で同様の機能を実現できればと思います。
山市 良(やまいち りょう)
岩手県花巻市在住。Microsoft MVP:Hyper-V(Oct 2008 - Sep 2014)。SIer、IT出版社、中堅企業のシステム管理者を経て、フリーのテクニカルライターに。マイクロソフト製品、テクノロジを中心に、IT雑誌、Webサイトへの記事の寄稿、ドキュメント作成、事例取材などを手がける。個人ブログは『山市良のえぬなんとかわーるど』。
Copyright © ITmedia, Inc. All Rights Reserved.