1. Bootmgr 부트 매니저의 교체와 설치에 대해서
윈도우를 사용하다 보면 어떠한 이유에 의해 Bootmgr 부트 매니저를 처음부터 설치하거나, 또는 현재 사용 중인 Bootmgr 부트 매니저를 새로운 버전으로 교체해야 할 필요가 생깁니다. 이 때 흔히 사용되는 방법이 바로 기존에 설치된 Bootmgr 부트 매니저 파일들을 그대로 복사해와 교체 또는 설치하는 것입니다. [참고로 이 때 USB 플래시 메모리와 같은 이동식 저장 매체에 Bootmgr 부트 매니저를 구성하는 것은 예외로 하며, 그리하여 Bootmgr 부트 매니저를 설치하는 작업은 윈도우 XP 를 단독으로 사용하는 경우에만 국한 됨을 미리 알아두시길 바랍니다.]
복사를 통해 Bootmgr 부트 매니저를 교체하거나 설치하는 방법은 따로 설명하지 않도록 하겠습니다. 아무튼, 이렇게 Bootmgr 부트 매니저 구성 파일을 직접 복사하여 Bootmgr 부트 매니저를 교체하거나 새로 설치 작업을 간단하게 정리하면 아래와 같습니다.
Bootmgr 부트 매니저 교체 : 기존의 Bootmgr 부트 매니저 파일 제거 → 새로운 Bootmgr 부트 매니저 파일 복사
Bootmgr 부트 매니저 설치 - 윈도우 XP
1. Bootmgr 부트 매니저 파일 복사 [Copy]
2. Bootmgr 부트 매니저를 주 부트 매니저로 등록 [Bootsect 로 작업]
3. BCD(Bootmgr 부트 매니저 부팅 설정 파일) 에 NTLDR 부트 매니저에 대한 부팅 항목 구성 [BCDEdit 로 작업]
1. Bootmgr 부트 매니저 파일 복사 [Copy]
2. Bootmgr 부트 매니저를 주 부트 매니저로 등록 [Bootsect 로 작업]
3. BCD(Bootmgr 부트 매니저 부팅 설정 파일) 에 NTLDR 부트 매니저에 대한 부팅 항목 구성 [BCDEdit 로 작업]
그런데 이렇게 Bootmgr 부트 매니저의 구성 파일들을 직접 복사하는 방식으로 설치 또는 교체하는 작업에는 한 가지 굉장히 난해한 문제가 있습니다. 그건 바로 시스템 파티션의 분할 로드 구성 즉, BIOS 부팅 환경에서의 시스템 예약 파티션과 UEFI 환경에서의 ESP(EFI 시스템 파티션) 환경에 대처하기가 굉장히 곤란하다는 점입니다. 만약 배치 파일을 통해 이를 자동으로 처리하려는 경우에는 이게 좀 문제가 복잡하죠.
대표적인 분할 로드 구성인 UEFI 의 ESP 의 모습.
특히나 UEFI 환경의 ESP 파티션은 다루기가 굉장히 까다롭습니다. 기본적으로 EFI 시스템 파티션은 익스플로러 셀(윈도우 탐색기)이나 디스크 관리를 통한 접근이나 수정이 원천적으로 봉쇄되어 있기 때문에, 모든 작업을 DiskPart 와 명령 프롬프트를 통해 제어해야 하는 문제가 있습니다.
그런데 이 문제는 Bootmgr 부트 매니저의 BCD 부팅 파일 작성 및 복구 도구인 BCDBoot 를 활용하면 간단하게 해결이 가능합니다.
2. BCDBoot 를 활용하여 Bootmgr 부트 매니저의 교체 및 설치하기
A. BCDBoot 도구의 작업에 대한 이해
익히 알다시피 BCDBoot 는 작업에서 지정한 윈도우에 포함된 Bootmgr 부트 매니저 구성 파일을 사용하여 새로 Bootmgr 부트 매니저를 설치하거나, 복구하는 도구입니다. BCDBoot 가 Bootmgr 부트 매니저의 설치 및 복구에 사용하는 Bootmgr 부트 매니저 구성 파일들은 윈도우 폴더 하위의 Boot 폴더 즉, \Windows\Boot 폴더에 준비되어 있습니다.
윈도우 폴더에 준비되어 있는 Bootmgr 부트 매니저 파일들의 모습.
그리고 해당 윈도우에 대한 부팅 항목의 구성은 BFSVC.exe 도구를 통해 \Windows\System32\Config\BCD-Template 파일을 참조하여 구성하게 되죠.
부팅 항목 구성 참조 파일.
즉, 여러분들이 만약에 아래와 같은 BCDBoot 명령을 내린다면,
Bcdboot C:\Windows /s S: /f BIOS
BCDBoot 는 C:\Windows\Boot 폴더 하위에 미리 준비된 Bootmgr 부트 매니저 파일들 중에 BIOS 부팅 환경용 파일들만 추출하여 S: 드라이브에 Bootmgr 부트 매니저를 설치(또는 복구)하고, 다시 해당 윈도우에 따로 준비된 BCD-Template 파일을 참조하여 부팅 항목을 BCD 에 생성(추가)하는 작업을 진행하는 겁니다. 간단하죠?
여기에서 굉장히 중요한 것이 하나 있는데요. 그건 바로 BCDBoot 는 먼저 \Windows\Boot 폴더에서 부트 매니저 파일들을 추출하여 설치(교체)하고, 그 다음으로 BCD-Template 파일을 참조하여 해당 윈도우에 대한 부팅 항목(BCD)을 구성한다는 점입니다.
바로 이러한 BCDBoot 의 작업 방식을 Bootmgr 부트 매니저의 교체 및 설치에 활용하는 겁니다.
B. BCDBoot 를 사용하여 Bootmgr 부트 매니저 교체하기
작업을 간단하게 설명을 드리자면 윈도우 폴더 대용으로 먼저 적절한 폴더를 하나 만들고, 그곳에 원하는 버전의 \Windows\Boot 폴더를 통채로 복사해놓습니다. 예를 들어 D:\Bootmgr-8 이라는 폴더를 하나 만들고 여기에 윈도우 8 에서 추출한 Boot 폴더를 통채로 넣어두면, 그건 윈도우 8 용 Bootmgr 부트 매니저를 설치할 수 있는 뼈대 폴더가 되는 것이죠.
BCDBoot 를 통해 Bootmgr 부트 매니저를 설치할 수 있는 뼈대 폴더.
다른 말로 구라 폴더.
다른 말로 구라 폴더.
이렇게 적당히 가짜 윈도우 폴더를 준비한 후, 해당 폴더를 마치 윈도우 폴더처럼 사용하여 BCDBoot 명령을 내리면 됩니다.
Bcdboot D:\Bootmgr-8
그러면 위와 같이 작업 중간 오류가 나게 됩니다. 이것은 작업에서 지정한 폴더가 진짜 윈도우가 아닌 가짜 윈도우이기 때문에 정상적인 결과입니다. 교체 작업은 이게 끝입니다. 이미 Bootmgr 부트 매니저는 해당 폴더에 준비한 최신의 Bootmgr 부트 매니저 버전으로 교체가 되었습니다. 간단하죠?
이 방법의 최대 장점은 시스템 파티션에 드라이브 문자가 할당되어 있는 단일 로드 구성은 물론, BIOS 부팅 환경의 시스템 예약 파티션과 UEFI 부팅 환경의 ESP 파티션과 같이 드라이브 문자가 할당되어 있지 않거나, 일반적인 방식으로 접근이 차단된 경우에도 정상적으로 작업이 가능하다는 것에 있습니다. 즉, BIOS 부팅 환경이든, UEFI 부팅 환경이든, 시스템 파티션(ESP 등)에 드라이브 문자가 할당되어 있든 말든, 상관 없이 작업을 진행할 수 있습니다.
C. BCDBoot 를 사용하여 Bootmgr 부트 매니저 설치하기 - 윈도우 XP
Bootmgr 부트 매니저를 최신 버전으로 단순 교체하는 작업은 말씀드린 것처럼 위의 작업만으로도 끝이고요. 아직 Bootmgr 부트 매니저가 설치되어 있지 않은 윈도우 XP 환경에서 Bootmgr 부트 매니저를 새로 설치하는 것을 목적으로 작업한 경우라면, 현재 다른 부트 매니저 구성 파일들의 설치는 모두 끝났지만 BCD 는 설치되어 있지 않은 상태입니다.
그래서 이 방법을 사용하여 윈도우 XP 에 Bootmgr 부트 매니저를 설치하는 경우라면 추가로 BCD 파일을 수동으로 구성해야 합니다. 이 때 BCD 는 마찬가지로 미리 준비한 뼈대 폴더에서 윈도우 설치 미디어를 위해 미리 준비되어 있는 BCD 를 토대로 구성하면 됩니다.
참고로 해당 BCD 는 윈도우 설치 미디어(DVD) 부팅을 기준으로 부팅 항목이 구성되어 있는 파일이기 때문에, 먼저 해당 BCD 를 시스템에 Import 하여 불러온 후, 아래와 같이 약간의 추가 작업을 통해 필요 없는 설정들을 지우고 NTLDR 부트 매니저를 추가로 구성해주면 됩니다.
bcdboot D:\Bootmgr-8
bcdedit /import D:\Bootmgr-8\Boot\DVD\PCAT\BCD
bcdedit /delete {default}
bcdedit /set {bootmgr} locale ko-KR
bcdedit /set {memdiag} locale ko-KR
bcdedit /create {ntldr} /d "Windows XP"
bcdedit /set {ntldr} device boot
bcdedit /set {ntldr} path \ntldr
bcdedit /displayorder {ntldr} /addfirst
bcdedit /default {ntldr}
bcdedit /import D:\Bootmgr-8\Boot\DVD\PCAT\BCD
bcdedit /delete {default}
bcdedit /set {bootmgr} locale ko-KR
bcdedit /set {memdiag} locale ko-KR
bcdedit /create {ntldr} /d "Windows XP"
bcdedit /set {ntldr} device boot
bcdedit /set {ntldr} path \ntldr
bcdedit /displayorder {ntldr} /addfirst
bcdedit /default {ntldr}
여기까지 해서 Bootmgr 부트 매니저에 대한 설치는 모두 마쳤습니다. 그럼 이제 마지막으로 현재 시스템 파티션의 부팅 섹터는 NTLDR 부트 매니저를 찾도록 되어 있기 때문에 이를 Bootmgr 부트 매니저를 찾도록 바꿔주면 됩니다. [이 때 Bootsect.exe 파일은 미리 사용할 수 있도록 준비하셔야 합니다.]
bootsect /nt60 SYS
이렇게 BootSect 도구를 통해 부팅 섹터의 수정 작업을 마쳐야만 Bootmgr 부트 매니저가 비로소 시스템의 주 부트 매니저로써 사용됩니다. 윈도우 XP 에서 Bootmgr 부트 매니저를 새로 설치하는 것도 이게 끝입니다. 간단하죠? 이제 윈도우 XP 에서도 윈도우 PE 용 WIM 부팅 이미지를 사용하여 부팅을 진행할 수 있습니다.
3. Bootmgr 부트 매니저 자동 설치(교체) 배치 파일
아래의 글에서 최신 버전을 제공하고 있습니다.
그리고 PE 에서도 이 방법으로 작업할 수 있습니다.
다시말해 기존 bcdboot명령어에서
즉, Bcdboot C:\Windows 에서
C:\Windows 부분이 D:\Bootmgr-8로 바뀌었다고 보면 되겠군요.
그럼 pe에서는 /s로 대상을 지정해 사용하면 되겠군요...
감사합니다.
한가지 의문점이 있습니다.
* 윈도우 8 64BIT로 요즘 대부분의 PC나 노트북들이 UEFI 방식으로 세팅되어서 출하되고있는듯 합니다.
문제는 64비트용 PE를 사용하기에는 지원어플이 턱없이 부족함에 효용성이 많이 떨어집니다.
따라서 기존 32비트용 PE를 부트매니저 교체방식을 이용하여 로딩시킬수 있는지 여부가 궁금합니다.
정말 유니크한 포스팅들이 저에겐 많은 도움이 됩니다. 늘 감사하게 생각하고 있습니다.
늘 건강하세요 캐플님.
이후 자체를 부트가능하게 구성해준후에 UEFI부트 항목에서 메뉴를 통해 해당 디스크를 고르면 부트되게는 됩니다
아니면 미검증이지만 grub계열을 추가해준다음 여기에서 처리하면 될 가능성이 있습니다
약간 다른 내용이지만 궁금해서 질문을 드립니다
PE에서 사용시 Bcdboot D:\Windows 하면 D의 윈도우가 PE의 BCD에 등록이 될텐데...
이것을 C의 BCD에 등록시키는 방법은 뭔가요?
https://msdn.microsoft.com/ko-kr/library/hh824874.aspx
문서 하단을 읽어보시면 될 것 같습니다.
잘 보고갑니다..^^
댓글 달기전 필독
공감백배입니다.
역시
bcdedit /create /d "Windows 98 SE" /application bootsector
bcdedit /set {GUID} device boot
bcdedit /set {GUID} path \bootsect.dos
bcdedit /displayorder {GUID} /addlast
그래서 도저히 모르겠다 싶어서 {GUID} 부분만 빼고 작성하니 에러는 없지만 네 번째 줄까지 작성해고 bootsect.dos 생성해서 재부팅해보니 목록 선택 화면도 안 나오고 그냥 지나가버립니다. 윈도우 ME+윈도우7 멀티부팅 할 땐 다른 방법으로 해아 하는 것입니까?
p.s 그리고 윈도우 98 이나 ME 는 디스크 용량 인식에 문제가 있어, 요즘의 대용량 디스크에서 98 이나 ME 를 디스크의 뒷 부분에 위치시키면 98이나 ME 에서 파티션을 인식하지 못해서 부팅이 되지 않을 수 있습니다. 그 부분도 한 번 잘 살펴보시고요.
윈도 드라이버 인증서미비 문제로 메인은 어쩔수없이 꼭 32비트만 써야하는 입장입니다.
32비트 윈도는 당연히 GPT는 인식이 불가능하니 BIOS 부팅입니다.
그런데 VHD 윈도우는 64비트로 해서 UEFI로 해보고 싶은데요.
VHD를 GPT로 포맷하여 EFI를 구성하여 64비트 윈도를 올렸으나 마땅한 부팅방법이 막막하네요.
물론 듀얼디스크로는 BIOS와 EFI를 각각 만들어 Grub4Dos를 매개체로 상호 전환할수 있었습니다.
단일 디스크일때 BIOS 부팅에서 VHD의 EFI로 넘어가는 구성은 안될까요?
bootice 등 여러가지 방법을 시도했지만 여전히 해결이 안돼네요
좋은 가르침 부탁드립니다.
@ECHO OFF
ECHO ===============================================================================
ECHO Project : Disable Patchguard
ECHO Version : 5.6
ECHO Coder : HelioS
ECHO Site : http://www.artificialaiming.net
ECHO ===============================================================================
ECHO.
ECHO * Initializing.
@setlocal ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION
@cd /d "%~dp0"
set alfanum=0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
set RandomName1=
FOR /L %%b IN (0, 1, 16) DO (
SET /A rnd_num=!RANDOM! * 62 / 32768 + 1
for /F %%c in ('echo %%alfanum:~!rnd_num!^,1%%') do set RandomName1=!RandomName1!%%c
)
set RandomName2=
FOR /L %%b IN (0, 1, 16) DO (
SET /A rnd_num=!RANDOM! * 62 / 32768 + 1
for /F %%c in ('echo %%alfanum:~!rnd_num!^,1%%') do set RandomName2=!RandomName2!%%c
)
SET BootGuid={46595952-454E-4F50-4747-554944FEEEEE}
SET SystemDirectory=%SYSTEMROOT%\System32
SET BcdEditPath=%SystemDirectory%\bcdedit.exe
ECHO * Checking BIOS/UEFI System.
%BcdEditPath% | find "winload.efi" >NUL
if %ERRORLEVEL% == 0 goto BOOT_UEFI
%BcdEditPath% | find "winload.exe" >NUL
if %ERRORLEVEL% == 0 goto BOOT_BIOS
goto INVALID_BOOT
:BOOT_UEFI
ECHO UEFI Detected.
SET PatchedWinloadName=winload_patched.efi
SET PatchedNtoskrnlName=ntoskrnl_patched.exe
SET NtoskrnlPatchedName=%RandomName1%.exe
SET WinLoadPatchedName=%RandomName2%.efi
SET SystemNtoskrnlPatchedPath=%SystemDirectory%\%NtoskrnlPatchedName%
SET SystemWinLoadPatchedPath=%SystemDirectory%\%WinLoadPatchedName%
GOTO CHECK_ARCHITECTURE
:BOOT_BIOS
ECHO BIOS Detected.
SET PatchedWinloadName=winload_patched.exe
SET PatchedNtoskrnlName=ntoskrnl_patched.exe
SET NtoskrnlPatchedName=%RandomName1%.exe
SET WinLoadPatchedName=%RandomName2%.exe
SET SystemNtoskrnlPatchedPath=%SystemDirectory%\%NtoskrnlPatchedName%
SET SystemWinLoadPatchedPath=%SystemDirectory%\%WinLoadPatchedName%
GOTO CHECK_ARCHITECTURE
:CHECK_ARCHITECTURE
ECHO Generated random names = %NtoskrnlPatchedName% - %WinLoadPatchedName%
ECHO * Checking Operating System Architecture.
if "%PROCESSOR_ARCHITECTURE%" == "AMD64" goto CHECK_VERSION
goto INVALID_ARCHITECTURE
:CHECK_VERSION
ECHO 64bit Detected.
ECHO * Checking Operating System Version.
ver | find "6.1.7601" >NUL
if %ERRORLEVEL% == 0 goto VERSION_WIN7
ver | find "6.3.9600" >NUL
if %ERRORLEVEL% == 0 goto VERSION_WIN8_1
ver | find "10.0.10586" >NUL
if %ERRORLEVEL% == 0 goto VERSION_WIN10
goto INVALID_VERSION
:VERSION_WIN7
ECHO Windows 7 Detected.
SET NewBootName=Windows 7 (Patched)
SET OriginNtoskrnlPatchedPath=%CD%\Version 6.1.7601\x64\%PatchedNtoskrnlName%
SET OriginWinLoadPatchedPath=%CD%\Version 6.1.7601\x64\%PatchedWinloadName%
goto CREATE_BOOT
:VERSION_WIN8_1
ECHO Windows 8.1 Detected.
SET NewBootName=Windows 8.1 (Patched)
SET OriginNtoskrnlPatchedPath=%CD%\Version 6.3.9600\x64\%PatchedNtoskrnlName%
SET OriginWinLoadPatchedPath=%CD%\Version 6.3.9600\x64\%PatchedWinloadName%
goto CREATE_BOOT
:VERSION_WIN10
ECHO Windows 10 Detected.
SET NewBootName=Windows 10 (Patched)
SET OriginNtoskrnlPatchedPath=%CD%\Version 10.0.10586\x64\%PatchedNtoskrnlName%
SET OriginWinLoadPatchedPath=%CD%\Version 10.0.10586\x64\%PatchedWinloadName%
goto CREATE_BOOT
:CREATE_BOOT
ECHO * Copying Patched Files.
IF NOT EXIST "%OriginNtoskrnlPatchedPath%" GOTO FILES_NOT_FOUND
IF NOT EXIST "%OriginWinLoadPatchedPath%" GOTO FILES_NOT_FOUND
COPY "%OriginNtoskrnlPatchedPath%" "%SystemNtoskrnlPatchedPath%"
COPY "%OriginWinLoadPatchedPath%" "%SystemWinLoadPatchedPath%"
ECHO * Creating New Boot Entry.
for /f "tokens=2 delims={}" %%g in ('%BcdEditPath% /create -d "%NewBootName%" -application osloader') do set BootGuid={%%g}
ECHO New Boot Entry Name = %NewBootName%
ECHO New Boot Entry GUID = %BootGuid%
%BcdEditPath% -set %BootGuid% DEVICE PARTITION=%SYSTEMDRIVE%
%BcdEditPath% -set %BootGuid% OSDEVICE PARTITION=%SYSTEMDRIVE%
%BcdEditPath% -set %BootGuid% SYSTEMROOT \Windows
%BcdEditPath% -set %BootGuid% PATH \Windows\system32\%WinLoadPatchedName%
%BcdEditPath% -set %BootGuid% KERNEL %NtoskrnlPatchedName%
%BcdEditPath% -set %BootGuid% RECOVERYENABLED 0
%BcdEditPath% -set %BootGuid% NX OptIn
%BcdEditPath% -set %BootGuid% NOINTEGRITYCHECKS 1
%BcdEditPath% -set %BootGuid% INHERIT {bootloadersettings}
%BcdEditPath% -displayorder %BootGuid% -ADDLAST
%BcdEditPath% -timeout 30
ECHO * Changing Service Startup Type.
sc config peauth start= demand >NUL
ECHO * Done.
ECHO * Please Restart your PC and select the Patched Boot Entry.
goto EXIT
:FILES_NOT_FOUND
ECHO Failure: Patch files not found.
ECHO "%OriginNtoskrnlPatchedPath%"
ECHO "%OriginWinLoadPatchedPath%"
goto EXIT
:INVALID_VERSION
ECHO Failure: Your Operating System Version is not supported.
ECHO Make sure your Operating System is fully updated using Windows Update.
ECHO.
ECHO We support the following versions:
ECHO - Windows 7 [Version 6.1.7601]
ECHO - Windows 8.1 [Version 6.3.9600]
ECHO - Windows 10 [Version 10.0.10586]
ECHO.
ECHO You are currently using:
ver
goto EXIT
:INVALID_ARCHITECTURE
ECHO Failure: You must use a 64bit Operating System of Windows Vista, Windows 7, Windows 8.1 or Windows 10.
goto EXIT
:INVALID_BOOT
ECHO Failure: Unable to determin the BIOS/UEFI System
goto EXIT
:EXIT
ECHO.
ECHO.
pause
어디서 누락된건지 잘못된건지 지정된 요소 데이터 형식이 인식되지 않거나 지정된 항목에 적용되지 않습니다. 명령줄 도움말을 보려면 "bddedit /?"를 실행하십시오. 라고 나옵니다. 물론 파일들은 이름과 경로는 멀쩡합니다...
댓글을 달아 주세요