起動可能なWindows 7(またはVista)パーティションを移動する場合、何を更新する必要がありますか?


9

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:starmanによる恐ろしくて非常に有益なウェブサイトのおかげで、私は最初のステップを理解することができまし。NTFSブートセクターには、「非表示」セクターのフィールドがあります。このフィールドには、ブートセクターのセクター番号を含める必要があります。これにより、「読み取りエラー」メッセージが解決されます。ただし、代わりに「BOOTMGR is missing」エラーが発生します。ブロック番号を調整する必要がある別の場所があるようですが、これについてのコードリストには何も見つかりません。

この「BOOTMGR is missing」問題を修正するためのWindowsツールを提案しているヘルプサイトはたくさんありますが、裏で何が起こっているのか誰も知らないようです。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セクターの小さなパーティションの後に、Windowsシステムを含む実際の大きなパーティション(ドライブC :)。このインストールを新しいより大きなディスクに転送しようとしたとき、同じ2つのパーティションを新しいドライブにそのまま残していましたが、最終的には異なるオフセットになりました。これだけで「BOOTMGR is missing」というメッセージが表示されました。それ以来、私はWindowsパーティションでのみbcdboot.exeを使用してきました。そのパーティションの\ Boot \ BCDファイル。そのファイル(およびフォルダー)は、もともと小さいパーティションにのみ存在していました。したがって、私の問題では、1つのパーティション(ブートストラッパー)が別のパーティション(OSを含むパーティション)を参照するため、この問題はさらに複雑になる可能性があります。簡単です。

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


不思議に思いますが、非表示のシステムパーティションが正しく移動されたことを確認しましたか?
Colum

どの隠しパーティションですか?追加のブートパーティションについて説明するアップデート#6を追加しました。そうです、それも移動しました。MBRとWindowsパーティションの先頭の間に別の「隠された」領域もありましたが、それは何の関連性もないはずです。これは単なるデータの塊です(私の場合:移動中のHFS +パーティション)。 Boot Campインストール)関係するのは、パーティションマップ(MBRとその後のGUIDスキームパーティションマップ)と、関係する2つのWindowsパーティション(スモールブーターとC:パーティション)だけです。もちろん、すべて適切に更新しました。:)
SuperTempel 2010

最も確かに重要なものがで保存され\BCD\Boot、あなたがしたい通常編集それとbcdedit.exe、ありませんbcdboot。そして、はい、ブートストラップ用の個別のパーティション(フルディスク暗号化機能を使用する場合にのみ必要です。復号化コードはメインのWindowsパーティションの外部に保存する必要があるため)は、存在する場合にブートプロセスを制御します。
Ben Voigt 2010

@ベン:はい、私はbcdeditについて知っています-パーティションを新しいディスクに移動する前に設定されていたオプションを変更したくないので、私が知る限り、何も編集しません。更新したいのは、可能な場合はWindows実行可能ファイルを使用せずに、固定ブロック番号とディスクIDの参照だけです。
SuperTempel 2010

1
プログラミングの質問ではありません。これは、Windowsブートローダーに関するドメインの知識です。
2010

回答:


1

簡単な方法は?

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

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

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

:これを行うには、コマンドプロンプトのWindows REで次のコマンドを入力し
ます。bcdedit /エクスポートCを:\ BCD_Backup
C:
CDブート
します。attrib -s -h -r BCD
REN C:\ブート\ BCD bcd.old
bootrec / RebuildBcd

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

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


1
助けてくれてありがとうございますが、あなたが言うようにあなたが言うことは標準的な知識です。Microsoftのソフトウェアを使用するのではなく、自分の書いたプログラムでこれを実現するために、「何が起こっているのか」という情報が特に必要です。MacユーザーがBoot Campをインストールして、これを別のディスクに移動する必要がある場合に備えて、ソリューションを提供できるようにしたいと考えています。そして、その副作用として、タスクは同じであるため、他のすべてのWindowsユーザーにも役立ちます。
SuperTempel 2011年

私がそれをしようとしていた場合...ディスクを前後にddし、2つのディスクをバイナリ比較します。幸運を。
エソビ

私はあなたの前にあります。ほら、私はiBoredの作者なので、そのようなことをする方法を知っています。しかし、新しい形式は私にはわかりにくいので、ここでこの質問をします。
SuperTempel
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.