Windows Server 2008 R2 と Windows7(Ultimate/Enterprise) では VHD boot と呼ばれる機能が追加されました。この VHD boot とは、XP mode や Hyper-V の仮想化技術で使われている仮想マシンが使用する仮想ディスク(VHD/Virtual Hard Disc)を通常のローカルディスクと同様に扱って、物理マシンの起動ディスクに VHD を使うって代物です。
VHD boot を使うと、複数の OS
環境を切り替えて起動する「マルチブート」を簡単に作ることができます。マルチブート自体は目新しいものではありませんが、従来の手法でクリーンなOS環境にしようとすると、OS別にパーティションを分けたり、複数のハードディスクを使ったりする必要がありましたが、VHD
boot では、.vhd ファイルをハードディスクに見立てるのでこのような面倒なことはありません。
大き目なハードディスクが1本あれば、お手軽にマルチブート環境を作ることができます。
更に .vhd はファイルなので、ベースとなる .vhd
をコピーして起動環境を簡単に複製/バックアップすることも可能です。
VHD boot で起動した OS は物理マシン上で動いているので、ドメイン参加や Hyper-V / Virtual PC
/ XP mode も普通に動きますし、VHD boot
のオーバーヘッドは全くと言っていいほど無い(ベンチマークで測ればオーバーヘッドはあるかもですが、体感上は全くありません)ので、常用環境として使用しても全く問題ありません。Hyper-V
や XP mode を使うには、ハードウェアの仮想化アシストが必須ですが、VHD boot をするだけならこれらは必要ありません。
今これを書いている
OS は VHD boot した Windows 7 Ultimate x64
で、ライティングやネットワークゲームをする常用環境として使っています。ちなみに、このマシンに物理的にインストールしている OS は、Windows
Server 2008 R2 です。
こうしておくと、別の VHD 環境が欲しいときに Windows Server 2008 R2 で起動して、VHD
を作ったらすぐに VHD boot で目的の OS 環境で起動することができるので便利が良いです。
テスト環境が必要だけど、仮想環境上ではなく物理マシン上でテストする必要があるとか、クリーン環境と色々ツールを入れた環境を切り替えて使いたいとか、1台の PC
で環境を切り替えて使いたい場合は重宝します。
常用環境を VHD boot にしておけば、使っている環境に何かしらの問題が起きてもコピーしておいた .vhd
で簡単に再構築できますし、ハードディスクの入れ替えをする時も簡単です。新しい PC に入れ替える時は、 sysprep して .vhd
を持って行けば、高確率で今使っている環境をそのまま移植出来ます。
良い事づくめの VHD boot ですが、いくつか制限もあります
Windows 7(Ultimate/Enterprise) / Windows Server 2008 R2 以降しかサポートしていない
VHD boot は、VHD を HBA デバイスとして扱っているようなので、VHD 用の HBA ドライバが存在しない XP/Vista は VHD boot ができません。僕は試していませんが、Windows 7 の ブートパーティションと、Vista の OS パーティションを組み合わせれば、ベースを Vista にして Windows 7 を VHD boot 出来そうな気もします。
エクスペリエンスインデックスが計測できない
まぁ、どうでも良い事ですが... コンピュータの評価を起動すると、VHD boot を検出してエクスペリエンスインデックスの計測が中断されます(ディスク評価だけスキップしてくれればいいと思うんですけどね)。PC のエクスペリエンスインデックス値を知りたいのであれば物理インストールする必要があります。
VHD boot だとエクスペリエンスインデックスが計測できない
これ以外にも、バックアップに制限が出るなどの若干の制限があるようですし、僕が知らない制限があるかもしれません。
「容量可変」の VHD で VHD boot 環境を構築する事はできますが、運用環境として VHD boot するのなら、ディスクパーフォーマンズ良い「容量固定」が勧めです。
Hyper-V で容量可変の VHD を作ると、環境によっては BSoD になる事があります。そのような場合はディスクの管理で容量可変
VHD を作るを参照してください。
空き容量が足りない環境に容量可変の VHD boot を構築すると、Stop 0x136 BSoD になってしまいます。(KB2020922/VHD
からのネイティブ ブートを実行しようとすると"stop 0x00000136"のエラー)
VHD boot 用の VHD は、Hyper-V で作ります。VHD は Virtual PC でも作れますし、Virtual PC で作った VHD で VHD boot する事も可能です。ただし、Virtual PC は x86 ゲスト OS しかサポートしていないので、x64の環境を作ることができません。
Hyper-V で Windows 7 の 容量固定 VHD を作るの場合は、ざっとこんな手順になります。
固定容量 VHD を作成
固定容量 VHD を使って仮想マシン作成
仮想マシンに Windows 7 をインストール
必要アプリケーションのインストール
sysprep
仮想マシン削除
bcdedit でブートメニューに登録
まずは、Hyper-V 上で固定容量 VHD を作ります。固定容量の VHD は後でサイズ変更ができないので、サイズをよく考えて作らないと後で泣く事になります。
VHD 作成
容量固定を選択
VHD ができたら、作成した VHD を使って新しく仮想マシンを作成し、Windows 7
をインストールし、必要なアプリケーションをセットアップします。
Windows Update も済ませておくと、後が楽ですね。
準備ができたら、sysprep をかけます。sysprep をすると、SID がクリアされるだけではなく、PnP
が走ってデバイスドライバをセットしなおすので、仮想環境と物理環境ハードウェア構成が異なって BSoD にる予防策にもなります。
sysprep
は「C:\Windows\System32\sysprep\sysprep.exe」にあります。
一般化を指定してシャットダウン
ここまで準備ができたら、Hyper-V で間違って起動しないように仮想マシンを削除します。仮想マシンを削除しても .vhd は削除されないので、適当なフォルダに移動すれば VHD 作成は完了です。
ブートメニューへの組み込みは bcdedit コマンドを使います。
GUID は、/copy の時に表示される
GUID です。
bcdedit /copy {current} /d "メニュー表記"
bcdedit /set <GUID> device vhd=[ドライブレター:]\<ディレクトリ>\<VHDファイル名>
bcdedit /set <GUID> osdevice vhd=[ドライブレター:]\<ディレクトリ>\<VHDファイル名>
bcdedit /set <GUID> detecthal on
ブートメニューへの組み込み
ブートメニューへの組み込みが完了すると、ブート時に OS 選択ができるようになります。
ブートメニューで OS 選択
bcdedit コマンドでもメンテナンス出来ますが、削除とデフォルト OS の変更であれば msconfig.exe でもメンテナンスが出きます。
msconfig.exeでメンテナンスができる
余談ですが、こんな PowerShell スクリプト書いていると楽だったりします(MVP が伝授するスクリプト作成のヒントとコツにも紹介されました)
param ( $Menu, $Path )
if( $Menu -eq $null -or $Path
-eq $null){
Write-Output "Usage:"
Write-Output " vhdboot.ps1 `"Boot menu`" VHD-FullPath"
exit
}
if(Test-Path $Path){
$Output = bcdedit
/copy `{current`} /d "$Menu" | Out-String
$Output =
$Output -split " "
$GUID = $Output[1]
$Drive = Split-Path $Path -Qualifier
$File = Split-Path
$Path -noQualifier
bcdedit /set $GUID device vhd=`[$Drive`]$File
bcdedit /set $GUID osdevice vhd=`[$Drive`]$File
bcdedit /set $GUID detecthal on
}
else{
Write-Output "$Path not found"
}
ちょっとした Tips です。
VHD boot した OS から見ると、.vhd
が格納されている物理ディスクも通常のディスクとして見えます。これはこれで良いのですが、ブートパーティション(システムで予約済み)にもドライブレターが割り当てられているので、なんかの間違いでブートパーティションを壊してしまうかもしれません。
そんな時は、ブートパーティションのドライブレターを消しておきましょう。
ドライブレターが割りあたっているブートパーティションのドライブ名を変更
ドライブレターを削除
これも Tips です。
Windows Server 2008 R2 を sysprep すると、Administrator
のパスワードがリセットされるので別段問題は無いのですが、Windows 7 では Administrator
をインストールアカウントにできないので、インストール用のアカウントを別に作成することになります。
困った事に sysprep
してもインストール時に作成したアカウントが残ってしまい、再度インストールする時に別のインストールアカウントを作ることになってしまいます。
これを嫌うのであれば、sysprep 前にインストールに使用したアカウントを削除します。(削除時にさんざん警告が出ますけど ^^;)
更に、シャットダウン後に sysprep 済みの VHD
をマウントしてプロファイルフォルダを削除してしまえばクリーンな環境にすることができます。
sysprep をする前にインストールアカウントを削除
sysprep した VHD をマウント
インストールアカウントのプロファイルを削除
Hyper-V で容量可変 VHD を作った場合、環境によっては BSoD になる事があります。そのような時は、ディスクの管理を使って容量可変 VHD を作るとうまくいく場合がありす。
VHD の作成
容量可変を指定
VHD を作成すると、自動的にマウントされます。出来たばかりの VHD は初期化されていないので、ここで初期化しておきましょう。容量固定の VHD を作った場合は初期化しなくても問題ありませんが、容量可変の VHD を初期化しないと、容量固定サイズで作成したのと同じサイズになってしまい、容量可変にしたメリットなくなってしまいます。
ディスクの初期化
VHDの切断
VHD を切断したら、Hyper-V で環境を作れば OK です。
Copyright © MURA All rights reserved.