부팅 가능한 Windows 7 (또는 Vista) 파티션을 이동할 때 무엇을 업데이트해야합니까?


9

Windows가있는 부팅 가능한 NTFS 파티션을 다른 블록 오프셋으로 이동할 때 다시 부팅 할 수 있도록하려면 무엇이 업데이트되어야합니까?

배경 : 필요한 조치를 수행하는 프로그램을 작성할 계획 이므로 Windows DVD에서 부팅하여 Microsoft 도구를 사용하는 방법에 대한 가이드를 찾고 있지 않습니다. 대신, 이러한 것들을 직접 수정하는 방법이 필요하기 때문에 일반 PC 사용자가 Windows 시스템을 더 큰 하드 디스크로 옮기고 싶을 때 더 쉬운 솔루션을 작성할 수 있습니다.

특히, 내가 시도한 것은 다음과 같습니다.

여러 개의 파티션이있는 디스크가 있는데 그 중 하나는 Windows가있는 NTFS 파티션이며, 디스크는 파티션 레이아웃 (일반적으로 4 개의 파티션)에 대해 이전 MBR 블록 0을 사용합니다.

이제 새로운 디스크를 포맷하고 파티션을 나눕니다. 거기에서 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이 없습니다"오류가 발생합니다. 블록 번호를 조정해야 할 또 다른 곳이 있지만 코드 목록에서 이것에 대한 것을 찾을 수 없습니다.

이 "BOOTMGR이 없습니다."문제를 해결하기위한 Windows 도구를 제안하는 많은 도움말 사이트를 찾을 수 있지만 뒤에서 어떤 일이 일어나는지 아는 사람은 없습니다. 약간의 문제가있을 때 Windows를 다시 설치하도록 제안하는 것과 같습니다. 적어도 이러한 수정 사항은 대부분 Bcdedit 및 Bootrec 도구와 관련하여 작동하는 것 같습니다. 이제 이동 파티션과 관련하여 누가 특히 자신이하는 일을 알고 있습니까?

업데이트 3 : 많은 시행 착오 시도 후에 솔루션이 BCD 템플릿 레지스트리 파일에 있으며 일반적으로 \ Windows \ System32 \ config 안에 있다고 생각 합니다. "bcdboot"명령을 사용하여 업데이트하면 Windows가 시작됩니다. 나는 지금이 레지스트리에 어떤 정보가 위의 질문과 관련이 있는지 알아내는 중입니다. 이 레지스트리의 내용에 대한 모든 의견을 환영합니다.

업데이트 4 : BCD 템플릿 파일이 다시 작성되고 이전 버전과 다른 이진 내용이 있지만 내부 값은 변경되지 않습니다. 따라서 bcdboot.exe가 쓰는 다른 것이어야합니다. 이전에 파티션의 첫 32 개 부팅 블록을 변경했는지 이미 확인했지만 변경되지 않은 것으로 보입니다. 패리티 턴지도도 바뀌지 않습니다. BCD 레지스트리 외에 bcdboot가 수정하는 것은 무엇입니까? 어떻게 추적 할 수 있는지에 대한 팁이 있습니까? 프로그램이 어떤 파일을 작성하는지 보여주는 저수준 도구가 있습니까?

업데이트 5 : 대답은 다음과 같습니다. c : \ Boot \ BCD도 변경되었으며 부팅 관리자 프로세스의 핵심 파일 인 것 같습니다. 나중에 조사하겠습니다 ...

업데이트 6 : Windows 7을 설치할 때 원래 두 개의 파티션이 생성 된 것이 중요한 세부 사항 인 것 같습니다. 부트 스트랩 파티션 인 것처럼 보이는 204800 섹터의 작은 파티션과 Windows 시스템을 포함하는 실제의 큰 파티션 ( C :) 드라이브. 이 설치를 더 큰 새 디스크로 전송하려고 할 때 새 드라이브에서 동일한 두 파티션을 그대로 유지했지만 다른 오프셋으로 끝났습니다. 이로 인해 "BOOTMGR이 없습니다"메시지가 나타납니다. 그 이후로, 나는 윈도우 파티션에서만 bcdboot.exe 사용했습니다 추가해당 파티션의 \ Boot \ BCD 파일 해당 파일 (및 폴더)은 원래 작은 파티션에만 존재했습니다. 따라서이 문제는 내 파티션에서 하나의 파티션 (부팅 스트 래퍼)이 다른 파티션 (OS를 포함하는 파티션)을 참조하기 때문에 더 복잡 할 수 있지만 다른 사람들은 둘 다를 포함하는 하나의 파티션 만 처리해야 할 수도 있습니다. 더 간단합니다.

업데이트 7 : 하나 더 자세한 내용을 발견했습니다. \ Boot \ BCD 파일은 MBR의 일련 번호를 기록합니다. 해당 번호가 일치하지 않으면 시스템이 부팅되지 않습니다. 다음에는 절대 블록 참조가 저장되어 있는지 테스트하겠습니다.


숨겨진 시스템 파티션이 올바르게 이동되었는지 확인 했습니까?
Colum

어떤 숨겨진 파티션을 의미합니까? 방금 추가 부팅 파티션에 대해 설명하는 업데이트 # 6을 추가했으며 예, 이동했습니다. MBR과 Windows 파티션의 시작 사이에 또 ​​하나의 "숨겨진"영역이 있었지만 관련이 없어야합니다. 이는 단지 데이터의 양일뿐입니다. 여기에서 Boot Camp 설치). 파티션 맵 (이후 MBR + GUID 스킴 파티션 맵)과 관련된 두 개의 Windows 파티션 (작은 부팅 프로그램 및 C : 파티션)이 포함되어야합니다. 물론 모든 것을 올바르게 업데이트했습니다. :)
SuperTempel

가장 중요한 것은에 저장되어 있으며 \BCD\Boot일반적으로가 bcdedit.exe아닌 을 사용하여 편집합니다 bcdboot. 그리고 예, 부트 스트랩을위한 별도의 파티션 (전체 디스크 암호화 기능을 사용할 때만 필요합니다. 암호 해독 코드는 기본 Windows 파티션 외부에 저장되어야하기 때문에) 부트 프로세스가있는 경우이를 제어합니다.
Ben Voigt

@ Ben : 예, bcdedit에 대해 알고 있지만 파티션을 새 디스크로 옮기기 전에 옵션을 변경하고 싶지 않다는 것을 알 수있는 한 아무것도 편집하고 싶지 않습니다. . 가능하면 Windows 실행 파일을 사용하지 않고 고정 블록 번호 및 디스크 ID 참조 만 업데이트하려고합니다.
SuperTempel

1
프로그래밍 질문이 아닙니다. 이것은 Windows 부트 로더에 대한 도메인 지식입니다.
Andrew Medico

답변:


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.

자세한 내용은 Support.Microsoft.com 을 참조하십시오.


1
도와 주셔서 감사합니다. 그러나 당신이 말하는 것은 표준 지식입니다. 나는 사소한 사용자가 여전히 다루기 어려운 Microsoft의 소프트웨어를 사용하지 않고 내 자신의 서면 프로그램에서이를 달성하기 위해 "진행중인"정보가 필요하다. Boot Camp가 설치된 Mac 사용자에게 다른 디스크로 이동해야 할 경우에 대비하여 솔루션을 제공 할 수 있기를 원합니다. 그리고 그 부작용으로 다른 Windows 사용자도 똑같이 할 수 있습니다.
SuperTempel

내가 그렇게하려고한다면 ... 전과 후에 디스크를 ddd하고 둘 사이에 이진 비교를 수행합니다. 행운을 빕니다.
Essobi

다시 당신보다 앞서 요 저는 iBored의 저자입니다. 그래서 저는 그런 일을하는 방법을 알고 저를 믿습니다. 새로운 형식은 나에게 너무 비밀 스럽기 때문에 여기 에서이 질문을하는 이유입니다.
SuperTempel
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.