VHDブートを使って快適にVisual Studio 2010 Beta 2を試そう

http://karlshifflett.wordpress.com/2009/10/09/developers-must-learn-booting-windows-7-from-a-vhd/



 まだ英語版のみですが、Visual Studio 2010 Beta 2が公開されました。 さっそく試してみようということになるわけですが、Beta版をメイン環境にインストールするのは抵抗がある方が多いと思います。かといってわざわざ別の環境を用意するのは大変です。


 そのため、これまではVirtual PCHyper-Vなどの仮想環境を利用するというのが一般的でした。しかしながら、Visual Studioのような大物を仮想環境で動かした場合、パフォーマンス面で不満が残ります。


 というわけでVHDブートです。VHDブートとは、ようするに仮想環境を物理環境として起動してしまう機能です。概要については下記のページがわかりやすいかと思います。

Windows previous versions documentation | Microsoft Docs



 VHDブートの環境を構築するには様々なシナリオがありますが、ここでは比較的楽で一般的と思われるシナリオをご紹介しようと思います。VHDブートの構築については下記の記事でものすごく詳しく紹介されていますので、時間に余裕のある方は是非こちらを読んでいただければと思います。

【連載】Windows 7の仮想ハードディスクがスゴイ!
(1)手軽にOSテストもできるVHDってナンだ!?
(2)VHDブートを活用する3つのシナリオ
(3)VHDテスト時のトラブル解決&リカバリ
(4)USBメモリからのVHDブートは可能か!?
(5)マルチブートなテスト環境を構築する



用意するもの

  • Windows 7がインストールされたコンピューター
  • Windows 7(EnterpriseかUltimate)のインストールディスク(isoイメージ可)とそのライセンス



※EnterpriseとUltimate以外のエディションはVHDブートに対応していません。


 物理環境にWindows 7Windows Server 2008 R2がインストールされていなくともVHDブート環境を構築することは可能ですが、ここでは仮想環境を構築してからそれをVHDブートさせる方法を紹介します。そのため、既にWindows 7がコンピューターにインストールされていることを前提に話を進めます。


仮想環境作成のためのソフトウェア


 まず、VHDブートさせたい仮想環境を用意する必要があります。これには、

  1. Windows Virtual PC
  2. Hyper-V
  3. Virtua PC 2007(2004)

のいずれかを使用します。


Windows Virtual PCとVirtua PC 2007(2004)は、ゲストとして64ビット版のOSをサポートしていません。


 仮想環境を作成する環境がWindows 7ならば1番、Windows Server 2008(R2含む)ならば2番、他のOSならば3番を選択することになるかと思います。今回はWindows 7の環境で作成しますので、迷わず1番です。なお、他の仮想化ソフトウェアで作成した仮想環境を変換ツールでVHD形式に変換するという方法もありますが、失敗の可能性を少しでも減らすためにも最初からVHDを作成したほう良いでしょう。


 なお、これらの仮想化ソフトウェアを使用する以外の方法としては、http://www.microsoft.com/japan/windows/products/windowsvista/features/details/completepcbackup.mspxWindows Server バックアップを使い、バックアップとしてVHDを作成するという方法があります。これらの方法で作成したVHDファイルを使ってVHDブートが可能なのかどうかは、試していないため分かりません。


仮想ディスクの種類


 仮想環境を作成する場合、まず仮想ハードディスクを作成することになりますが、これには以下の3種類が存在します。

  • 容量可変の拡張仮想ハードディスク
  • 固定容量仮想ハードディスク
  • 差分仮想ハードディスク



 これらの種類の違いについては、「仮想ハード ディスクの新規作成ウィザード」のページに記載されている「ディスクの種類の選択」部分を参照してください。一般的に容量可変に比べて容量固定のほうがパフォーマンスが良いと言われていますが、下記のページを見る限り体感できるほどの違いはなさそうです。

Windows 7時代の新常識-仮想ハードディスクをドライブとして使う【後編】 - Enterprise Watch Watch



 また、差分仮想ハードディスクを使う場合であれば、元の仮想ハードディスクを固定容量にする意味はまったくないように思います。ここでは最終的に差分仮想ハードディスクをVHDブート用として使いたいと思いますので、その元となる仮想ハードディスクは容量可変で作成します。


 差分仮想ハードディスクを使うことで、例えば日本語版のVisual Studio 2010 Beta 2がリリースされた際に、英語版をアンインストールしたり、もしくはまた一から仮想環境を作成したりする必要がなくなります。なお、差分仮想ハードディスクに対してさらに差分仮想ハードディスクを作成することも可能なため、親の仮想ハードディスクはクリーンインストール状態、子の差分仮想ハードディスクは初期設定や必要ツールのインストールが済んだ状態、孫の差分仮想ハードディスクはVisual Studio 2010 Beta 2がインストールされた状態などのような構成も可能です。


Windows Virtual PCによる仮想環境の作成


 まずはWindows Virtual PCの[仮想マシンの作成]から容量可変の仮想ハードディスクを作成し、Windows 7をインストールします。





 インストールが完了したらシャットダウンし、作成されたVHDファイルを読み取り専用に変更します。これは、差分仮想ハードディスクを関連付けた後に親の仮想ハードディスクが変更されることで、その差分仮想ハードディスクが使えなくなってしまうことを防ぐためです。


 次に差分仮想ハードディスクを作成します。Windows Virtual PCでは、「仮想ハードディスクの追加」の画面で[詳細オプションを使用して仮想ハードディスクを作成する]を選択して次へ進むことで、差分仮想ハードディスクの作成が行えます。





 差分仮想ハードディスクは、親となる仮想ハードディスクと同一フォルダに作成しなければならない点に注意が必要です。最後に、親の仮想ハードディスクを指定する画面で先ほど読み取り専用としたVHDファイルを指定します。


システム準備ツール (Sysprep.exe)でOSを初期状態へ戻す


 作成した仮想環境のWindows 7は、当然ながら仮想環境上のハードウェア構成でインストールが完了しています。しかしながら、最終的にこの仮想ハードディスクはVHDブートによって物理環境で使用されることになるため、その際にはハードウェア構成を変更しなければなりません。Sysprepは、OSをインストール完了前の初期状態へ戻してくれるツールです。初期状態に戻すことで、初めて物理環境で起動した際にハードウェア構成の設定やSID番号の再生成などといったミニセットアップが行われるようになります。


 Sysprep.exeは「C:\Windows\System32\sysprep」にあります。





 先ほど作成した差分仮想ハードディスクの仮想環境上からSysprepを実行し、[システムクリーンアップアクション]を[システムの OOBE (Out-of-Box Experience) に入る]、[一般化する]をオン、[シャットダウン オプション]を[シャットダウン]にして、[OK]をクリックし、シャットダウンさせます。


Bcdeditによるブートエントリの追加


 続いて、物理環境上のWindows 7からBcdeditコマンドラインツールを使用して、ブート構成データ(BCD)ストアにエントリを追加します。コマンドプロンプトを管理者権限で起動し、以下のコマンドを実行して既存のエントリをコピーします。


bcdedit /copy {current} /d "Windows 7 x86 (VHD)"


 最後の「"Windows 7 x86 (VHD)"」の部分は、物理マシン起動時に表示される[Windowsブートマネージャ]画面で表示される名称になりますので、お好きな名称を設定してください。そうすると、


エントリは {yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy} に正常にコピーされました。


と8桁-4桁-4桁-4桁-12桁のIDが表示されますので、このIDを以下の3つのコマンドで使用します。


bcdedit /set {yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy} device vhd=[C:]\VHD\diff_win7.vhd


bcdedit /set {yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy} osdevice vhd=[C:]\VHD\diff_win7.vhd


bcdedit /set {yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy} detecthal yes


 「[C:]\VHD\diff_win7.vhd」の部分は、作成した差分仮想ハードディスクのVHDファイルへのパスに置き換えてください。


起動時にブルースクリーンが表示される場合の対応方法


 これでVHDブートのための準備はすべてそろったので、マシンを再帰動して[Windowsブートマネージャ]画面で表示されるVHDブートのエントリを選択すればめでたく成功となるはずです。しかしながら、ここでブルースクリーンが表示され失敗となってしまうケースがあります。


 ブルースクリーンは一瞬しか表示されないためエラー内容を読むのは非常に困難ですが、その一瞬に表示された文字列の最下部の左側のほうをよく見て「0x0000007B」の文字が確認できれば、以下の方法で対応することができるはずです。


 BIOSの設定を確認しSATAAHCIに設定されていた場合には、以下のページの内容に沿って差分仮想ハードディスクを仮想環境上から変更します。

ブート ドライブの SATA モードを変更した後で Windows Vista ベースのコンピュータを起動すると、エラー メッセージ "STOP 0x0000007B INACCESSABLE_BOOT_DEVICE" が表示される



 AHCIではなくRAIDだった場合には、以下のレジストリエントリに対してAHCIのときと同様の変更を行ってください。


HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\iaStorV


 これで正常に起動すれば、物理マシンのデバイスの検出や適切なデバイスドライバのインストールが行われるはずです。ドライバのインストール後の再起動が終わったら、再度管理者権限で実行したコマンドプロンプトから以下のコマンドを入力してdetecthalオプションを削除しておきます。


bcdedit /deletevalue {yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy} detecthal


最後に


 こうして手順を記述してみるとかなり膨大な文章となり大変なように思いますが、一度手順を覚えてしまえばどうってことない作業かと思います。一度この手順を踏めば、後はバックアップの差分仮想ハードディスクをコピーしてまた使えば良いので、毎回このような作業が発生するわけではありません。


 まだVHDブート未体験という方は、是非一度お試しあれ。