Windows-Boot-Repair
update 2018-07-05

要約
ブート出来ないWindowsを修復する。
システムパーティショ ンやブート構成フォルダ/ファイルが障害を起こした場合の修復方法をまとめたものである。
ディスク(HDDやSSD)に障害が発生している場合は修復できない。(ディスクを交換してWindowsをインストールし直す必要がある)

環境
Windows10 / 8 / 7
MBRディスクのパーティション
mbr-disk.jpg
システムパーティション:システムで予約済み領域にbootmgrファイルやBoot\BCDファイルがある。
ブートパーティション:Windowsインストール領域にWindows ブートローダ(\WINDOWS\system32\winload.exe)がある。

GPTディスクのパーティション
gpt-disk.jpg
作業手順
インストールメディアでPC起動して、「コンピュータを修復する」(Repair your computer)を選択して行なう。
※「言語選択」画面で「Shift + F10」を押して「コマンドプロンプト」画面で作業してもいい。

1)まずは「スタートアップ修復」で修復できるかどうかを試す。
「コンピュータを修復する」/オプション選択 にて「トラブルシューティング」/「スタートアップ修復」を行なう。
「スタートアップ修復」で修復できない場合は、以下のように「コマンドプロンプト」で作業する。

2)BOOTに関連する修復を行なう
Bootrec.exe ツールを使用する。
※bootrecを実行してもエラーが発生する場合は、下記の 3)へ進む。
X:\Sources> bootrec /FixMbr  // MBRを上書きする(partition tableは変更しない)。
※UEFIシステムの場合はMBRは関係ない。
X:\Sources> bootrec /FixBoot  // ブートセクターをシステムパーティションに上書きする
X:\Sources> bootrec /ScanOs   // Windowsがインストールされているのにブート マネージャーのメニューが表示されない場合は、このオプションを使用する。
X:\Sources> bootrec /RebuildBcd  // BCD ストアを再構築する必要がある場合にこのオプションを使用する。

3)ブート構成データ(BCD)を作り直す
BCD ストアを再構築してもスタートアップの問題が解決しない場合は、下記のように
BCD ストアをエクスポートし、名前変更(バックアップ)してbootrec /RebuildBcdをもう一度実行してみる。

X:\Sources> bcdedit /export C:\BCD.old //ブート構成データ(\Boot\BCDファイル)の内容をエクスポートする。
この例では ドライブC:はシステムパーティション(システムで予約済み領域)のことである。
X:\Sources> cd /d c:  //ドライブC:に移って作業する。
c:\> cd Boot //Bootフォルダに移る
※Bootフォルダをdirコマンドで照会しても、BCDファイルが表示されていない場合は、BCDファイルの隠し属性を変更することでBCDファイルが表示される。
c:\Boot> attrib BCD -s -h -r //BCDファイルの隠し属性を変更する。
c:\Boot> ren c:\Boot\BCD BCD.old //バックアップのために名前を変更
c:\Boot> bootrec /RebuildBcd //BCDを新規作成

4)EFI/GPTシステムの場合のBCD(ブート構成データ)修復作業
PCのBIOS設定で「CSM」および「Secure Boot」はDisabled にしておく。
インストールメディアでPC起動してコマンドプロンプトにて作業する。
「コンピュータを修復する」/オプション選択 にて「トラブルシューティング」/「コマンドプロンプト」を選択する
X:\Sources> diskpart //diskpartを実行
DISKPART> list disk
DISKPART> select disk 0 //修復したいwindowsのdisk番号を指定
DISKPART> list volume
ここでEFIパーティション(ESP)とwindowsをインストールしたパーティション(Boot partition)を確認できる

EFIパーティションにはBOOTSTRAPが書かれている。
EFIパーティションはFAT32の100MB程度のパーティションである。

ここでVolume番号をメモしておく(ここではVolume 3 であるものとする)
windowsパーティションは\windowsフォルダのあるパーティションである。
EFI volumeを操作する必要があるので、下記のようにドライブレターを付与する。

DISKPART> select volume 3 //EFI volumeを選択する。
DISKPART> assign letter=S //EFIパーティションにドライブレターを割り当てる(ここではSとしている)
※ドライブレター削除は remove letter=S
DISKPART> exit //DISKPART終了
コマンドプロンプト画面になるので
X:\Sources> cd /d S:\EFI\Microsoft\Boot\  //\Bootフォルダに移る(Bootフォルダ内ににBCDファイルがある)
S:\EFI\Microsoft\Boot> bootrec /fixboot  //新規にboot sector を作成
S:\EFI\Microsoft\Boot> ren BCD BCD.old  //BCDファイルをバックアップ用として名前変更しておく
S:\EFI\Microsoft\Boot> bcdboot W:\Windows /l ja-jp /s S: /f ALL  //BCDを作成する。
※W:はwindowsブートパーティションのドライブレター
PC再起動してWindowsが正常に起動することを確認する。



5)BIOS/MBRシステムの場合のBCD(ブート構成データ)修復作業
インストールメディアでPC起動してコマンドプロンプトにて作業する。
X:\Sources> diskpart
DISKPART> list disk
DISKPART> select disk 0  //修復したいwindowsのdiskを選択
DISKPART> list volume
ここですべてのドライブレターが確認できる(システムpartition ,ブートpartitionのドライブレターを確認しておく)
DISKPART> exit  //DISKPART終了

コマンドプロンプト画面になるので
X:\Sources> bootrec /fixboot  //新規にboot sector を作成
X:\Sources> cd /d c:   //ドライブc:に移る。
c:\> cd Boot  //Bootフォルダに移る
C:\Boot> ren BCD BCD.old  //BCDファイルをバックアップ用として名前変更しておく
C:\Boot> bcdboot W:\Windows /l ja-jp /s S: /f ALL  //BCDを作成する。
※Sはシステムパーティションのドライブレター(ここではSとしている)
※W:はwindowsブートパーティションのドライブレター
PC再起動してWindowsが正常に起動することを確認する。



参考
システムで予約済み領域(System Reserved)の照会
DISKPART> list disk 
DISKPART> select disk 0  //システムで予約済み領域は disk 0 にあるものとする
DISKPART> list volume  //volumeを表示
DISKPART> select volume 0  //System Reserved 領域はvolume 0 にあるものとする
DISKPART> assign letter=S  //ドライブレター S を割り当てる
DISKPART> exit
この時点でドライブ S の内容を照会できる
※ドライブレターを削除する場合は remove letter=Pを入力


end of list