Welcome to TechNet Blogs Sign in | Join | Help

フィールドSEあがりの安納です

Microsoft Evangelist -- Junichi Anno

News

  • 愛の戦士ですが何か?




    Twitter Updates
      follow me on Twitter

      Tech
    Hyper-V から VHD Boot への移行

    前回は、従来の Boot.ini にかわる新しいブート構成情報の格納庫である BCDストア について簡単に解説しました。

    ブート構成データ(BCD)ストアを理解すれば VHDブート は簡単
    http://blogs.technet.com/junichia/archive/2009/10/26/3289120.aspx

    これを踏まえ、Hyper-V 上に作成してあるVHDファイルを、VHD Bootに移行してみます。何を行っているのかが理解しやすいように、ショートカット的な作業は一切行っていません。

    1. VHD Boot 用の Boot Loader オブジェクトを作成する

    前回の解説でも触れていますが、新しいOSをブートできるようにするには、Boot Loader オブジェクトを新たに作成し、BCDストアに保存してあげる必要があります。図にすれば、以下のようなイメージです。

    BCDStore2

    Boot Loader オブジェクト image を作成するには、コマンドプロンプトから以下のように入力します。

    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 “ と書かれたエントリがあることを確認してください。

    image

    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です。

     image

    3.AHCIドライバ(Msahci.sys)を有効にする

    全項までで、ひとまずVHDブートに関する設定は完了です。

    が、このままOSを起動すると以下の STOPエラー が表示されることがあります(見ずらい画面ですいません)。

    STOP 0x0000007B INACCESSABLE_BOOT_DEVICE

    詳細はこちらをご覧ください。COMPUTERWORLDさんのサイトにも詳しく対処法が掲載されており、MSのKBよりもわかりやすいかもしれません。

    COMPUTERWORLD Windows 7の仮想ハードディスクがスゴイ!─(4)http://www.computerworld.jp/topics/win7/151889-2.html

    対処するには、Hyper-V上でWindows 7を立ち上げ、以下の通りレジストリを修正します。

    image 
    キー: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で起動することができます。

    起動後はデバイスドライバのインストールが自動的に行われます。

    Posted: Monday, November 02, 2009 3:03 PM by junichia

    Comments

    No Comments

    Anonymous comments are disabled
    Page view tracker