ブート構成データ(BCD)ストアを理解すれば VHDブート は簡単

追記 2009年10月27日 Boot.ini と BCDのパラメタ対応表(ページ最後尾をご参照ください)

XPモードが使いたくて、Windows7 環境を Hyper-V から VHD ブートに移行しようとしたら、なんか手順がわかりずらいんですけど(半切れ)。

そんな方、結構いらっしゃるんじゃないでしょうか?あれ?私だけ?(恥)

原因は何かといえば、「ブート構成データストア(BCDストア)」についてきちんと理解していなかったことが原因でした。古くからの利用者(私ですが)は Boot.ini に慣れてますからねぇ。

ということで、同朋が存在することを期待し、VHD Boot への移行手順を説明する前に BCDストアについて簡単に解説しておきます。

参考文献:Boot Configuration Data in Windows Vista
https://www.microsoft.com/whdc/system/platform/firmware/bcd.mspx

参考サイト:ブート構成データ エディタに関してよく寄せられる質問
https://technet.microsoft.com/ja-jp/library/cc721886(WS.10).aspx

BCDストアは、簡単に言えば従来のBoot.ini に代わるブート構成情報のことです。Boot.iniはテキストファイルとして提供されていましたが、BCDはレジストリハイブ(HKLM 直下の BCDxxxxxxxxキーにロードされる)に格納されています。

ただし、Regedit等を使用してエントリを直接操作することはできません。BCDxxxxxxxxキー配下のアクセス権をご覧いただくとわかりますがSYSTEMアカウントにのみ編集権が与えられています。よって、ユーザーが編集するには、BCDEditコマンドやWMIを使用したスクリプトで操作する必要があります。

BCDストアの構造は以下の通りです。

BCDStore

上の図と、以下の Boot.ini ファイルを見比べてみてください。表現方法は変わりましたが、BCDストアのやりたいことはなんとなく見えますよね。

[boot loader] timeout=30 default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS [operating systems] multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows .NET Standard Server" /fastdetect multi(0)disk(1)rdisk(0)partition(2)\WINDOWS="Microsoft Windows XP Professional"

重要なのは、「Windows Boot Manager」と「Windows Boot Loader」です。

ブートの順番を変えたり、待ち時間を変えたりするには、Windows Boot Manager オブジェクトを編集します。これはBoot.iniの[boot loader]に相当するものです。

新しいOSのブート情報を追加したり、いらなくなったOSのブート情報を削除するには、Windows Boot Loaderオブジェクトを操作します。通常は1つのOSにつき1つの Boot Loaderオブジェクトに対応していますが、boot.ini でやっていたように、起動環境(使用するCPUコアの数やメモリ使用量、デバッグモード等)を変えて複数の Boot Loaderオブジェクトを持つことも可能です。

では、BCDストアを編集するにはどうしたらよいか?といえば、通常はBCDEdit.exe というコマンドラインツールを使用します。

ためしに、Vista/2008以上のOSで、コマンドプロンプトから BCDEDIT と入力してみてください。以下のような情報が表示されるはずです。

image

BCD Storeに格納されるBCDオブジェクトのタイプは3種類あります。

  • Application
  • Inheritable
  • Device

通常の運用で管理者が編集しなければならない「Windows Boot Manager」や「Windows Boot loader」「Ntldr」などは、いずれもApplicationタイプに属します。

上の画面ショットには、Windows Boot Managerのオブジェクト1つと、Windows Boot Loader オブジェクトが1つ表示されていることがわかります。この場合、何もしなければブートメニューは表示されず、唯一のWindows Boot Loaderオブジェクトである「Windows Server 2008 R2」が、C:\Windows\System32\Winload.exe を使用して起動します。

Windows Boot LoaderオブジェクトやWindows Boot Managerオブジェクトに用意されているパラメタを詳しく調べるには以下のサイトが参考になりますが…英語だし、しかも開発情報なんですよね…

Boot Manager に用意されているパラメタ(エレメント)
https://msdn.microsoft.com/en-us/library/aa362641(VS.85).aspx

OS Loaderに用意されているパラメタ(エレメント)
https://msdn.microsoft.com/en-us/library/aa362670(VS.85).aspx

そこで、ちょちょいと調べるのであれば MSConfig ツールをお勧めします。

image image

GUIを少しずつ変えながら、BCDEDITを実行しながらパラメタが変わった様子を確認できます。

追記 2009.10.27

以下のページに、Boot.ini と BCD のパラメタ対応表が掲載されています

BCD Boot Options Reference
https://msdn.microsoft.com/en-us/library/aa906217.aspx