VHD ブートの設定方法

働き方Windows

この記事は、1年以上前に書かれたもので、情報が古い場合があります。

この記事の所要時間: 30

はじめに

VHD にまつわる tips をお伝えします。

Windows 7 (Windows Server 2008 R2) から仮想ハードディスク (VHD) をネイティブ起動できるようになりました。

 

VHD とは

VHD とは、Virtual Hard Disk の略です。Hyper-V で用いられる仮想ハードディスクで、単一のファイルで構成されます (拡張子は、  .vhd または、.vhdx)。

VHD は、仕様がオープンになっています。OSP (Open Specification Promise) の一環です。

ちなみに、VHD ファイルは、 Windows 7, Windows Server 2008 R2 以降から簡単に接続 (= マウント) と、切断 (= アンマウント) することができるようになっています。

VHD の中のフォルダやファイルは、普通にディスクを接続したときと同じようにアクセスできます。

 

VHD Native ブート

さて、VHD ブートの話しをしましょう。仮想マシンとの違いは、以下です。

  • Hyper-V などの仮想マシン: ホスト OS 上で仮想のゲスト OS を起動する。したがって、ドライバなども仮想のものとなる。
  • VHD ブート: VHD に格納されている  OS を直接ブートする。ホスト OS があるわけではない。ドライバは、ほぼすべてネイティブのものを使う (HDD ドライバのみ、 Virtual Hard Disk 用を使う)。

ホスト OS 上のゲスト OS ではないので、通常の OS と遜色のない快適なパフォーマンスが見込めるとともに、VHD ファイルの管理、運用でディスクや OS 環境を取り扱えるようになります。

VHD でブートした場合、以下の画面ショットのような仮想の HDD ドライバがインストールされ、使用されます。

また、VHD でブートした場合は、ディスク構成は、以下の画面ショットのようになります。

一見では、通常の HDD と違いがわかりにくいですが、この環境では、C: ドライブが VHD ファイルです。ディスクアイコンが青色担っているのが確認できます。

VHD ファイルは、どこに格納されているかというと、 D: ドライブのとあるフォルダに、〜.vhd という名前で格納されています。すなわち、VHD ファイルが格納されている物理ハードディスクは、 D: ドライブとして認識され、通常通りにアクセスできるわけです。

整理すると、

  • システムディスクは、VHD ファイルで、C: ドライブとして認識される
  • 物理ディスクは、  D: ドライブとして認識される
  • VHD ファイルは、D: ドライブの任意のフォルダに格納されている

ということです。

利点は、いくつもあります。

  • VHD は単一ファイルなので、バックアップ/リストアが容易
    当然、その VHD ブートで起動しているときにそのファイルを外部媒体にコピーするのは好ましくないと思いますが、他の VHD でブートしているときならば、普通のファイルのコピーと同様の扱いで、バックアップ/リストアできます。
    普通のファイルなので、保管時には圧縮すると経済的です (※ ファイルの圧縮をしているときに VHD 接続やブートはできません)。
  • ディスクの拡張/縮小が容易
    Windows 7 からは、パーティションの拡張なども比較的容易になりました。とはいえ、後ろのスペースに容量がなければ拡張できません。
    VHD ブート環境ならば、ディスクの拡張 = VHD ファイルのサイズ拡張 でしかないので、物理ディスクのファイルのありなしに影響を与えません。VHD を拡張した分だけ、物理ディスクの空き容量は、当然減ります。
  • 大量マルチブート環境も構築できる
    VHD でブートするため、パーティションを区切ってデュアルブート環境のように数の制限を受けずに OS を切り替えて起動することができます。

 

VHD ブートのお膳立て

さてさて、VHD ブートを行える環境にするためには、物理ディスクにおいてやっておかなければいけないことがあります。非常にいい加減かつ、簡潔に書くと、一度その物理ディスク(厳密にはブートレコードを格納するディスクでしょうか)に Windows 7 か、Windows Server 2008 R2 をインストールしてください。すると、以下のようにシステムで予約されたパーティションが自動で作成されます。

この領域ができてしまえば、もう先ほど物理ディスクにインストールした OS は極端な話、いらないです。フォーマットしてしまってもいいでしょう。私の環境は上述のように、物理的なディスク上には、OS をインストールしていません。

※ここの部分はものすごくいい加減に記述しています。

 

VHD ブートをする 2つのパターン

VHD ブートをするには、VHD ファイルに、OS がインストールされている必要があります。VHD は仮想ディスクイメージですので、通常の方法で、VHD に OS をインストールすることができます。通常の方法とは、

・マウント済みの VHD に OS をインストールする
・仮想マシンに、OS をインストールする

が考えられます。まずは、前者からやり方を紹介します。

 

VHD に  Windows 7 をインストールする簡易方法

普通に物理ディスクにインストールするのと同じ手順を踏んでください。要するにインストールメディアでブートしてインストーラーを走らせるというわけです。

  

ここでいったんストップです!「今すぐインストール」はクリックしないでください(物理ディスクをもう一度フォーマットしたい場合は、さらに先でインストール先を選択するところで、フォーマットできます)。

ここから先は、コマンドプロンプトでの作業が必要となります。そのために、まずはコマンドプロンプトを呼び出さなければいけません。

そこで、「コンピューターを修復する」をクリックします。

という画面では、[次へ] ボタンをクリックします。

次に表示されたダイアログでは、[X] をクリックし、閉じてしまいましょう。そうすると、

一番下に、「コマンド プロンプト」がありますので、これをクリックし、コマンド プロンプトを起動します。

さて、ここからは、コマンドラインを使って 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 ブートが可能です。

そして、もう一つ、VHD ブートをした際に、ブルースクリーンになる場合があります。私の経験上、以下の2つが考えられます。

・可変長 VHD を採用していて、設定した最大サイズより、物理的なディスク スペースが不足している場合

ブルースクリーン上にもその旨記載されています。VHD の最大サイズより物理的な格納庫の容量が少ないということで、これは納得です。ということもあるので、私は、固定をお勧めします。固定の方が可変のように都度容量が増えていかないため、パフォーマンスでも優位です。

・ドライバがマッチしない

ブルースクリーンから読み取るとそういうことのようです(すみません、詳細まで追求してません)。どうも、ハードディスクの種類(IDE とか、SCSI とか、、、AHCI とか)のあたりに起因しているようです。ただし、sysprep 済みの VHD ではこのケースは発生しておりません。

Windows Vista/7 では、ドライバーの読み込みの最適化を行い、マシン起動時間の短縮を行っています。それに伴い、不要なドライバーを読み込まないようになっているのですが、仮想マシン上の VHD と 物理マシン上の構成は、異なります。平たく大雑把に言えば、ハードディスクの種類(SATAのモード)が異なるとイメージすると良いかと思います。

したがって、読み込むべきものが無効になっている可能性があり、それにより読み込めない可能性がでてきてしまいます。その結果がブルースクリーンということになります。私が試した限りでは、ブルースクリーンが一瞬だけしか表示させず、なかなか判読できないのですが、サポート情報から見ると「STOP 0x0000007B INACCESSABLE_BOOT_DEVICE」がでていると思われます。

このサポート情報にならい、

レジストリエディタにて、

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\

以下のキーの Start の値を 3(無効)から、0(有効)にすることで、VHD で無事にブートできるようになります。具体的なキーについては、触れないでおきます。

 

免責事項

さて、最後に免責事項として書かせていただきますが、今回 VHD ブートについて書いたのは、この方法を奨励、推奨するという主旨ではありません。あくまで Windows 7 での新たな機能であり、新たな可能性をご紹介しているにすぎません。VHD ブートの環境の構築や運営については、使用許諾、運用リスクなども十分にご確認の上、ご検討ください。くどいようですが、推奨しているわけではありません。

 

 

働き方Windows