複製されたWindows 7 BCDに不完全なデータが含まれているのはなぜですか(したがって、起動できません)?


9

デュアルブートWindows XP / 7ボックスのクローンを作成してハードドライブをより小さなものに交換する必要があるという不幸がありました。起動するのに苦労しました。何が起こっているのか、もっとうまくやれるかどうかを知りたいです。

背景:マシンには、3つのパーティションを持つ750Gbドライブがあります。

  • Windows XP
  • Windows 7
  • データ

元のインストールは、個別のWindows 7リカバリパーティションが存在しないような方法で行われました。この事実が物事をいくらか簡素化することを願っています。

80Gbドライブに交換しています。パーティションは、より小さなディスクに収まるようにWindows 7内から既に縮小されています。

私が使用GParted(からPartedMagic全体にパーティションをコピーするには、LinuxのLiveCDを)。Windows XPパーティションをアクティブパーティションとしてマークします(元のディスクと同じ)。

CloneZilla大きいディスクから小さいディスクに移行したため、ディスクコピー全体を使用または実行できませんでした。

パーティションをコピーした後、ブートローダーを手動でコピーしました(パーティションテーブルをコピーしないように注意してください):

$ dd if=/dev/sda of=/dev/sdb bs=446 count=1

元のディスクを削除し、元のディスク(IDEチャネル1マスター)と同じ物理的に接続されるように新しいディスクを設定して、起動を試みました。これにより、ブートメニューは正常に表示されましたが、いずれかのオプションを選択すると失敗しました(XP用とWin7用の2つがあります)。

Windows 7のブート構成データに必要なものがすべて含まれていないことを認識できるように、かなりの研究を行いました。元のディスクと新しいディスクのBCD出力を比較し、後者のデバイスエントリがunknown。だから私は手動で元のものに一致するように変更しました-このように:

$ bcdedit /set {ntldr} device partition=C:
$ bcdedit /set {default} device partition=D:
$ bcdedit /set {default} osdevice partition=D:

そして再起動しました。今回は、XPとWin7の両方を起動できました。2つのBCDには他の違いがあるように見えるので、さらにテストを行う必要がありますが、上記の変更を行うことで、少なくともブートを実行できました。

私の質問は、クローンパーティション上のBCDが元のパーティションとは異なるように見える理由を尋ねることです。

そして、それへのフォローアップは、私がこれを別の方法で行うべきかどうかを尋ねることでしょうか?

回答:


13

Windowsオペレーティングシステムを含むパーティションのクローンを作成した後、クローンパーティションが元のディスクとクローンディスクの正確に同じ位置にない場合は、ブート構成データを修正する必要があります。

Windows Vista以降のWindowsブートメカニズムは、その構成を「ブート構成データ」(BCD)として保存します。これは、パーティション番号ではなく、ディスク署名とセクターオフセットによってパーティションを参照します。ディスク署名は、マスターブートレコードに埋め込まれた32ビット値です。セクター0の最初の446バイトをコピーすると、ディスク署名がコピーされます。

クローン作成アクティビティの結果、クローンディスクパーティションの開始セクタアドレスと元のセクタアドレスが異なる場合(ディスク全体のクローンが使用されていない場合が多い)、これらの修復が適用されるまでクローンは起動できません。

基本的に、セクターオフセットを更新する必要があります。そのためには、回復コンソールを使用する必要があります(これはWindows 7インストールDVDで利用可能です)。クローンドライブのみが接続されていることを確認し、Windows 7インストールDVDから起動します。最初の画面で言語を選択し、「次へ」を押します。次の画面(「今すぐインストール」が表示されます)で、Shift + F10キーを押してコマンドプロンプトを表示します。

最初に、適切なドライブ文字とそれらが関連するパーティションを確認します。

diskpart
list volume
exit

また、必要な場合は、アクティブパーティションを再確認します。

diskpart
select disk 0
select part 1
detail part
select part 2
detail part
... and so-on
exit

BIOSのシステムでは、BCDはでファイルに格納されているX:\Boot\BCD場所X(UEFIのために、それはEFIシステムパーティションにあります)、アクティブパーティションのドライブ文字です。通常非表示、それはで見ることができます

dir /AH X:\Boot

次のようにバックアップできます。

bcdedit /export X:\path\to\bcd\backup

そして復元された

bcdedit /import X:\path\to\bcd\backup

ディスクに複数のオペレーティングシステムがある場合、複数のBCDが存在する可能性があります。アクティブBCDは、1つである\Boot\BCD-アクティブとしてマークされているパーティション上のアクティブパーティション。その内容をリストするには(詳細度の昇順:)

bcdedit
bcdedit /enum
bcdedit /enum ALL
bcdedit /enum ALL /v

アクティブなBCDを修正するには、正しいパーティションのドライブ文字を設定して、次を実行します。

bcdedit /set {default} osdevice partition=X:
bcdedit /set {default} device partition=X:
bcdedit /set {bootmgr} device partition=X:
bcdedit /set {memdiag} device partition=X:
bcdedit /set {ntldr} device partition=X:

または、別のBCDを修正するには(これらの例では "X:\ boot \ bcd"で):

bcdedit /store X:\boot\bcd /set {default} osdevice partition=X:
bcdedit /store X:\boot\bcd /set {default} device partition=X:
bcdedit /store X:\boot\bcd /set {bootmgr} device partition=X:
bcdedit /store X:\boot\bcd /set {memdiag} device partition=X:
bcdedit /store X:\boot\bcd /set {ntldr} device partition=X:

たとえば、XPと7があり、XPがオンC:で7がオンでD:あり、アクティブパーティションがであると表示する私のシステムC:。アクティブなBCDはになりますc:\boot\BCD。ブートマネージャはにC:\bootmgrあり、メモリ診断はにC:\boot\memtest.exeあります。必要なコマンドは次のとおりです。

bcdedit /set {ntldr} device partition=C:
bcdedit /set {memdiag} device partition=C:
bcdedit /set {bootmgr} device partition=C:
bcdedit /set {default} device partition=D:
bcdedit /set {default} osdevice partition=D:

これらの変更により、コンピューターを再起動し(Alt-F4を押すとこれが達成されます)、DVDを取り外すとシステムが正常に起動しました。

参考文献:

(コピー上のパーティションレイアウトはオリジナルとまったく同じである必要があるため、ディスク全体のクローンはこれらの問題に悩まされることはありません)


bcdbootブートエントリを再作成する簡単な方法を提供していますが、私はそれがXP / W7デュアルブートのシナリオでは適しているだろうか分かりません。
ハリージョンストン

私はあなたの答えが大好きですが、少しきれいにしてください。余分な情報がたくさんあると思います(コマンド例、直後に実際のコマンドがある場合など)。
Bigbio2002

あなたがanserを気に入ってくれてうれしいですが、そこに余分な情報がたくさんあるとは思いません。最後に一般的な説明に加えて、変更が必要な各エントリのパーティションを決定する方法を実際に示す1つの実際の例を示します。クローン化されたシステムを修正するには、上記のすべての知識が必要だったので、他の人にできるだけ多くの情報を提供するための完全な回答として提示しました。
スターフライ

7

BCD内部に関するこの非公式ドキュメントによると、BCDストア内のパーティションは、実際にはディスク署名とパーティションオフセットによって識別されます。ディスク署名(MBRバイト440〜443)をコピーしましたが、より小さなディスクにパーティションを配置するときにパーティションオフセットを変更した可能性が高いため、BOOTMGRはこれらのパーティションを見つけることができませんでした。


それは興味深く、なぜそれが機能しないのかを確かに説明します-パーティションオフセットはほとんど間違いなく異なります。なぜこれが正式に文書化されていないのか、誰もが推測している!クローンディスクでこれを「修復」するための受け入れられた(公式または非公式の)方法はありますか?
スターフライ

公式な方法は、「事前に準備されたシステム修復ディスク(または、DOEM回復メディアではなく、実際のインストールメディア)から起動し、スタートアップ修復を実行すること」だと思います。それが失敗した場合は、OSを再インストールしてください。」スタートアップ修復がXPを回復するかどうかもわかりません。
セルゲイヴラソフ

@starfry組み込みのコマンドライン1(bcdedit)を含む多くのBCDエディターがあります。私は自分でVisual BCD Editorを好みます。Windows環境に移行できる場合、Visual BCDを使用すると、ブートデバイスを簡単に設定できます。コマンドプロンプト(F11など)を開いて使用することで、ブートDVDから同じことができますbcdedit。以前にディスク修復環境をシステム修復で削除したことがあるので、手動で修復することに不安がある場合は、システム修復をお勧めします。
ボブ

セルゲイと@bobに感謝します。何が起こっているのかを完全に理解するように駆り立てたので、私はこの答えを受け入れました。私が今知っていることを別の回答で文書化しました。
スターフライ

私の無知を許しますが、@ starfryがsda(パーティションsda1ではなく)を介してバイトコピーするバイトですが、ドライブ全体をsdaにする場合、パーティションオフセットが異なるのはなぜですか?
-barlop
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.