Misc.

2009/11/16

Windows Virtual PC と Virtual PC 2007 SP1 のゲスト コンポーネントの互換性

Windows Virtual PC は、Microsoft Virtual PC 2007 SP1 の後継となるデスクトップ向け仮想化テクノロジです。Windows Virtual PC というと Windows XP Mode が注目されますが、仮想 USB デバイスのサポート追加や、クリップ ボード共有、プリンターのリダイレクトなど、通常の仮想マシン実行環境としても機能強化が行われています。機能強化はうれしい限りですが、Microsoft Virtual PC 2007 SP1 のような汎用性がなくなってしまいました。例えば、Windows Virtual PC は Intel VT または AMD-V または VIA VT を搭載したプロセッサがなければ動きません。Windows Virtual PC の仮想マシンには、仮想フロッピー ディスクがありません。サポートされるゲスト OS は、Windows XP、Windows Vista および Windows 7 の以下のバージョン(いずれもx86)に限られます。
  • Windows XP Professional SP3
  • Windows Vista Business SP1 (or later)
  • Windows Vista Enterprise SP1 (or later)
  • Windows Vista Ultimate SP1 (or later)
  • Windows 7 Professional
  • Windows 7 Enterprise
  • Windows 7 Ultimate
サポート対象のゲスト OS には、ゲスト コンポーネント(統合コンポーネント)が提供されます。ゲスト コンポーネントをインストールすることで、マウス統合や時刻同期、USB デバイスのサポート、最適化されたビデオ ドライバー、シャットダウン連携などが利用できるようになるとともに、Windows XP Mode と同様の仮想アプリケーション モードが利用可能になります(Windows Vista Business および Windows 7 Professional では仮想アプリケーション モードを利用できません)。

サポート対象のゲスト OS が動かないというわけではありませんが、ゲスト コンポーネントが利用できない仮想マシンは実用的ではありません。これは、どんな仮想化テクノロジ(VMware や VirtualBox、Xen Server など)でも言えることです。少なくても時刻同期が利用できないと、さまざまな問題が出てきます。特に、Windows と時間の管理が異なる Linux の場合、時間がとてつもなく進んでしまったり、逆にどんどん遅れていくといったことになります。誤差は、ntp などで訂正するのも困難なほどにです。

Windows Virtual PC は、Virtual PC 2007 SP1 の後継ということで、Virtual PC 2007 SP1 のゲスト コンポーネント(バーチャルマシン追加機能)が利用できないかどうか試してみました。Windows Virtual PC には仮想マシンのインポート/エクスポート機能はありませんが、Virtual PC 2007 SP1 で作成した仮想マシン構成ファイル(.vmc)をダブルクリックすると、仮想マシンが登録され、仮想マシンが開始します。Windows Virtual PC 上に仮想マシンを新規作成した場合は、Virtual PC 2007 SP1 がインストールされているコンピューターの C:\Program Files\Microsoft Virtual Server Trial\Virtual Machine Additions\VMAdditions.iso を仮想マシンにマウントして、Virtual PC 2007 SP1 のバーチャルマシン追加機能をインストールできます。

次のスクリーンショットは、Windows 2000 Professional SP4 の仮想マシンが動いているところです。ネットワーク アダプター(Intel 21140)やビデオ(S3 Trio)、オーディオ(Sound Blaster)は問題なく動いているようです。ホストとのマウス統合やシャットダウン連携、時刻同期もちゃんと機能しました。Virtual PC 2007 SP1 で利用可能なホスト/ゲスト間のドラッグ&ドロップやフォルダー共有は機能しないようです。


Linux ゲストの場合も確認してみました。マイクロソフトは、Virtual Server 2005 R2 向けに Virtual Machine Additions for Linux (VMAdditons for Linux)を提供しています。VMAdditons for Linux は、Linux ゲストに対してホストとの時刻同期、ハートビート、シャットダウン連携、マウス統合、ビデオ ドライバー、仮想 SCSI ドライバーを提供します。Virtual Server 2005 R2 と Virtual PC 2007 SP1 の仮想マシンは、仮想 SCSI デバイスとオーディオ以外は互換性があるので、Virtual PC 2007 SP1  の環境でも時刻同期、シャットダウン連携、マウス統合、ビデオ ドライバーを利用できる可能性があります。

次のスクリーンショットは、Windows Virtual PC の仮想マシンで Ubuntu 8.04 TLS が動作しているところです。結論から言うと、VMAdditions for Linux のうち、すべてのコンポーネントの前提となるカーネル モジュール vmadd と時刻同期 vmadd-timesync は動作し、機能しているようです。シャットダウン連携(vmadd-shutdown)は、スクリーンショットを見ればわかるように機能しません。マウス統合とビデオ ドライバーは試していません(経験上、おそらく動かないでしょう)。


これで (最大の懸案である時刻同期が解決できたので)、 Windows Virtual PC でもいろいろな Linux ディストリビューションが楽しめる!! とはいきません。Ubuntu 8.04 はこのような状況ですが、最新の Linux ディストリビューションは Virtual PC 2007 SP1 よりもインストールを成功させるのが一苦労です。

Fedora 11
起動オプションに noreplace-paravirt vga=0x317 nosmp noapic nolapic を追加することでインストールは開始するも、最終段階でハングアップ。Rescue モードで起動して、/mnt/sysimage/etc/grub.conf  の起動エントリに noreplace-paravirt vga=0x317 nosmp noapic nolapic を追加して、セットアップを再開、完了できた。VMAdditions for Linux については、vmadd カーネル モジュールのソース(vpc-mod.c および vpc-utils.c)に手を加えることでインストールできたが、ロードしようとするとセグメンテーション違反が発生し、断念。

openSUSE 11.1
起動オプションに vga=0x317 noreplace-paravirt を追加することでインストールは開始するも、途中でハングアップし断念。ちなみに、ISO イメージを直接マウントするとチェックサム エラーが発生。ホストの仮想 DVD ツール経由なら正しく読み込んだ。

Ubuntu 9.10
既定のオプションで Ubuntu のインストールは問題なく完了。VMAdditions for Linux はカーネル モジュールがビルドできずに断念。
VMAdditions for Linux については、Windows Server World 2007年12月号の特集「Linux on Virtual Server」やWindows Server World 2008年9月号から同誌の最終号である 2009年12月号まで連載していた「仮想化の教室」(2008年11月号、12月号、2009年1月号)で取り上げました。2008年11月号掲載分については COMPUTERWORLD のサイトで参照できます。