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의 일련 번호를 기록합니다. 해당 번호가 일치하지 않으면 시스템이 부팅되지 않습니다. 다음에는 절대 블록 참조가 저장되어 있는지 테스트하겠습니다.
\BCD\Boot
일반적으로가 bcdedit.exe
아닌 을 사용하여 편집합니다 bcdboot
. 그리고 예, 부트 스트랩을위한 별도의 파티션 (전체 디스크 암호화 기능을 사용할 때만 필요합니다. 암호 해독 코드는 기본 Windows 파티션 외부에 저장되어야하기 때문에) 부트 프로세스가있는 경우이를 제어합니다.