VHD ブートの設定方法 ~ 北陸コミュニティ勉強会フォロー


※VHDブートについては、下記に情報をまとめました:

http://softwareengineeringplatform.com/articles/vhd-boot/

こちらをご覧いただければと思います(2012.03.26 追記)。

 

ずいぶん前に VHD ブートについて触れ、先日の北陸での Windows 7 コミュニティ勉強会を経て、もう少し VHD ブートについてお伝えしたいと思っていたものを書きたいと思います。

只今、Tech・Ed の準備真っ盛りですが、そんな合間に書いてます。Tech・Ed といえば、

ですので、こちらもご興味ある方は是非ご検討を!

■VHD ブートとは

さてさて、まずは、VHD ブート(VHD Native Boot、VHD 起動)とは何かをおさらいです。

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

VHD は、仕様がオープンです(詳しくはこちら)。

Windows 7、Windows Server 2008 R2 からは、この VHD ファイルを簡単に接続(マウント)、切断(アンマウント)することができるようになります。

image

これにより、VHD の中のフォルダおよびファイルに自由にアクセスすることができることとなりますが、それだけではなく、この VHD (にインストールされた Windows 7 や Windows Server 2008 R2)でブートを行うこともできます。

「え?仮想マシンと何が違うの?」と思われた方、簡単に言うと、以下のような感じです:

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

したがって、ホストOS上のゲストOSではないので、まず通常のOS同様に快適なパフォーマンスが見込めます。HDDはVHDを用いてますので、物理的なHDD上のVHDファイルを操作することになるため、多少パフォーマンスに影響はありますが、Windows 7 時代の VHD はパフォーマンスも向上していますので、体感ではほぼそん色ないです。

VHD でブートした場合(VHD を接続した場合も同様です)以下のスクリーンショットのような仮想のHDDドライバがインストールされ、使用されます。

image

では、VHD ブートするとディスク構成はどのようになるのでしょうか?実際にコントロールパネルの管理ツールでディスクの管理を見ると以下のような感じなります。

image一見なんのこっちゃと思われるかもしれませんが、この環境では、C: ドライブが、VHD ファイルです。ディスクのアイコンが青色になっているのが確認いただけます。image 

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

実際に、D: ドライブのとあるフォルダの下には、この VHD ファイルがあり、見ることができます。

整理すると、

  • システムディスクは、VHD ファイルで、C: ドライブとして認識
  • 物理ディスクは、D: ドライブとして認識

ということになります。

利点はというといくつもあるわけですが、ここでは今思いつくままに書きます。

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

 

■VHD ブートのお膳立て

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

image

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

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

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

つぎに、いよいよ VHD に Windows 7 をインストール!ですが、これもまずは、普通に物理ディスクにインストールするのと同じ手順を踏んでください。要するにインストールメディアでブートしてインストーラーを走らせるというわけです。

image image

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

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

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

image

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

image

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

image

コマンドプロンプトがでてきますので、クリックし、コマンドプロンプトを起動します。

さて、ここからは、コマンドラインを使って 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 RC x86
  • Windows 7 RC x64
  • Windows Server 2008 R2 Enterprise
  • Windows Server 2008 R2 Server Core
  • Windows Web Server 2008 R2
  • Windows 7 RC x86 for Demo
  • Windows 7 RC x64 for Demo

がずらーっと並んでいます(やりすぎ)。

では、最後に、既存の VHD(Sysprep済みのもの)をブート一覧に追加する方法をご紹介しましょう(新規であれば、上述のインストール方法を必必要数繰り返すだけです)。

これもコマンドプロンプトを使います。管理者権限にて、コマンドプロンプトを起動します。

試しに、bcdedit を実行してみてください。現在のブート可能な情報が一覧として出力されます。

次に、既存のもの{default}, {current}, {xxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxx} どれてもいいので、コピーします。

C:\>bcdedit /copy {current} /d "Windows 7 RC - VHD"
エントリは {yyyyyyyy-yyyy-yyyyy-yyyyy-yyyyyyyyyyyyy} に正常にコピーされました。

コピーできましたら、既存の VHD との関連付けを行います。

C:\>bcdedit /set {yyyyyyyy-yyyy-yyyyy-yyyyy-yyyyyyyyyyyyy} device vhd=[D:]\VHD\win7.vhd
この操作を正しく終了しました。

C:\>bcdedit /set {yyyyyyyy-yyyy-yyyyy-yyyyy-yyyyyyyyyyyyy} osdevice vhd=[D:]\VHD\win7.vhd
この操作を正しく終了しました。

※ドライブレターのところが [D:]となっているところは気をつけてください。

これで、もうこの VHD から起動できるようになります。試しに、システムのプロパティの詳細設定タブの「起動と回復」の[設定]ボタンをクリックし、起動システムの一覧を見てください。bcdedit で追加したものが一覧にでてくるはずです。

<追記>

■その他

Windows 7 は、VHD ブートされていることを自分で把握しているようです。というのは、仮想メモリは、C: ドライブ(要するにVHD)には作成されません。D: ドライブ(VHDが格納されている物理ハードドライブ)に作成されます。また、「システムの評価」はできなくなりますので、ご注意を!

</追記>

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

ながさわ
https://twitter.com/tomohn

Comments (4)

  1. KeiichiHara says:

    VHDブートの御説明ありがとうございました。

    挑戦してみます。

  2. KeiichiHaraさん、

    コメントありがとうございます。

    ぜひお試しください!

    # 今日ありがとうございました!

  3. やみぃ says:

    Win7RTMでVHDブート環境でのセットアップが完了し、

    よしよし、と思ってたのもつかの間、

    VHDファイルが置いてある物理HDDのドライブレターを変える方法がわからない。。。

    WinPEでブートしてBCDEDITで物理HDDのドライブレターを変更しても起動するとDドライブに。。。(当たり前か。。。)

    どうにかできないものなんでしょうか。。。

  4. やみぃ says:

    すいません、私のミスでした。

    変更できない理由はVHDブートの場合勝手にページファイルを物理ディスクに作成する為でした。

    ページファイルを無効化もしくは別ドライブに作成すれば

    ドライブレターの変更が可能でした。

    #ただし再起動は必要

    。。。しかしエラーメッセージが「パラメータが間違ってます」じゃ

    ページファイルが原因なんて気がつけないって、、、

Skip to main content