web-dev-qa-db-ja.com

起動可能なWindows7(またはVista)パーティションを移動するときに何を更新する必要がありますか?

Windowsを搭載した起動可能なNTFSパーティションを別のブロックオフセットに移動した場合、再度起動できるようにするには何を更新する必要がありますか?

背景:必要なアクションを実行するプログラムを作成する予定です、そのため、使用方法のガイドを探していません。 WindowsDVDから起動することによるMicrosoftのツール。代わりに、これらを自分で変更する方法が必要です。そうすれば、平均的なPCユーザーがWindowsシステムをより大きなハードディスクに移動したいときに簡単なソリューションを作成できます。

特に、これが私が試したことです:

いくつかのパーティションを持つディスクがあり、そのうちの1つはWindowsを搭載したNTFSパーティションであり、ディスクはパーティションレイアウトにプレーンな古いMBRブロック0を使用します(4つ以下のパーティション)。

次に、新しい、より大きなディスクをフォーマットしてパーティションを作成します。そこで、NTFSパーティション用のスペースを作り、その内容を古いディスクのNTFSWindowsパーティションからにコピーします。そして、パーティションを「アクティブ」にします。

ただし、このディスクから起動しようとすると、すぐに「読み取りエラー」メッセージが表示され、起動が停止します。正確なテキストは次のとおりです。

  A disk read error occurred
  Press Ctrl+Alt+Del to restart

ブロック0で両方のディスクのブートセクタコードが同じであることを確認しました。

他の何かを更新する必要があるように私には思えます。 absoluteブロック参照がどこかにあると思います。おそらく、次のレベルのローダーまたはNTカーネルを指しています。

更新:私は this 記事が私が知りたいことの奥深くに入っているのを見つけました。ただし、boot.iniを変更するように指示されていますが、ここにWindows 7がインストールされており、そのようなものが変更されているようです。boot.iniはありませんが、システムボリューム情報 with GUIDおよび私の問題に関連していると思われるその他のデータ。掘り下げていきます...

更新2:ひどい見た目ですが、非常に有益なおかげで ウェブサイトstarman 、私はできました最初のステップを理解するには:NTFSブートセクターには、「非表示」セクター用のフィールドがあります。このフィールドには、ブートセクターのセクター番号が含まれている必要があります。これにより、「読み取りエラー」メッセージが解決されます。ただし、代わりに「BOOTMGRがありません」というエラーが表示されます。ブロック番号を調整する必要がある別の場所があるようですが、これに関するコードリストには何も見つかりません。

この「BOOTMGRが見つからない」問題を修正するためのWindowsツールを提案しているヘルプサイトはたくさんありますが、舞台裏で何が起こっているのかを知っている人はいないようです。少し問題が発生したときにWindowsを再インストールすることを提案するようなものです。少なくとも、これらの修正は機能しているようで、主にBcdeditツールとBootrecツールが関係しています。さて、移動されたパーティションに関して、彼らが何をしているのか、特に後者を誰が知っていますか?

更新3:試行錯誤を繰り返した結果、解決策はBCD-Templateにあると思います。レジストリファイル。通常は\ Windows\System32\config内にあります。 「bcdboot」コマンドを使用してこれを更新すると、Windowsはそこから起動します。私は現在、このレジストリに上記の質問に関連する情報が含まれていることを理解している最中です。このレジストリの内容へのポインタは大歓迎です。

更新4:BCD-Templateファイルが書き換えられ、前のファイルとは異なるバイナリコンテンツが含まれている間、内部の値は変更されないことが判明しました。したがって、bcdboot.exeが書き込むものは別のものである必要があります。以前、パーティションの最初の32個のブートブロックが変更されるかどうかを確認しましたが、変更されていないようです。パリティトンマップも変更されません。では、bcdbootがBCDレジストリ以外に変更するのは何ですか?それを追跡する方法に関するヒントはありますか?プログラムがどのファイルに書き込むかを表示する低レベルのツールはありますか?

更新5:答えは次のようです:c:\ Boot\BCDも変更されており、これがブートマネージャーのプロセスのキーファイルのようです。 。これについては後で調査します...

更新6:Windows 7をインストールしたときに最初に2つのパーティションを作成したことは重要な詳細のようです:204800セクターの小さなパーティションbootstrapパーティションの後に、Windowsシステム(ドライブC :)を含む実際の大きなパーティションが続きます。このインストールを新しい大きなディスクに転送しようとしたとき、私は同じ2つのパーティションは新しいドライブでそのままですが、オフセットが異なります。これだけで「BOOTMGRが見つかりません」というメッセージが表示されました。それ以来、私はbcdboot.exeをWindowsパーティションでのみ使用しています。 追加そのパーティションの\ Boot\BCDファイル。そのファイル(およびフォルダー)は元々小さいパーティションにのみ存在していたため、この問題は1つのパーティション(ブートストラップ)として私の場合はより複雑になる可能性があります。別のパーティション(OSを含むパーティション)を参照しましたが、他の人は両方を含む1つのパーティションを処理するだけで済み、解決策はもっと簡単かもしれません。

更新7:もう1つの詳細が見つかりました:\ Boot\BCDファイルはMBRのシリアル番号を記録します。その番号が一致しない場合、システムは起動しません。次に、そこに絶対ブロック参照も格納されているかどうかをテストします。

9
SuperTempel

より簡単な方法は?

WindowsVistaまたはWindows7のインストールディスクをディスクドライブに挿入してから、コンピューターを起動します。
プロンプトが表示されたらキーを押します。
言語、時間、通貨、キーボード、または入力方法を選択して、[次へ]をクリックします。
[コンピューターの修復]をクリックします。
修復するオペレーティングシステムをクリックし、[次へ]をクリックします。
[システム回復オプション]ダイアログボックスで、[コマンドプロンプト]をクリックします。
Bootrec.exeと入力し、Enterキーを押します。

Bootrec.exeオプション
Bootrec.exeツールは次のオプションをサポートしています。状況に適したオプションを使用してください。

注BCDを再構築しても起動の問題が解決しない場合は、BCDをエクスポートして削除してから、このオプションを再度実行できます。これを行うことにより、BCDが完全に再構築されていることを確認します。

これを行うには、WindowsREコマンドプロンプトで次のコマンドを入力します。
bcdedit/export C:\ BCD_Backup
c:
cdブート
attrib bcd -s -h -r
ren c:\ boot\bcd bcd.old
bootrec/RebuildBcd

または、状況に応じて/ FixMbrまたは/ FixBootまたは/ ScanOsまたは/ RebuildBcd。

詳細については、 Support.Microsoft.com を参照してください。

1
Essobi