Hatena::ブログ(Diary)

不完全なマシマロ このページをアンテナに追加 RSSフィード Twitter

2009 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2010 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2011 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2012 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2013 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2014 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2015 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2016 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2017 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2038 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
ネット上に転がってる情報をおいしく頂きつつお裾分け。
お勉強メモとして始めて早5年、今となってはただ黒歴史を綴るだけの雑記。
ご利用は自己責任でお願いします。

2011-09-25

Windows Vista/7 の bootmgr と BCD を編集する / Windows Boot Manager

| 01:34 | Windows Vista/7 の bootmgr と BCD を編集する / Windows Boot Managerを含むブックマーク Windows Vista/7 の bootmgr と BCD を編集する / Windows Boot Managerのブックマークコメント

はじめに

Windows Vistaと7で採用されているbootmgrのエントリが吹っ飛んだときの修復作業のまとめです。


Windows Recovery Environment (回復環境) の修復手順に関するヒントなどを扱っています。

各種編集の際には、後述するWinREを使用して下さい。WinREは、DVDなどから起動される事をお勧めします。

注意事項

OSのバージョンは合わせる (Vista/2008, 7/2008 R2)

Service Packのバージョンも合わせる (※ちょっとめんどいけど非常に重要)

SPのバージョンが一致してない状態で修復をかけると、BCDを破損させます‥。

やらかした後は本当に後が大変でした‥1日作業になるので絶対に守って下さい。後で必ず痛い目見ます。

参考リンクと関連ツール

http://technet.microsoft.com/ja-jp/library/cc721886(WS.10).aspx

TestDisk - パーティションの回復ツール。「TestDisk」の使い方なども参照。


前提知識

Windows Vista(Windows Server 2008), Windows 7(Windows Server 2008 R2)

これらのOSは、ブートローダというかマネージャとして Windows Boot Manager が使用されています。

NT OS Loader

Windows NT, 2000, XPで使用された NT OS Loader では、その実体が「NTLDR」として、また設定ファイルが「boot.ini」に格納されていました。これらは、Windowsから認識可能な第1パーティション上のルートディレクトリに格納されます。つまり、大抵の場合はCドライブです。

Windows Boot Manager

Windows Boot Managerでは、その実体が「bootmgr」として、設定ファイルが「BCD」と呼ばれる、構造を持つバイナリファイルに格納されています。

ここで扱うのは、Legacy BIOS環境においてMBRフォーマットされたドライブのみで、EFI環境又はGPTフォーマットされたドライブについては取り扱いません。

UUID (汎用一意識別子)

UUIDも参照。

Windows Vista/7では、通常の起動手順と、休止モード等からの復旧が別々に定義されており、OSを複数インストールする場合はともかく、OSを単体インストールしているだけでもBCDへの起動エントリは複数登録されます。

これらを区別する為に、Windows Boot Managerでは登録エントリをUUIDで管理します。ここでは、「そのような識別子が存在する」という程度に理解しておけば良いと思います。

EFI領域 (システム予約領域)

Windows 7(Windows Server 2008 R2)の場合、インストールの際にシステム用のパーティションを区切ると(区切らなくても自動的に)、「システムで予約済み」という名前で100MBのパーティションが先頭に作成されます。

Windows Vistaの場合、プリインストールされた一部のOEM製品においては、同様のパーティションが先頭に作成されています(※Windows Server 2008は検証していません)。それ以外のWindows Vista(Windows Server 2008)、つまりインストールディスクを用いてインストールされた環境では、この「システム予約領域」は作成されません。


主な構成

今回は、UEFIによる起動管理を使用しない場合における、Windows Boot Managerのファイル構成等を示します。

Windows Boot Manager

ここには、「Windows Boot Manager」の実体として、次のファイルが格納されています。それぞれシステム・隠しファイル属性を持っている為、コマンドプロンプトからの編集・管理の際はattribコマンドなどを用いて属性を変更する必要があります。

・bootmgr - Windows Boot Managerの実体です。NT OS LoaderにおけるNTLDRに相当します。

・boot\ - Windows Boot Managerが使用するファイル群が格納されたディレクトリです。特に各種の言語ファイルが格納されています。

・boot\ja-JP\ - Windows Boot Managerの言語ファイルの一例です。

・boot\BCD - Windows Boot Managerが管理する、起動エントリを含む構造体バイナリファイルです。NT OS Loaderにおけるboot.iniに相当します。

※ 似たような名前でBCDバックアップファイルが格納されている事があります。これらは編集順に全て格納されるようですので、トラブルの際は、必要に応じてこれらを「BCD」に上書きコピーすると良いかもしれません(元のファイルもバックアップコピーしておく事)。

編集・管理の際は次のコマンドが使えると思います。

(基本)

bcdedit.exe - BCDのエントリ書き換えを行う

bootrec.exe - BCDを含むブートレコードの修復・再構築を行う

(応用)

bootsect.exe - ブートレコードの書き換えを行う

attrib.exe - BCDファイルの操作等における属性変更に使用

編集・管理の際は、次のコマンドラインオプションが使えると思います。

bcdedit /enum all /v - BCDの登録エントリを全て表示する。

bcdedit /set {UUID} hoge fuga - {UUID}のhogeの値をfugaに設定する。

(例) bcdedit /set {UUID} description "Windows Recovery Environment"

{UUID}を持つ登録エントリについて、descriptionの値に"Windows Recovery Environment"を設定します。

bcdedit /deletevalue {UUID} hoge - {UUID}の値を削除します。

Windows Recovery Environment

ここでは「WinRE」と表記します。日本語では「Windows 回復環境」と訳され、正常な起動を妨げる可能性のあるエラーの診断・復元を補助するツールから成る、Windows PEベースの回復環境です。

EFI領域が存在する環境では、(EFI領域ではなく)Windows システムボリューム上のルートディレクトリに「Recovery」というディレクトリが存在します。この下にUUIDの名前を持つディレクトリを一つ挟んで「Winre.wim」と「boot.sdi」といった名前でファイルが存在します。前者がWinREの実体です。

原則としてインストールディスクの修復オプションから、またEFI領域が存在するWindowsでは、起動オプションから呼び出すことができます。


設定例

下記はbcdeditで登録エントリを表示した場合の例です。

仮想マシン上でWindows 7インストールした直後のものを掲載していますので、修復の際に参考にして頂いたらと思います。

尚、UUIDは環境により異なりますので、あくまで参考程度に使用して下さい。

C:\Windows\system32>bcdedit /enum all /v

Windows ブート マネージャー

--------------------------------

identifier {9dea862c-5cdd-4e70-acc1-f32b344d4795}

device partition=Z:

description Windows Boot Manager

locale ja-JP

inherit {7ea2e1ac-2e61-4728-aaa3-896d9d0a9f0e}

default {15755bdf-e70d-11e0-8f17-e473cdac8334}

resumeobject {15755bde-e70d-11e0-8f17-e473cdac8334}

displayorder {15755bdf-e70d-11e0-8f17-e473cdac8334}

toolsdisplayorder {b2721d73-1db4-4c62-bf78-c548a880142d}

timeout 30

Windows ブート ローダー

--------------------------------

identifier {15755bdf-e70d-11e0-8f17-e473cdac8334}

device partition=C:

path \Windows\system32\winload.exe

description Windows 7

locale ja-JP

inherit {6efb52bf-1766-41db-a6b3-0ee5eff72bd7}

recoverysequence {15755be0-e70d-11e0-8f17-e473cdac8334}

recoveryenabled Yes

osdevice partition=C:

systemroot \Windows

resumeobject {15755bde-e70d-11e0-8f17-e473cdac8334}

nx OptIn

Windows ブート ローダー

--------------------------------

identifier {15755be0-e70d-11e0-8f17-e473cdac8334}

device ramdisk=[C:]\Recovery\15755be0-e70d-11e0-8f17-e473cdac83

34\Winre.wim,{15755be1-e70d-11e0-8f17-e473cdac8334}

path \windows\system32\winload.exe

description Windows Recovery Environment

inherit {6efb52bf-1766-41db-a6b3-0ee5eff72bd7}

osdevice ramdisk=[C:]\Recovery\15755be0-e70d-11e0-8f17-e473cdac83

34\Winre.wim,{15755be1-e70d-11e0-8f17-e473cdac8334}

systemroot \windows

nx OptIn

winpe Yes

custom:46000010 Yes

休止状態からの再開

--------------------------------

identifier {15755bde-e70d-11e0-8f17-e473cdac8334}

device partition=C:

path \Windows\system32\winresume.exe

description Windows Resume Application

locale ja-JP

inherit {1afa9c49-16ab-4a5c-901b-212802da9460}

filedevice partition=C:

filepath \hiberfil.sys

pae Yes

debugoptionenabled No

Windows メモリ テスター

--------------------------------

identifier {b2721d73-1db4-4c62-bf78-c548a880142d}

device partition=Z:

path \boot\memtest.exe

description Windows メモリ診断ツール

locale ja-JP

inherit {7ea2e1ac-2e61-4728-aaa3-896d9d0a9f0e}

badmemoryaccess Yes

EMS 設定

--------------------------------

identifier {0ce4991b-e6b3-4b16-b23c-5e0d9250e5d9}

bootems Yes

デバッガー設定

--------------------------------

identifier {4636856e-540f-4170-a130-a84776f4c654}

debugtype Serial

debugport 1

baudrate 115200

RAM 不良

--------------------------------

identifier {5189b25c-5558-4bf2-bca4-289b11bd29e2}

グローバル設定

--------------------------------

identifier {7ea2e1ac-2e61-4728-aaa3-896d9d0a9f0e}

inherit {4636856e-540f-4170-a130-a84776f4c654}

{0ce4991b-e6b3-4b16-b23c-5e0d9250e5d9}

{5189b25c-5558-4bf2-bca4-289b11bd29e2}

ブート ローダー設定

--------------------------------

identifier {6efb52bf-1766-41db-a6b3-0ee5eff72bd7}

inherit {7ea2e1ac-2e61-4728-aaa3-896d9d0a9f0e}

{7ff607e0-4395-11db-b0de-0800200c9a66}

ハイパーバイザー設定

-------------------

identifier {7ff607e0-4395-11db-b0de-0800200c9a66}

hypervisordebugtype Serial

hypervisordebugport 1

hypervisorbaudrate 115200

再開ローダー設定

--------------------------------

identifier {1afa9c49-16ab-4a5c-901b-212802da9460}

inherit {7ea2e1ac-2e61-4728-aaa3-896d9d0a9f0e}

デバイス オプション

--------------------------------

identifier {15755be1-e70d-11e0-8f17-e473cdac8334}

description Ramdisk Options

ramdisksdidevice partition=C:

ramdisksdipath \Recovery\15755be0-e70d-11e0-8f17-e473cdac8334\boot.sdi

C:\Windows\system32>

トラックバック - http://d.hatena.ne.jp/naba_san/20110925/1316968494