[アーカイブ] VHD ブートの設定方法

<オリジナル投稿 2012年2月27日 本ポストの情報はオリジナル投稿時点のものです。マイクロソフトの正式な見解や製品の仕様を保証するものではないことをご了承ください。>

 

VHD にまつわる TIPS としてお伝えします。※過去に こちら で投稿したものを統合・改訂・移行しています。
Windows 7 (Windows Server 2008 R2) から仮想ハードディスク (VHD) を起動できるようになりました。
■VHD とは?
VHD とは、 Virtual Hard Disk の略です。 Hyper-V や、Virtual PC で用いられる仮想ハードディスクで、単一のファイルで構成されます (拡張子は、.vhd)。
VHD は、仕様がオープンになっています (詳しくは こちら)。ちなみに、マイクロソフトでは、多くの技術を OSP (Open Specification Promise) としてオープンにしています。
ちなみに、VHD ファイルは、Windows 7、Windows Server 2008 R2 から簡単に接続 (マウント) と、切断 (アンマウント) することができるようになっています。
image_3[1]
VHD の中のファイルは、ふつうにディスクを接続したのと同じようにアクセスできるようになります。
■VHD Native ブート
さて、VHD ブートの話をしましょう。仮想マシンとの違いは、以下です。
VPC などの仮想マシン: ホスト OS の上で仮想のゲスト OS を起動する。したがって、ドライバなども仮想のものとなる。
・VHD ブート: VHD に格納されている OS を直接ブートする。ホスト OS があるわけではない。ドライバは、ほぼすべてネイティブのものを使う (HDD ドライバのみ、 Virtual Hard Disk 用を使う)。
ホスト OS 上のゲスト OS ではないので、通常の OS と同様に快適なパフォーマンスが見込めます。
VHD でブートした場合、以下の画面ショットのような仮想の HDD ドライバがインストールされ、使用されます。
image_6[1]
また、VHD でブートした場合は、ディスク構成は、以下の画面ショットのようになります。
image_thumb_2[1]
一見では、通常の HDD と違いがわかりにくいですが、この環境では、 C: ドライブが VHD ファイルです。ディスクアイコンが青色になっているのが確認できます。
VHD ファイルは、どこに格納されているかというと、 D: ドライブのとあるフォルダに ~.vhd という名前で、格納されています。すなわち、 VHD ファイルが格納されている物理ハードディスクは、D: ドライブとして認識され、通常通りにアクセスができるわけです。
整理すると、
・システム ディスクは、VHD ファイルで、 C: ドライブとして認識される
・物理ディスクは、D: ドライブとして認識される

ということです。
利点はというといくつもあるわけですが、ここでは今思いつくままに書きます。
・VHD は単一ファイルなので、バックアップ/リストアが容易
当然 そのVHD ブートで起動しているときにそのファイルを外部媒体にコピーするのは好ましくないと思いますが、他のVHDでブートしているときならば、普通のファイルのコピーでしかないので。
そして、普通のファイルですから、圧縮して保存すると経済的!(ファイルの圧縮をしているとVHDの接続やブートはできませんのでご注意を!)
・ディスクの拡張/縮小が容易
Windows 7 では、パーティションの拡張なども比較的容易ですが、拡張する後ろに容量がなければいけません。当然その後ろにパーティションがあり、いくつかのファイルなどが格納されていると拡張できないわけです。
VHD ブート環境ならば、ディスクの拡張=VHDファイルのサイズ拡張でしかありませんので、物理ディスクのファイルのありなしには影響を与えません。VHDを拡張した分だけ、物理ディスクの空き容量は減りますけどね。
・大量マルチブート環境も構築できる
VHD でブートするため、パーティションを区切ったデュアルブート環境のようにパーティションの数の制限を受けずに、OS を切り替えることができます。
・人と違うことをやってる感があってカイカン(ぉぃ
■VHD ブートのおぜん立て
さてさて、VHD ブートを行える環境にするためには、物理ディスクにおいてやっておかなければいけないことがあります。非常にいい加減かつ、簡潔に書くと、一度その物理ディスク(厳密にはブートレコードを格納するディスクでしょうか)に Windows 7 か、Windows Server 2008 R2 をインストールしてください。すると、以下のようにシステムで予約されたパーティションが自動で作成されます。
image_thumb_4[1]
この領域ができてしまえば、もう先ほど物理ディスクにインストールした OS は極端な話、いらないです。フォーマットしてしまってもいいでしょう。私の環境は上述のように、物理的なディスク上には、OS をインストールしていません。
※ここの部分はものすごくいい加減に記述しています。
■VHD ブートをする2つのパターン
VHD ブートをするには、VHD ファイルに、OS がインストールされている必要があります。VHD は仮想ディスクイメージですので、通常の方法で、VHD に OS をインストールすることができます。通常の方法とは、
・マウント済みの VHD に OS をインストールする
・仮想マシンに、OS をインストールする

が考えられます。まずは、前者からやり方を紹介します。
■VHD に Windows 7 をインストールする簡易方法
普通に物理ディスクにインストールするのと同じ手順を踏んでください。要するにインストールメディアでブートしてインストーラーを走らせるというわけです。
image_16[1] image_19[1]
ここでいったんストップです! 「今すぐインストール」はクリックしないでください(物理ディスクをもう一度フォーマットしたい場合は、さらに先でインストール先を選択するところで、フォーマットできます)。
ここから先は、コマンドプロンプトでの作業が必要となります。そのために、まずはコマンドプロンプトを呼び出さなければいけません。
そこで、「コンピューターを修復する」をクリックします。
image_22[1]
という画面では、[次へ] ボタンをクリックします。
image_25[1]
次に表示されたダイアログでは、[X] をクリックし、閉じてしまいましょう。そうすると、
image_28[1]
一番下に、「コマンド プロンプト」がありますので、これをクリックし、コマンド プロンプトを起動します。
さて、ここからは、コマンドラインを使って VHD ファイルを作成していきます。
実行するコマンドと出力結果は以下のような感じです。
X:\sources>d:
D:\>diskpart
Microsoft DiskPart バージョン 6.1.7100
Copyright (C) 1999-2008 Microsoft Corporation.
コンピューター: XXXXXXXXXXXXXXX
DISKPART> create vdisk file=D:\VHD\Win7.vhd maximum=15000
100% 完了しました
DiskPart により、仮想ディスク ファイルが正常に作成されました。
DISKPART> select vdisk file=D:\.data\VHD\Win7.vhd
DiskPart successfully selected the virtual disk file.
DISKPART> attach vdisk
100% 完了しました
DiskPart により、仮想ディスク ファイルがアタッチされました。
DISKPART> exit
DiskPart を終了しています..
D:\>exit
※ VHD の格納フォルダは任意の場所で構いません。VHD は、可変長でも固定長でも構いませんが、可変長の場合は、物理ディスクの空き容量を超えないように注意してください(固定長の方が個人的にはおススメです)。
コマンドプロンプトを終えたら、「システム回復オプション」の画面に戻りますので、[シャットダウン]、[再起動]ボタンではなく、[X] でこの画面を閉じてください。
すると、「今すぐインストール」の画面に戻ってきますので、こんどこそ「今すぐインストール」にて Windows 7 をインストールします。その際に、OS インストール先を指定することで先ほど作成、アタッチした VHD が見えるはずですので、そちらを選択します。以下は省略しますね。
■VHD ブートでマルチ ブート環境を実現
上述の利点にも記載しましたが、VHD ブートではより柔軟なブート環境を構築することができます。私のノートPCでは、当然 HDD(厳密にはSSDです)は1つしか搭載しておりませんが、ブートできる OS は、
Windows 7 Enterprise x86
Windows 7 Enterprise x64
Windows Server 2008 R2 Enterprise
Windows Server 2008 R2 Server Core
Windows Web Server 2008 R2
Windows Server 2008 R2 x64 for Demo – Visual Studio 11 and TFS 11
Windows Server 2008 R2 x64 for Demo – Visual Studio 2010 ALM
Developers Summit 2012 ONLY

がずらーっと並んでいます(やりすぎ)。
■既存の VHD をネイティブブート可能にする方法
既存の VHD(Sysprep済みのもの)をブート一覧に追加する方法をご紹介しましょう(新規であれば、上述のインストール方法を必要数繰り返すだけです)。
これもコマンド プロンプトを使います。管理者権限にて、コマンド プロンプトを起動します。
試しに、bcdedit を実行してみてください。現在のブート可能な情報が一覧として出力されます。
次に、既存のもの{default}, {current}, {xxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxx} どれてもいいので、コピーします。
C:\>bcdedit /copy {current} /d “Windows 7 – VHD”
エントリは {yyyyyyyy-yyyy-yyyyy-yyyyy-yyyyyyyyyyyyy} に正常にコピーされました。
コピーできましたら、既存の VHD との関連付けを行います。
C:\>bcdedit /set {yyyyyyyy-yyyy-yyyyy-yyyyy-yyyyyyyyyyyyy} device vhd=[C:]\VHD\win7.vhd
この操作を正しく終了しました。
C:\>bcdedit /set {yyyyyyyy-yyyy-yyyyy-yyyyy-yyyyyyyyyyyyy} osdevice vhd=[C:]\VHD\win7.vhd
この操作を正しく終了しました。
※ドライブレターのところが [C:]となっているところは気をつけてください。
これで、もうこの VHD から起動できるようになります。試しに、システムのプロパティの詳細設定タブの「起動と回復」の[設定]ボタンをクリックし、起動システムの一覧を見てください。bcdedit で追加したものが一覧にでてくるはずです。
■VHD ブートの注意点
注意していただきたいのが、VHD ブートに対応した Windows 7 のエディションについてです。VHD ブートに対応しているのは、Enterprise と Ultimate になります。また、Windows Server 2008 R2 はすべてのエディションで VHD ブートが可能です。
より詳細な内容については、
https://blogs.technet.com/michw/archive/2009/08/01/windows-native-vhd-boot-deployment-scenarios.aspx
が必要に参考になりますので、特にデプロイメントでの活用を検討されている方は、こちらを見ていただくことをお勧めいたします(英語です。PDF の資料がダウンロードできるのでそれをご覧ください)。
そして、もう一つ、VHD ブートをした際に、ブルースクリーンになる場合があります。私の経験上、以下の2つが考えられます。
・可変長 VHD を採用していて、設定した最大サイズより、物理的なディスク スペースが不足している場合
ブルースクリーン上にもその旨記載されています。VHD の最大サイズより物理的な格納庫の容量が少ないということで、これは納得です。ということもあるので、私は、固定をお勧めします。固定の方が可変のように都度容量が増えていかないため、パフォーマンスでも優位です。
・ドライバがマッチしない
ブルースクリーンから読み取るとそういうことのようです(すみません、詳細まで追求してません)。どうも、ハードディスクの種類(IDE とか、SCSI とか、、、AHCI とか)のあたりに起因しているようです。ただし、sysprep 済みの VHD ではこのケースは発生しておりません。
Windows Vista/7 では、ドライバーの読み込みの最適化を行い、マシン起動時間の短縮を行っています。それに伴い、不要なドライバーを読み込まないようになっているのですが、仮想マシン上の VHD と 物理マシン上の構成は、異なります。平たく大雑把に言えば、ハードディスクの種類(SATAのモード)が異なるとイメージすると良いかと思います。
したがって、読み込むべきものが無効になっている可能性があり、それにより読み込めない可能性がでてきてしまいます。その結果がブルースクリーンということになります。私が試した限りでは、ブルースクリーンが一瞬だけしか表示させず、なかなか判読できないのですが、サポート情報から見ると「STOP 0x0000007B INACCESSABLE_BOOT_DEVICE」がでていると思われます。
このサポート情報は、
https://support.microsoft.com/kb/922976/ja
です。
このサポート情報にならい、
レジストリエディタにて、
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\
以下のキーの Start の値を 3(無効)から、0(有効)にすることで、VHD で無事にブートできるようになります。具体的なキーについては、触れないでおきます。
さて、最後に免責事項として書かせていただきますが、今回 VHD ブートについて書いたのは、この方法を奨励、推奨するという主旨ではありません。あくまで Windows 7 での新たな機能であり、新たな可能性をご紹介しているにすぎません。VHD ブートの環境の構築や運営については、使用許諾、運用リスクなども十分にご確認の上、ご検討ください。くどいようですが、推奨しているわけではありません。