태그 보관물: bootloader

bootloader

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

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의 일련 번호를 기록합니다. 해당 번호가 일치하지 않으면 시스템이 부팅되지 않습니다. 다음에는 절대 블록 참조가 저장되어 있는지 테스트하겠습니다.



답변

더 쉬운 방법?

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 을 참조하십시오.


답변