ブラウザ/OS

claudebot
IPアドレス 44.222.161.54

win7 システムの修復( win10 にも適用できる)


bootに必要な環境を壊してみる

win7でMBRやbootmgr,\boot\bcdを壊すとどのようになるか、システム修復できるか、についてテストしてみた。
※win10 にも適用できる。

boot不可環境でのテストなので、win7起動時に「F8」を押し続けてbootメニューの「コンピュータの修復」を表示させることはできない。
したがって「システム修復ディスク」または「win7インストールDVD」で起動してテストした。
※オリジナルの「システム修復ディスク」に secinspect.exe および dd-win を組み込んだディスクを作成してテストした。
組み込みについては後述の「作業メモ」参照。

HDDの状態
win7インストール後の環境は次のようになっている。
hdd.gif
※インストール時に「システムで予約済み領域(System Reserved)」の無い環境を作成することもできる。
※「システムで予約済み領域(System Reserved)」が無い場合は bootmgr,\boot\bcdは「win7インストール領域」に作成される。

テスト内容と修復結果


テスト内容
起動時に「F8」を押し続けてbootメニューより
「コンピュータの修復」を選択
「システム修復ディスク」または
「win7インストールDVD」を起動して修復
1
MBRのboot strap loader(0-445バイト)をゼロクリアしてみた。

BIOS段階で起動不可になる。(DISK BOOT FAILURE)
boot不可なので、この選択はできない。
「スタートアップ修復」を行うとMBRは修復され、win7は正常に起動するようになった。

2
MBR(512バイト)をゼロクリアしてみた。

BIOS段階で起動不可になる。(DISK BOOT FAILURE)
boot不可なので、この選択はできない。
「スタートアップ修復」を行うとMBRは修復され、win7は正常に起動するようになった。
「スタートアップ修復」ではHDDの全領域を検査して boot partition を判断してboot情報を修復しているようだ。
3
MBR(512バイト)をゼロクリアおよび
bootmgr,\boot\bcdを削除してみた。

BIOS段階で起動不可になる。(DISK BOOT FAILURE)
boot不可なので、この選択はできない。
「スタートアップ修復」するとMBRのみが修復された。
bootmgr,\boot\bcdは修復されないのでシステムは起動不可である。
しかし「システム修復ディスク」起動で下記の処理を行なうと修復できた。
(1)diskpartにてpartitionをactiveにする。
(2)bcdboot.exe c:\windows /l ja-JP を実行する。
(bcdbootにてbootmgr、\boot\bcdが作成される)
-----
別の方法として、システム修復ディスクのbootmgr,\boot\bcdをコピーしてもwin7は正常に起動した。
コピー先は「システムで予約済み領域(System Reserved)」「win7インストール領域」のどちらでも構わない。
4MBRには何も手を付けずに
bootmgr,\boot\bcdを削除してみた。

BIOS段階で起動不可になる。(BOOTMGR is missing)
boot不可なので、この選択はできない。「システム修復ディスク」起動でコマンドプロンプトにて
bcdboot.exe c:\windows /l ja-JP
を実行し、再起動すると正常に起動できた。(bcdbootにてbootmgr、\boot\bcdが作成される)

結論

MBRが壊れても「スタートアップ修復」で回復できる。
boot情報(bootmgr,\boot\bcdなど)が壊れても「システム修復ディスク」にて bcdboot.exeを実行すれば回復できる。

※ MBRクリア後に(diskpartのclean 処理) bootrec.exe を試してみたが、partition情報まで壊れているので復旧しなかった。
bootrec.exe /fixmbr 後にPC起動しても BIOS段階で起動不可。(DISK BOOT FAILURE)
bootrec.exe /fixboot を実行すると「要素が見つかりません」というエラーになる。

作業メモ


MBR(512バイト)の構成
 0-445(446バイト)  ブートストラップローダ(boot strap loader)
 446-509(64バイト)  パーティション テーブル
 510-511(2バイト) ブートシグニチャ

MBRのゼロクリア
diskpart -> 該当HDDをcleanパラメータでゼロクリアした。
MBR形式のHDDの場合、cleanを実行すると512バイトがゼロで埋められる。
※MBR形式でない場合(たとえばUSB-ZIP)はcleanを実行するとpartitionテーブル(64バイト)のみがゼロで埋められる。

bcdboot.exe
bcdboot.exe c:\windows /l ja-JP のように実行すると c:\windows の情報をもとにして、システムpartitionに boot情報(bootmgr,\boot\bcd)を作成してくれる。
boot情報のもとは(source) c:\windowsなのでc:\windowsは正常な状態でなければいけない。
ロケールを省略するとデフォルトで「en-EN」が設定されbootエントリにも設定される。このためWin7起動時のメッセージが「Starting Windows」のように英語表示になる。
オプション「/l ja-JP」のように指定しておけば日本語表示になる。

bootmgr,\boot\bcd の削除、コピー
attribコマンドで属性解除して操作した。
attrib bootmgr -s -h -r (および attrib \boot\bcd -s -h -r)
del bootmgr (および del \boot\bcd)
copy 送り側ファイルpath 受信側フォルダpath
 
その他
「システムで予約済み領域(System Reserved)」に在るbootmgr,\boot\bcdを削除する前に「win7インストール領域」にコピーしておくとwin7は「win7イン ストール領域」に在るbootmgr,\boot\bcdを探すのでbootできてしまう。
したがって、テストはbootmgr,\boot\bcdを削除したままで行なった。

使用したツール ( win10 64bitでも動作確認済み)
コマンドプロンプト。
secinspect.exe マイクロソフトの無償ツール。
dd for windows (446バイトのみをゼロクリアする際に bs=446 count=1 のように使用した)
※ dd.exeは\windows\system32にある次の3つのファイルを使用している。
したがってPATHの通らない環境の場合は同じフォルダにコピーして使用する。(各 dll は\Windows\system32 フォルダに在る)
wow32.dll, apphelp.dll, ntvdm.exe
64bit の場合は wow64.dll, apphelp.dll, ntvdm64.dll 

システム修復ディスクへの組み込み
※ imgburn を使用して組み込んだ。( http://www.imgburn.com/ )
手順の要約は次の通り。
(1)
システム修復ディスクのブートイメージを抽出。
(2)
システム修復ディスクの内容に加えて、
\dd-winフォルダ(dd.exe, wow32.dll, apphelp.dll, ntvdm.exe ファイルから成る。64bitの場合は wow64.dll, apphelp.dll, ntvdm64.dll )
secinspect.exeを追加して、ブートイメージを付与してbootable CDを作成。


システム修復ディスクをUSBメモリに組み込む

(1)Win7で作成したシステム修復ディスク(CD)およびUSBメモリをセットしておく。
(2)コマンドプロンプト->管理者として実行にて diskpart を実行。
※スタートメニューの「プログラム入力欄」に「cmd と入力して Ctrl + Shift + Enter」でも管理者として実行と同じことになる。
(3)diskpartを実行
> diskpart //コマンドプロンプト状態でdiskpartを実行
DISKPART> list disk //disk の状態を確認
※USBメモリがdisk 1 にあるものとする
DISKPART> select disk 1 //USBメモリを選択
DISKPART> clean  //MBRをクリーンにする
DISKPART> create partition primary size=256 //primary領域を作成
DISKPART> list partition //partition の状態を確認
DISKPART> select partition 1 //partition 1 を選択
DISKPART> active //activeにする
DISKPART> format fs=ntfs label="win7repair" quick //NTFSでformat
DISKPART> assign //現在のpartitionにドライブレターが自動的に割り当てられる
DISKPART> list volume //volume のドライブレターの状態を確認
DISKPART> exit //diskpartの終了
> //コマンドプロンプト状態になる
(4)システム修復ディスクを丸ごとUSBメモリにコピー
CD/DVDドライブは d: 、USBメモリは g: であるものとする
> xcopy d:\*.* g:\ /s /h /y //CD媒体の内容を隠しファイルも含めて丸ごとUSBメモリにコピー
> exit //コマンドプロンプトの終了
(5)USBメモリ起動でPCを起動する
---
※USBメモリに任意のツールを組み込む場合は実行ファイルをコピーしておけばいい。