복제 된 Windows 7 BCD에 불완전한 데이터가 포함되어 부팅을 방지하는 이유는 무엇입니까?


9

하드 드라이브를 더 작은 하드 드라이브로 교체하기 위해 이중 부팅 Windows XP / 7 상자를 복제해야하는 불행이있었습니다. 부팅하는 데 큰 어려움이 있었고 현재 진행중인 작업과 더 나은 작업을 수행 할 수 있는지 이해하고 싶습니다.

배경 : 머신에는 3 개의 파티션이있는 750Gb 드라이브가 있습니다.

  • 윈도우 XP
  • 윈도우 7
  • 데이터

원래 설치는 별도의 Windows 7 복구 파티션이없는 방식으로 수행되었습니다. 이 사실이 다소 단순화되기를 바랍니다.

80Gb 드라이브로 교체하고 있습니다. 파티션은 이미 작은 디스크에 맞도록 Windows 7에서 축소되었습니다.

GParted( PartedMagicLinux LiveCD에서) 파티션을 복사하는 데 사용했습니다 . Windows XP 파티션을 활성 파티션으로 표시합니다 (원래 디스크와 동일).

CloneZilla더 큰 디스크에서 더 작은 디스크로의 전환으로 인해 전체 디스크 복사본 을 사용 하거나 수행 할 수 없습니다 .

파티션을 복사 한 후 부트 로더를 수동으로 복사했습니다 (파티션 테이블을 복사하지 않도록주의).

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

원래 디스크를 제거하고 새 디스크를 설정하여 원래 (IDE 채널 1 마스터)와 물리적으로 동일하게 연결하고 부팅을 시도했습니다. 이것은 부팅 메뉴를 성공적으로 표시했지만 두 옵션 중 하나를 선택하면 실패합니다 (XP와 Win7에 각각 하나씩).

Windows 7 부팅 구성 데이터에 필요한 모든 것이 포함되어 있지 않다는 것을 알기 위해 상당한 연구를 수행했습니다. 원본 디스크와 새 디스크의 BCD 출력을 비교 한 후 후자의 장치 항목은 다음과 같습니다 unknown. 그래서 수동으로 원본과 일치하도록 수동으로 변경했습니다.

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

재부팅했다. 이번에는 XP와 Win7을 모두 부팅 할 수있었습니다. 두 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는 활성 파티션의 드라이브 문자 (UEFI의 경우 EFI 시스템 파티션에 있음) 의 파일 X:\Boot\BCD위치에 파일에 저장됩니다 X. 일반적으로 숨겨져 있습니다.

dir /AH X:\Boot

다음과 같이 백업 할 수 있습니다.

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

복원

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

디스크에 여러 운영 체제가있는 경우 여러 BCD가있을 수 있습니다. 활성 BCD는 활성 \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 이중 부팅 시나리오에 적합 할 것 아니에요.
Harry Johnston

나는 당신의 대답을 좋아하지만 조금 정리해 주시겠습니까? 외부에 많은 정보가 있다고 생각합니다 (예 : 명령, 실제 명령이있는 경우 등).
Bigbio2002

나는 당신이 anser를 좋아해서 기쁘지만 거기에 많은 관련 정보가 있다고 생각하지 않습니다. 마지막에 일반적인 설명과 하나의 실제 예제가 있는데, 실제로 변경해야 할 각 항목에서 파티션을 결정하는 방법을 실제로 보여줍니다. 복제 된 시스템을 수정하려면 위의 모든 지식이 필요했기 때문에 다른 사람에게 많은 정보를 제공하기위한 전체 답변으로 제시했습니다.
starfry

8

BCD internals 에 대한 이 비공식 문서에 따르면 BCD 저장소의 파티션은 실제로 디스크 서명과 파티션 오프셋으로 식별됩니다. 디스크 서명 (MBR 바이트 440–443)을 복사했지만 더 작은 디스크에 파티션을 넣을 때 파티션 오프셋이 변경되었을 가능성이 높으므로 BOOTMGR은 더 이상 이러한 파티션을 찾을 수 없었습니다.


흥미롭고 확실히 작동하지 않는 이유를 설명합니다. 파티션 오프셋은 가장 확실하게 다릅니다. 왜 공식적으로 문서화되지 않은 이유는 누구나 추측 할 수 있습니다! 복제 된 디스크에서 이것을 "수리"하는 데 허용되는 (공식 또는 비공식적 인) 방법이 있습니까?
starfry

공식적인 방법은“이전에 준비된 시스템 복구 디스크 (또는 DOEM 복구 미디어가 아닌 실제 설치 미디어 에서 부팅)로 부팅 하고 시동 복구를 실행하는 것입니다 . 실패하면 OS를 다시 설치하십시오. 시동 복구가 귀하의 경우에 XP를 복구 할 것인지 확실하지 않습니다.
Sergey Vlasov 2018 년

@starfry 기본 제공 명령 줄 편집기 ( bcdedit)를 포함하여 많은 BCD 편집기가 있습니다 . Visual BCD Editor를 선호합니다. Windows 환경에 들어갈 수 있으면 Visual BCD를 사용하면 부팅 장치를 매우 쉽게 설정할 수 있습니다. 명령 프롬프트를 열고 (F11 또는 다른 것으로 생각) 부트 DVD에서 동일한 작업을 수행 할 수 있습니다 bcdedit. 시스템 복구가 디스크 복구 환경을 이전에 제거 했으므로 수동으로 수정해야 할 경우 시스템 복구를 권장하지 않습니다.
Bob

감사합니다 sergey과 @bob. 나는이 답변을 받아 들여서 무슨 일이 일어나고 있는지 완전히 이해할 수있었습니다. 나는 내가 지금 알고있는 것을 별도의 답변으로 문서화했습니다.
starfry

내 무지를 용서하지만 @starfry가 sda (파티션 sda1이 아님)를 통한 바이트 복사 바이트이지만 전체 드라이브를 sda하면 파티션 오프셋이 다른 이유는 무엇입니까?
barlop 2016 년
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.