Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
前回は、従来の Boot.ini にかわる新しいブート構成情報の格納庫である BCDストア について簡単に解説しました。
ブート構成データ(BCD)ストアを理解すれば VHDブート は簡単
https://blogs.technet.com/junichia/archive/2009/10/26/3289120.aspx
これを踏まえ、Hyper-V 上に作成してあるVHDファイルを、VHD Bootに移行してみます。何を行っているのかが理解しやすいように、ショートカット的な作業は一切行っていません。
1. VHD Boot 用の Boot Loader オブジェクトを作成する
前回の解説でも触れていますが、新しいOSをブートできるようにするには、Boot Loader オブジェクトを新たに作成し、BCDストアに保存してあげる必要があります。図にすれば、以下のようなイメージです。
Boot Loader オブジェクト
を作成するには、コマンドプロンプトから以下のように入力します。
C:\> bcdedit /create /d “Winodws 7 – VHD Boot” /application OSLOADER エントリ {59a1b361-8694-11de-ba0c-ea7587cc7300} は正常に作成されました。 これでひとまず「空のオブジェクト」が出来ました。/d は description のことです。ここでは、"Winodws 7 - VHD Boot"という文字列を設定しました。/application は ApplicationタイプのBCDオブジェクトを作成することを示しており、そのあとに osloader と指定することで ブートローダーオブジェクトとなります。
/application には、osloader 以外にも、BOOTSECTOR/RESUME/STARTUP などを指定することができますが、ひとまず今回は説明しません。
コマンドの実行後に出力されるCLSID {59a1b361-8694-11de-ba0c-ea7587cc7300} は、このオブジェクトを識別するための IDとなります。他のオブジェクトのIDとものすごーく似ていますが、微妙に違うので注意してください。
ためしに、以下のコマンドで、いま作成した Boot Loaderオブジェクトを参照してみてください。/enum OSLOADER は、OSLOADERオブジェクトを全て表示するという意味です。
C:\> bcdedit /enum OSLOADER 出力されたエントリの中に、”Winodws 7 – VHD Boot “ と書かれたエントリがあることを確認してください。
2. 起動に必要なパラメタを設定する
いま作成した Boot Loader オブジェクトには、identifier と description 以外のパラメタが何も設定されていません。そこで、OSの起動に必要な情報を埋め込んであげる必要があります。まずは、以下をご覧ください。これは上記画面ショットの中から既存のOSブートローダー情報を抜き出したものです。
Windows ブート ローダー -------------------------------- identifier {current} device partition=C: path \Windows\system32\winload.exe description Windows Server 2008 R2 locale ja-JP inherit {bootloadersettings} recoverysequence {9afda1cc-9772-11de-abb0-e0195a1514fa} recoveryenabled Yes osdevice partition=C: systemroot \Windows resumeobject {9afda1ca-9772-11de-abb0-e0195a1514fa} nx OptOut hypervisorlaunchtype Auto
identifier や description 以外に、多くの情報が必要であることがわかります。
そこで、同じように必要なパラメタを埋め込んでいきましょう。
BCDオブジェクトにパラメタを設定するには、「BCDEDIT /Set {CLSID} <パラメタ名> <値> 」を使用します。
今回のCLSIDは {9afda1d7-9772-11de-abb0-e0195a1514fa} です。
■ブートパーティションとシステムパーティションの指定
ブートパーティションとOSがインストールされているパーティションを指定します。通常は partition=C: などと指定しますが、VHD Boot を行う場合には、VHD=<VHDファイルのパス> を指定します。以下の例では、「C:\VHDBOOT\Win7_VHDBoot\Win7_VHDBoot.vhd」 がVHDファイルのパスです。
C:\>bcdedit /set {9afda1d7-9772-11de-abb0-e0195a1514fa} device VHD=[C:]\VHDBOOT\Win7_VHDBoot\Win7_VHDBoot.vhd
C:\>bcdedit /set {9afda1d7-9772-11de-abb0-e0195a1514fa} osdevice VHD=[C:]\VHDBOOT\Win7_VHDBoot\Win7_VHDBoot.vhd 注意しなければならないのは、ドライブ名を [ ] でくくるという点です。
■ブートローダーのパス
ドライブを指定する必要はありません。
C:\>bcdedit /set {9afda1d7-9772-11de-abb0-e0195a1514fa} path \Windows\system32\winload.exe ■OSのシステムルートのパス
C:\>bcdedit /set {9afda1d7-9772-11de-abb0-e0195a1514fa} systemroot \Windows ■ブートローダーのロケール
C:\>bcdedit /set {9afda1d7-9772-11de-abb0-e0195a1514fa} locale ja-JP ■HALの再認識を有効にする
ハードウェアが変わることになるので、念のために入れておいてください。
C:\>bcdedit /set {9afda1d7-9772-11de-abb0-e0195a1514fa} detecthal yes ■ブートメニューの編集
作成したエントリがブートメニューに表示されるように、以下のコマンドで設定します。/addlast はメニュー一覧の最後に追加することを表しています。
C:\>bcdedit /displayorder {9afda1d7-9772-11de-abb0-e0195a1514fa} /addlast コマンドプロンプトから bcdedit と入力すると、以下のように表示されていればOKです。
3.AHCIドライバ(Msahci.sys)を有効にする
全項までで、ひとまずVHDブートに関する設定は完了です。
が、このままOSを起動すると以下の STOPエラー が表示されることがあります(見ずらい画面ですいません)。
STOP 0x0000007B INACCESSABLE_BOOT_DEVICE
詳細はこちらをご覧ください。COMPUTERWORLDさんのサイトにも詳しく対処法が掲載されており、MSのKBよりもわかりやすいかもしれません。
COMPUTERWORLD Windows 7の仮想ハードディスクがスゴイ!─(4)https://www.computerworld.jp/topics/win7/151889-2.html
対処するには、Hyper-V上でWindows 7を立ち上げ、以下の通りレジストリを修正します。
![]()
キー:HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Msahci
値の名前:Start
値:0
4.Hyper-V上の仮想OSをシャットダウン
Hyper-V上で動作している仮想OSをシャットダウンしておきましょう。
以上で設定は完了です。
コンピューターを再起動すると、ブートメニューには先ほど追加したメニュー(今回は「Winodws 7 – VHD Boot 」)が追加され、これを選択するとこれまでHyper-Vで使用していたゲストOSをVHD Bootで起動することができます。
起動後はデバイスドライバのインストールが自動的に行われます。