2011.6.8 ちょこちょこ追記
知ってる「つもり」でいるとイザという時にドツボにはまりそう。
結論からまとめとくと
- Vista 以降ではNTシグネチャを消すとWindows は起動しなくなる
- Vista 以降ではNTシグネチャが自動修復されない
- 「スタートアップ修復」で修復できる
- 「スタートアップ修復」では、7/XPのデュアルブートはBOOTMGR→NTLDRのチェインロードとなる
- NTシグネチャを消してしまうツールに注意、Vista 以降があるPCでは使ってはいけない
fdisk /mbr
(MS-DOS, FreeDOS)install-mbr
(Linux など)- TestDisk バージョン 6.12 までの MBR Code
ms-sys -z
,ms-sys --mbrzero
(Linux など)
「NTシグネチャ」って何?
MBR内のブートストラップの後方、パーティションテーブルの手前、0x1B8から0x1BBの4バイトのこと、Windows のブートに関わる重要な情報、ドライブ文字などが書かれてるようでおま。Windows 以外のOSではなんにも関係がないとか。
- 自作 Windows 7
ADDRESS 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F --------------------------------------------------------- 000001B0 65 6D 00 00 00 63 7B 9A 99 1F 21 F3 00 00 80 20 000001C0 21 00 07 DF 13 0C 00 08 00 00 00 20 03 00 00 DF 000001D0 14 0C 07 FE FF FF 00 28 03 00 00 90 A0 0C 00 FE 000001E0 FF FF 07 FE FF FF 90 BF A3 0C 00 00 35 0C 00 FE 000001F0 FF FF 0F FE FF FF 1D F1 D8 18 93 91 AC 31 55 AA
正式な名前ではない模様で「Disk identifier」「Disk MBR signature」とか「volume information」なんて書かれてることもあります。シグネチャと呼ぶとブート・シグネチャと近藤勇さんしそうなので「Disk ID」とかな方がわかりやすいかも。
- レジストリで確認
C:\Users\yassy>reg query HKLM\SYSTEM\MountedDevices /v \DosDevices\C: HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices \DosDevices\C: REG_BINARY 991F21F30000500600000000
- DISKPART コマンド (2桁区切りで逆並び)
DISKPART> select disk 0 ディスク 0 が選択されました。 DISKPART> detail disk WDC WD6400AAKS-00A7B2 ATA Device ディスク ID: F3211F99 種類 : ATA 状態 : オンライン パス : 0 ターゲット : 0 LUN ID : 0 場所のパス : PCIROOT(0)#PCI(1F02)#ATA(C00T00L00) 現在の読み取り専用状態: いいえ 読み取り専用 : いいえ ブート ディスク : はい ページ ファイル ディスク : はい 休止状態ファイル ディスク : いいえ クラッシュ ダンプ ディスク : はい クラスター化ディスク : いいえ Volume ### Ltr Label Fs Type Size Status Info ---------- --- ----------- ---- ---------- ------- --------- -------- Volume 1 システムで予約済み NTFS Partition 100 MB 正常 システム Volume 2 C NTFS Partition 101 GB 正常 ブート Volume 3 E backup NTFS Partition 97 GB 正常 Volume 4 D data NTFS Partition 397 GB 正常
XPでは、これを消してしまうと Windows 上で変更したドライブ文字などが元に戻ってしまったりします。
Vista 以降ではXP以前とは違い、なんと起動できなくなってしまうようでありまする。
Σ(゜д゜lll)ガーン
但し、これについて問題になるのはHDの引っ越しやパーティション・イメージのコピー時などだけではないかと思います。ツール側で対応していないこともある様なので注意しておきませう。
Vista以降のWindows OS(Vista, Server 2008, 7)では、従来OS(NT, 2000, Server 2003)とはブート方式が変更されたことに伴い、起動時に「NTシグニチャ」がクリアされていることを検知した際の振る舞い(仕様)が変更されました。
従来OSでは起動時に「NTシグニチャ」がクリアされていることを検知した場合、その起動処理の中で、そのハードディスクに新たな「NTシグニチャ」を書き入れていました。いわばOS本体の中に“NTシグニチャ自動修復機能”のようなものがあったわけです。
Vista以降のOSでは仕様が変更され、OS本体から“NTシグニチャ自動修復機能”は取り去られてしまいました。起動時に「NTシグニチャ」がクリアされていることを検知した場合、起動処理はそこで中止し、ユーザに「スタートアップ(環境の)修復」の実行を促す形となりました。ユーザが「スタートアップ修復」をおこなうと、その過程で新たな「NTシグニチャ」が当該ディスクに書き込まれます。
- 自作 Windows XP
ADDRESS 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F --------------------------------------------------------- 000001B0 00 00 00 00 00 2C 44 63 41 44 42 44 00 00 80 01 000001C0 01 00 07 FE FF FE 3F 00 00 00 03 9A 20 03 00 00 000001D0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FE 000001E0 FF FE 07 FE FF FE 42 9A 20 03 76 16 71 02 00 FE 000001F0 FF FE 0F FE FF FE B8 B0 91 05 BF 98 9A 0D 55 AA
- DELLの Windows 7
ADDRESS 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F --------------------------------------------------------- 000001B0 65 6D 00 00 00 63 7B 9A 00 00 00 90 00 00 00 01 000001C0 01 00 DE FE 3F 07 3F 00 00 00 C9 F5 01 00 80 08 000001D0 01 08 07 FE FF FF 00 F8 01 00 00 F0 03 01 00 FE 000001E0 FF FF 07 FE FF FF 00 E8 05 01 7A C3 92 0C 00 FE 000001F0 FF FF 0F FE FF FF 00 B0 98 0D 00 A8 9F 2C 55 AA
スタートアップ修復(自動修復)
- Linux 使える方なら...
-
Windows PE の regedit コマンドなどでIDを確認、で Linux の dd コマンドで MBRをバックアップ、バイナリ編集して dd で書き戻し、とかでもイケるかもしれない。
VMware Player 上で確認したところ、書き戻し直後の起動でスタートアップ修復を促す画面が出ましたが、通常起動を選択して起動できました。
NTシグネチャの修復は「スタートアップ修復」で可能。スタートアップ修復は「システム回復オプション」に含まれる。システム回復オプションとはいわゆる Windows RE(Windows 回復環境)のこと。
起動関連の問題が発生した場合に自動起動したりする模様 Windows RE を起動させると「自動修復」機能が動くようです(サーバー版除く)。自動起動できない場合は以下のいずれかの方法で。
※ というか、自動でだめな場合は「スタートアップ修復」のみでは修復不可ということかも。後述の「失敗する場合」の確認が必要かも。
- Windows インストールDVDでブートして「コンピューターを修復する」
- Windows 7 の「システム修復ディスク」でブート
- 起動時にブートメニューを出して「コンピューターの修復」を選択(Vista では標準ではインストールされないがメーカー製PCの多くはインストール済)
- NTシグネチャ消去時には起動できるのかどうか?多分だめ
インストールファイルがHD上にあるなら PE でブートして Setup.exe を実行
- 「スタートアップ修復」に失敗する場合は
-
あるいは、自動修復実行後も起動できない場合とかも。
「スタートアップ修復」に失敗する場合は下記も試すべし
- アクティブ設定の確認
- BootRecコマンドの実行(インストールDVD or Windows RE をブート)
bootrec /fixmbr
- MBR(のブートストラップ)修復bootrec /fixboot
- PBR(へBOOTMGR-IPL)書き込みbootrec /rebuildbcd
- BCD(BOOTMGR設定)ファイル修復
- 起動確認
- だめなら再度「スタートアップ修復」で確認
- Windows 回復環境で Bootrec.exe ツールを使用して Windows Vista でのスタートアップの問題をトラブルシューティングして修復する方法
- Error message when you start Windows Vista: "The Windows Boot Configuration Data file is missing required information"(機械翻訳)
- 注意 : USBメモリ挿してるとあかん場合があるんやと
- こんなマルチブート環境では問題が出るかも
-
ちょっと特殊な環境かな
- 一例 : 1stブートローダーから1回の選択で下記をブートさせている
- C:\ NTLDR から XPブート
- D:\ BOOTMGR から 7ブート
こんな場合に「スタートアップ修復」を使うと問題が出るようであります。1stブートローダーから Windows を選択後に Windows のブートメニューが表示され再度選択が必要になってしまうというかんじ。
「『スタートアップ修復』の処理中に複数のWindowsシステムドライブを検出した場合に“マイクロソフト的な初期状態”に変更されてしまう」と書きましたが、これはマルチブート環境を二段階ブートに統一してあって、複数のWindowsのうちどれが壊れようが消されようが、他のWindowsは一切影響受けずに問題なく起動が可能な(理想的な)マルチブート環境に構築してあったとしても、「スタートアップ修復」をおこなうと“そういう状況”は一切無視され、一つのWindowsパーティションから別のWindowsがパーティションが呼び出されるという、Windows OSどうしの独立性の低い(依存性の高い)、マイクロソフト的なマルチブート環境に勝手に作り変えられてしまうということです。
- 一例 : 1stブートローダーから1回の選択で下記をブートさせている
実験してみたお
あくまで一例なんで参考程度にしといてください。。。
- 確認環境 :
- VMware Player 3
- Windows 7 Enterprise 評価版 x86 SPなし
まずは、dd.exe でMBR(など)をバックアップ
dd if=\\?\Device\Harddisk0\Partition0 of=mbr2050.bin bs=512 count=2050
- 元のNTシグネチャ
ADDRESS 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F --------------------------------------------------------- 000001B0 65 6D 00 00 00 63 7B 9A 15 6C 99 D1 00 00 80 20 000001C0 21 00 07 DF 13 0C 00 08 00 00 00 20 03 00 00 DF 000001D0 14 0C 07 FE FF FF 00 28 03 00 00 00 80 07 00 FE 000001E0 FF FF 07 FE FF FF 00 28 83 07 00 D0 7C 0C 00 00 000001F0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 55 AA
Ubuntu LiveCD でブートして install-mbr 実行。NTシグネチャは 00 00 00 00
になってしまいました。パーティションテーブルの直前446バイト目まで上書きされました。
ADDRESS 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F --------------------------------------------------------- 000001B0 00 02 90 C7 12 00 80 00 00 00 00 00 A8 01 80 20 000001C0 21 00 07 DF 13 0C 00 08 00 00 00 20 03 00 00 DF 000001D0 14 0C 07 FE FF FF 00 28 03 00 00 00 80 07 00 FE 000001E0 FF FF 07 FE FF FF 00 28 83 07 00 D0 7C 0C 00 00 000001F0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 55 AA
HDから再起動すると「windows ブート マネージャー」のエラー画面が出ます。起動時にF8(F5)キーを押してもブートメニューは出ないので何も起動できません。
システム修復ディスクのCDからブートするとキーボードなどの選択後に自動修復機能が動くようです。
この後、通常起動可能になりました。
ADDRESS 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F --------------------------------------------------------- 000001B0 00 02 90 C7 12 00 80 00 5E F4 D7 3F A8 01 80 20 000001C0 21 00 07 DF 13 0C 00 08 00 00 00 20 03 00 00 DF 000001D0 14 0C 07 FE FF FF 00 28 03 00 00 00 80 07 00 FE 000001E0 FF FF 07 FE FF FF 00 28 83 07 00 D0 7C 0C 00 00 000001F0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 55 AA
- NTシグネチャ書き込み
- 変更、丸っきり元の状態に「復元」するのではなく「修復」ということかな
- システムで予約済み領域にバックアップ(?) \Boot\BCD.Backup.0001 作成
- ブートストラップは書き込みなし(install-mbrのものと同じまま)
※ Windows 標準のブートストラップに戻すには bootrec または bootsect コマンド(※ PE2.1, Vista SP1以降)の実行が必要。
bootrec /fixmbr
または bootsect /nt60 sys /mbr
を実行するとMBRのブートストラップ部分440バイトが上書きされました。
ADDRESS 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F --------------------------------------------------------- 000001B0 65 6D 00 00 00 63 7B 9A 5E F4 D7 3F A8 01 80 20 000001C0 21 00 07 DF 13 0C 00 08 00 00 00 20 03 00 00 DF 000001D0 14 0C 07 FE FF FF 00 28 03 00 00 00 80 07 00 FE 000001E0 FF FF 07 FE FF FF 00 28 83 07 00 D0 7C 0C 00 00 000001F0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 55 AA
- MBR446バイトをクリアすると
-
- ブートストラップがないのでHDからは何も起動しない
- REを起動させると自動修復が実行されたがブートストラップがない為、何も起動しない(GRUBなどでPBRのからの起動は可)
- NTシグネチャは書き込みされたがMBRにブートストラップがない為、何も起動しない(GRUBなどでPBRのからの起動は可)
bootrec /fixmbr
実行でMBRから起動可能になった
- 修復後に問題発生?
-
要確認かな。
元々異常があったのかもしれませんが、HD上のRE(「コンピューターの修復」)が起動できなくなりました。F8キー連打でメニューは出ますが選択してもエラーとなってしまうのです。
いちお解決しましたが...
ブートストラップを上書きするツールについて
XP マシン用にはよく使ってたツールのあれこれ。Linux と マルチブートしているユーザは覚えておくべきかも。
- 使うと危険なツール
-
下記コマンドはMBRの446バイトを上書き、NTシグネチャをクリアしてしまいます。Vista 以降のPCで使ってしまうと
起動しないお!Σ(゜д゜lll)ガーン となりまつ。fdisk /mbr
(MS-DOS, FreeDOS)install-mbr
(Linux など)- TestDisk バージョン 6.12 までの MBR Code (※ バージョン 6.13 では修正されてるかも?)
ms-sys -z
,ms-sys --mbrzero
(Linux など)
Ubuntu のフォーラムを覘いてみますと install-mbr で「やってもうた!」な例があるみたいですね。