Windows がインストールされている起動可能な NTFS パーティションを別のブロック オフセットに移動する場合、再度起動可能にするには何を更新する必要がありますか?
背景: 必要なアクションを実行するプログラムを書く予定ですそのため、Windows DVD から起動して Microsoft のツールを使用する方法のガイドを探しているわけではありません。代わりに、これらのものを自分で変更する方法が必要です。そうすれば、平均的な PC ユーザーが Windows システムをより大きなハード ディスクに移動するときに、より簡単なソリューションを作成できます。
特に、私が試したのは次のことです。
複数のパーティションを持つディスクがあり、そのうちの 1 つは Windows がインストールされている NTFS パーティションです。ディスクでは、パーティション レイアウトに従来の MBR ブロック 0 を使用しています (パーティションは 4 つ以下)。
次に、新しい、より大きなディスクをフォーマットしてパーティションを作成します。そこで NTFS パーティション用のスペースを確保し、古いディスクの NTFS Windows パーティションの内容をコピーします。そして、パーティションを「アクティブ」にします。
しかし、このディスクから起動しようとすると、すぐに「読み取りエラー」メッセージが表示され、起動が停止します。正確なテキストは次のとおりです。
A disk read error occurred
Press Ctrl+Alt+Del to restart
両方のディスクのブロック 0 に同じブート セクター コードがあることを確認しました。
何か他のものも更新する必要があるようです。どこかに絶対更新する必要があるブロック参照。おそらく次のレベルのローダーまたは NT カーネルを指しています。
アップデート:私は見つけたこれこの記事は私が知りたいことをかなり深く掘り下げています。しかし、boot.iniを変更するように書かれていますが、Windows 7がインストールされており、次のような変更が加えられているようです。boot.iniはありませんが、システムボリューム情報GUID とその他のデータが含まれており、私の問題に関係しているようです。引き続き調査します...
アップデート2:見た目はひどいですが、非常に有益な情報ですウェブサイトスターマン、最初のステップを理解することができました。NTFS ブート セクターには、「隠し」セクター用のフィールドがあります。このフィールドには、ブート セクターのセクター番号が含まれている必要があります。これにより、「読み取りエラー」メッセージが解決されます。ただし、今度は「BOOTMGR が見つかりません」というエラーが表示されます。ブロック番号を調整する必要がある別の場所があるようですが、コード リストにはこれに関する記述が見つかりません。
この「BOOTMGR が見つからない」問題を解決するために Windows ツールを提案しているヘルプ サイトは多数ありますが、舞台裏で何が起こっているのかを知っているサイトは 1 つもありません。Windows にちょっとした問題があるときに再インストールするように提案しているようなものです。少なくとも、これらの修正は機能しているようです。主に Bcdedit および Bootrec ツールが関係しています。では、移動されたパーティションに関して、これらのツール、特に後者が何をするのかを知っている人はいますか?
アップデート3:何度も試行錯誤を繰り返した結果、解決策はBCD テンプレートレジストリ ファイルで、通常は \Windows\System32\config 内にあります。「bcdboot」コマンドを使用してこれを更新すると、Windows はそこから起動します。現在、このレジストリに上記の質問に関連するどのような情報が含まれているかを調べているところです。このレジストリの内容に関するヒントがあれば、ぜひ教えてください。
アップデート4:BCD テンプレート ファイルは書き換えられて、以前のものとはバイナリ コンテンツが異なりますが、内部の値は変更されないことが判明しました。したがって、bcdboot.exe が書き込むのは別の何かであるに違いありません。以前にパーティションの最初の 32 個のブート ブロックが変更されるかどうかを確認しましたが、変更されていないようです。パーティション マップも変更されません。では、bcdboot が BCD レジストリ以外に変更するものは何でしょうか。それを追跡する方法についてのヒントはありますか。プログラムが書き込むファイルを表示する低レベル ツールはありますか。
アップデート5:答えは次のようです: c:\Boot\BCD も変更されており、これがブート マネージャーのプロセスのキー ファイルであるようです。これについては後で調査します...
アップデート6:Windows 7 をインストールしたときに、元々 2 つのパーティションが作成されていたことは重要な詳細のようです。204800 セクターの小さなパーティションはブートストラップ パーティションのようで、その後に Windows システム (ドライブ C:) を含む実際の大きなパーティションが続きます。このインストールを新しい大きなディスクに転送しようとしたとき、新しいドライブに同じ 2 つのパーティションをそのまま残していましたが、オフセットが異なっていました。これだけで「BOOTMGR が見つかりません」というメッセージが表示されました。それ以来、Windows パーティションでのみ bcdboot.exe を使用しています。追加したそのパーティションの \Boot\BCD ファイル。そのファイル (およびフォルダ) は、もともと小さい方のパーティションにのみ存在していました。したがって、この問題は、私のケースでは、1 つのパーティション (ブート ストラッパ) が別のパーティション (OS を含むパーティション) を参照しているため、より複雑になる可能性がありますが、他の人は、両方を含む 1 つのパーティションのみを処理する必要がある可能性があり、その場合は解決策がより単純になる可能性があります。
アップデート7:もう 1 つ詳細が見つかりました: \Boot\BCD ファイルには MBR のシリアル番号が記録されます。その番号が一致しない場合、システムは起動しません。次に、そこに絶対ブロック参照も保存されているかどうかをテストします。
答え1
もっと簡単な方法は?
Windows Vista または Windows 7 のインストール ディスクをディスク ドライブに挿入し、コンピューターを起動します。プロンプト
が表示されたら、キーを押します。
言語、時刻、通貨、キーボード、または入力方法を選択し、[次へ] をクリックします。[
コンピューターを修復する] をクリックします。
修復するオペレーティング システムをクリックし、[次へ] をクリックします。
[システム回復オプション] ダイアログ ボックスで、[コマンド プロンプト] をクリックします。Bootrec.exe
と入力し、Enter キーを押します。
Bootrec.exe オプション
Bootrec.exe ツールは次のオプションをサポートしています。状況に応じて適切なオプションを使用してください。
注: BCD を再構築しても起動の問題が解決しない場合は、BCD をエクスポートして削除し、このオプションを再度実行します。これにより、BCD が完全に再構築されたことが保証されます。
これを行うには、Windows RE コマンド プロンプトで次のコマンドを入力します:
bcdedit /export C:\BCD_Backup
c:
cd boot
attrib bcd -s -h -r
ren c:\boot\bcd bcd.old
bootrec /RebuildBcd
または、状況に応じて /FixMbr、/FixBoot、/ScanOs、または /RebuildBcd を使用します。
見る:サポート詳細については。