본문 바로가기

부팅과 멀티 부팅

[Bootmgr] UEFI 부팅 환경에서 디스크에 위치한 WIM 이미지의 부팅 구성하기

왜 UEFI 부팅 환경에서 WIM 이미지로 부팅이 안 되는가?


아마 [GPT + UEFI] 부팅 환경에서 디스크에 위치한 WIM PE 이미지를 통해 부팅을 시도하시는 분들의 대부분은 위와 같은 화면을 만나게 될 겁니다. 부팅이 안 되는 거죠. 여기에는 두 가지 이유가 있습니다. 우선 그걸 이야기하도록 하겠습니다.



1. UEFI 환경은 64비트 버전의 윈도우만 지원한다.

일단 먼저 생각해야 할 것은 UEFI 부팅 환경은 64비트 윈도우에서만 지원을 한다는 겁니다. 잘 아시다시피 32비트 윈도우는 오직 MBR 부팅만 지원을 하고 UEFI 부팅은 지원을 하지 않기 때문에, UEFI 모드로는 설치할 수도 부팅할 수도 없습니다. [UEFI 의 한계가 아닌 윈도우에서 지원을 하지 않습니다. bootia32.efi 라고 지원 할 것처럼 해놓고 절대 UEFI 로는 부팅이 안 됩니다. ㅎㅎ] 이는 윈도우 PE 에서도 마찬가지입니다. 즉, 윈도우 PE 도 오직 64비트 버전으로 제작된 PE 이미지(WIM 이미지)만 UEFI 환경에서 부팅할 수 있습니다. 고로 32비트 버전의 PE 이미지는 UEFI 환경에서는 부팅할 수 없습니다.

1. UEFI 부팅 환경에서는 64비트 버전의 윈도우 PE 만 부팅할 수 있다.



2. UEFI 환경에서는 사용되는 윈도우 로더가 다르다.

다음으로 MBR 부팅과 UEFI 부팅은 부트 매니저는 물론 윈도우 로더조차 다릅니다. 이걸 잊으시면 안 됩니다. MBR 부팅에서는 부트 매니저가 Bootmgr 이고 윈도우 로더가 Winload.exe 입니다. 하지만 UEFI 부팅에서는 부트 매니저가 Bootmgfw.efi(Bootmgr.efi) 이고 윈도우 로더는 Winload.efi 입니다.

MBR 부팅

부트 매니저 : \Bootmgr
윈도우 로더 1 : \Windows\System32\Winload.exe
윈도우 로더 2 : \Windows\System32\Boot\Winload.exe

UEFI 부팅

부트 매니저 : \EFI\Microsoft\Boot\Bootmgfw.efi (bootx64.efi, bootmgr.efi, cdboot.efi)
윈도우 로더 1 : \Windows\System32\Winload.efi
윈도우 로더 2 : \Windows\System32\Boot\Winload.efi

이 때, 윈도우 로더는 두 가지로 사용되고 있는데요. 로컬 디스크에 설치한 윈도우에서는 기본적으로 \Windows\System32 폴더에 위치한 로더를 사용하고, 윈도우 PE 에서는 기본적으로 \Windows\System32\Boot 폴더에 위치한 로더를 사용합니다. 두 파일의 차이는 전혀 없고, 윈도우든 윈도우 PE 든 둘 중에 어떤 걸 사용해도 부팅이 가능하지만, 아무튼 기본은 이와 같습니다. 왜 그렇게 나눠서 사용하는지는 저도 모르겠습니다. 설계한 사람은 알겠죠.

그래서 결론적으로 WIM PE 이미지 부팅 항목의 윈도우 로더에 해당하는 Path 옵션의 설정이 다음과 같이 바뀌어야 합니다.

2. 윈도우 PE 부팅 항목의 Path 옵션을 \Windows\System32\Winload.efi 또는 \Windows\System32\Boot\Winload.efi 로 설정해야 한다.


간단하죠? 여담으로 이걸 직접 확인하는 방법은 간단하게 윈도우 8 - 64비트 버전의 설치 DVD 에 포함된 BCD 를 살펴보는 것입니다. 64비트 설치 DVD 에는 MBR 용 부트 매니저 구성과 UEFI 용 부트 매니저 구성이 함께 포함되어 있기 때문에, 이를 각각 살펴보면 그 차이를 알 수 있습니다.

윈도우 PE 4.0 의 MBR 부팅 환경용 기본 부팅 옵션 - 설치 DVD 기준

윈도우 PE 4.0 의 UEFI 부팅 환경용 기본 부팅 옵션 - 설치 DVD 기준


살펴보면 이야기한 것과 같이 Path 로 설정되는 윈도우 로더가 다른 것을 확인할 수 있습니다. 여기에 더해 isolatedcontext 라는 옵션이 추가되어 있는데요. 이 녀석은 윈도우 7 PE 3.0 에는 없고, 윈도우 8 PE 4.0 에서 추가된 옵션으로, 정확한 정체는 모르겠습니다. 무슨 설명이 있어야 정체를 알던지 할텐데 도움말에도 없고, 관련된 문서도 찾질 못하겠네요. 아무튼 중요한 건 그게 아니고 PE 4.0 기반 이미지에서는 이 옵션이 없어도 PE 로의 부팅에 지장은 없지만, PE 3.0 기반 이미지에서는 이 옵션을 구성하고 Yes 로 설정하면 부팅이 정상적으로 진행되지 않습니다. [윈도우 8 버전의 Bootmgfw.efi 기준] 일단 이것만 알아두시면 될 듯 하네요.



3. UEFI + 윈도우 PE(WIM 이미지) 부팅 결론

UEFI + 윈도우 PE(WIM 이미지) 부팅의 결론이 나왔습니다. 다시 한 번 정리하면 아래와 같습니다.

1. 64비트 버전의 윈도우 PE 이미지를 사용한다. [32비트 버전은 UEFI 환경에서 부팅 불가]
2. Path 옵션의 값을 \Windows\System32\Winload.efi 또는 \Windows\System32\Boot\Winload.efi 로 설정한다.



참고로 혹시나 하여 드리는 말인데, WIM 이미지의 위치는 GPT 디스크든, MBR 디스크든 상관 없고, 해당 볼륨의 파일 시스템도 FAT32 든, NTFS 든 상관 없습니다. UEFI 부팅 환경이라고 하여 WIM 이미지 파일이 꼭 GPT 디스크에 위치해야 한다는 법은 없다는 거죠. 기억하세요.






UEFI 부팅 환경에서 WIM 이미지 부팅 구성하기

위에서 설명한 내용을 토대로 UEFI 환경에서 디스크에 위치한 WIM 이미지의 부팅을 구성하는 것을, 윈도우 7 AIK 의 PE 3.0 버전 기반의 WIM 이미지와, 윈도우 8 ADK 의 PE 4.0 버전 기반 WIM 이미지로 나눠서 설명을 해보도록 하겠습니다. 일단 기본적인 제반 사항은 아래와 같습니다.

1. WIM 이미지는 K:\sources\boot.wim 이미지로 한다.
2. 윈도우 로더는 PE 기본값대로 \Windows\System32\Boot\winload.efi 를 사용한다.
2. 램 디스크 장치 옵션은 {ramdiskoptions} 항목이 미리 생성되어 있다고 가정하고, 그것을 사용한다.



1. 윈도우 7 AIK 로 생성한 PE 3.0 기반 64비트 버전 WIM 이미지의 부팅 항목 생성 기본

위의 내용을 토대로 UEFI 부팅 환경에서 디스크에 위치한 PE 3.0 기반 64비트 버전의 WIM 이미지에 대한 부팅을 구성하는 것의 기본은 다음과 같습니다.

bcdedit /create /d "윈도우 PE 3.0" /application osloader
└ 이 때 /d 는 부팅 항목의 표시 이름으로 적절히 지정합니다. 명령 후 생성된 부팅 항목의 GUID 식별자가 출력되며, 이후의 명령부터는 해당 GUID 식벽자를 지정하여 작업을 진행하면 됩니다. 이하 {GUID} 로 표시.

bcdedit /set {GUID} device "ramdisk=[K:]\sources\boot.wim,{ramdiskoptions}"
bcdedit /set {GUID} osdevice "ramdisk=[K:]\sources\boot.wim,{ramdiskoptions}"
bcdedit /set {GUID} path \Windows\System32\Boot\Winload.efi
bcdedit /set {GUID} systemroot \Windows
bcdedit /set {GUID} locale ko-KR
bcdedit /set {GUID} inherit {bootloadersettings}
bcdedit /set {GUID} detecthal Yes
bcdedit /set {GUID} winpe Yes
bcdedit /set {GUID} ems Yes

└ 이 때 만약 WIM 이미지 파일의 전체 경로에 공백이 포함되어 있다면 경로 전체를 ""(큰 따옴표)로 묶어주어야 하며, 아니라면 큰 따옴표는 생략해도 됩니다. 전체 경로 중 드라이브 문자는 [](대괄호)로 묶어주어야 함을 잊지 마세요.

bcdedit /displayorder {GUID} /addlast
└ 이 과정을 빼먹으면 멀티 부팅 화면에 해당 부팅 항목이 출력되지 않습니다. 반드시 잊지 마시고 목록의 가장 처음으로 등록을 원하는 경우에는 /addlast 대신 /addfirst 를 사용하면 됩니다.


간단하죠? 이 때 EMS 는 기본값은 Yes 이지만, 보통은 No 를 많이 사용합니다. [윈도우 8 에서는 기본값이 No 로 변경되었습니다.] 뭐 그 외에는 크게 더 설명할 것은 없네요.



2. 윈도우 8 ADK 로 생성한 PE 4.0 기반 64비트 버전 WIM 이미지의 부팅 항목 생성 기본

마찬가지로 위의 내용을 토대로 UEFI 부팅 환경에서 디스크에 위치한 PE 4.0 기반 64비트 버전의 WIM 이미지에 대한 부팅을 구성하는 것의 기본은 다음과 같습니다.

bcdedit /create /d "윈도우 PE 4.0" /application osloader
└ 이 때 /d 는 부팅 항목의 표시 이름으로 적절히 지정합니다. 명령 후 생성된 부팅 항목의 GUID 식별자가 출력되며, 이후의 명령부터는 해당 GUID 식벽자를 지정하여 작업을 진행하면 됩니다. 이하 {GUID} 로 표시.

bcdedit /set {GUID} device "ramdisk=[K:]\sources\boot.wim,{ramdiskoptions}"
bcdedit /set {GUID} osdevice "ramdisk=[K:]\sources\boot.wim,{ramdiskoptions}"
bcdedit /set {GUID} path \Windows\System32\Boot\Winload.efi
bcdedit /set {GUID} systemroot \Windows
bcdedit /set {GUID} locale ko-KR
bcdedit /set {GUID} inherit {bootloadersettings}
bcdedit /set {GUID} isolatedcontext Yes
bcdedit /set {GUID} bootmenupolicy Standard
bcdedit /set {GUID} detecthal Yes
bcdedit /set {GUID} winpe Yes
bcdedit /set {GUID} ems No

└ 이 때 만약 WIM 이미지 파일의 전체 경로에 공백이 포함되어 있다면 경로 전체를 ""(큰 따옴표)로 묶어주어야 하며, 아니라면 큰 따옴표는 생략해도 됩니다. 전체 경로 중 드라이브 문자는 [](대괄호)로 묶어주어야 함을 잊지 마세요.

bcdedit /displayorder {GUID} /addlast
└ 이 과정을 빼먹으면 멀티 부팅 화면에 해당 부팅 항목이 출력되지 않습니다. 반드시 잊지 마시고 목록의 가장 처음으로 등록을 원하는 경우에는 /addlast 대신 /addfirst 를 사용하면 됩니다.


뭐 크게 어려운 건 없죠? 옵션들 중에서 isolatedcontext 와 bootmenupolicy 옵션은 없어도 부팅에 지장은 없습니다.



3. PE 4.0 기반 WIM 이미지는 반드시 기본 옵션대로 생성해야 하는가?

자 그럼 PE 3.0 기반 WIM 이미지와, PE 4.0 기반 WIM 이미지는 무조건 위와 같이 기본 옵션대로 부팅 항목을 생성해야 하는 걸까요? 그건 아닙니다. 일단 아래의 내용을 보시죠.

1. PE 3.0 에서는 isolatedcontext 옵션이 Yes 라면 부팅에 실패한다. [윈도우 8 버전의 Bootmgfw.efi 기준]
2. PE 3.0 에서는 bootmenupolicy 옵션의 영향을 받지 않는다.
3. PE 4.0 에서는 isolatedcontext 옵션과 bootmenupolicy 옵션이 존재하지 않아도 부팅에 큰 영향은 없다.
4. PE 3.0 과 PE 4.0 에는 모두 ems 옵션이 존재하고 기본 값이 다르지만, 이것이 부팅에 큰 영향을 미치지는 않는다.



간단하게 결론을 말하자면 PE 4.0 기반 이미지도 PE 3.0 의 기본 옵션대로 부팅 항목을 생성하여도 일반적으로 부팅에는 별 지장이 없다는 겁니다. 하지만 PE 3.0 기반 이미지를 PE 4.0 의 옵션대로 설정하면 부팅이 정상적으로 진행되지 않을 수 있습니다. 그래서 만약에 부팅 항목에 추가하려는 WIM 이미지가 정확하게 PE 3.0 기반 이미지인지 PE 4.0 기반 이미지인지 잘 모르겠다면, PE 3.0 기반 이미지의 옵션으로 부팅 항목을 생성하면 되는 겁니다.



4. 기존 MBR 환경용으로 구성된 WIM 이미지 부팅 항목의 옵션 수정

보통 UEFI 부팅 환경에서 WIM 이미지의 부팅을 시도했다가 실패하신 분들의 대부분은, 해당 부팅 항목의 옵션이 MBR 부팅 환경용으로 구성되어 있기 때문입니다. MBR 부팅 환경용의 WIM 이미지 부팅 옵션과 UEFI 부팅 환경용의 WIM 이미지 부팅 옵션의 차이는 사실 Path 항목 하나만 다르다고 할 수 있습니다.

그래서 기존의 부팅 항목에서 Path 옵션의 값만 UEFI 환경용에 맞춰 바꿔주면 해당 이미지로 정상적으로 부팅할 수 있습니다.



단! 이것은 해당 WIM 이미지가 지금까지 말한 것과 같이 64비트 버전이라는 전제하에 이야기한 것입니다. 만약 32비트 버전이라면 이야기한 것처럼 UEFI 부팅을 지원하지 않기 때문에 이렇게 해도 아래와 같이 부팅이 실패하게 됩니다.



그러니까 어떠한 WIM 이미지에 대한 부팅 구성을 올바로 했는데 이러한 메세지가 출력되었다면, 그러니까 이건 여러분이 뭔가를 잘못한 게 아니라면, 해당 WIM 이미지 파일은 32비트 버전의 WIM 이미지 파일이라는 것이고, 그건 원래 UEFI 환경에선 부팅이 안 되는 겁니다. 안 되는 건 안 되는 겁니다. 직접 만드신 거라면 얼른 64비트 기반으로 다시 제작하시거나, 남이 만든 이미지라면 64비트 버전을 요청해보세요.






MBR + UEFI 부팅 환경 공용 WIM 이미지 부팅 구성 배치 파일

솔직하게 말해서 일일히 명령으로 만들기 짜증나잖아요? 위에서 설명한 건 그냥 그렇다는 걸 알아두시라는 의미가 강합니다. 우리는 귀찮으니까 배치 파일을 사용하도록 하죠. 아래는 위의 내용을 토대로 간단하게 짜본 배치 파일입니다. MBR 부팅 환경은 물론 이번 글에서 설명한 UEFI 부팅 환경에서도 함께 사용할 수 있도록 만들었습니다.



급하게 만들어서 제대로 다듬지는 못했지만, 정상 작동하는 것은 확인하였습니다. 실제로 사용하는 예제는 아래에서 보도록 하죠.






UEFI 부팅 환경에서 WIM 이미지 부팅 구성하기 실전 예제 - 윈도우 8 설치 부팅 구성

그럼 실제로 제가 제공해드린 배치 파일을 사용하여 UEFI 부팅 환경에서 로컬 디스크에 윈도우 8 설치 부팅을 구성해보도록 하겠습니다. 그게 여러분들도 실제로 테스트해보기 가장 좋을테니까요. 참고로 다시 한 번 말하지만 32비트 윈도우는 UEFI 에서 부팅할 수 없습니다. 그래서 테스트 예제는 윈도우 8 64비트 버전의 설치 DVD 로 합니다.


기본적으로 WIM 이미지 부팅에 꼭 필요한 램 디스크 장치 항목 옵션, 그 중에서도 범용적으로 사용되는 {ramdiskoptions} 항목이 아직 구성되어 있지 않다는 가정하에 출발하도록 하겠습니다. 일단 윈도우 8 64비트 버전의 설치 DVD 에서 Sources 폴더와 boot.sdi 파일을 아래와 같이 원하는 드라이브에 위치시킵니다. 이 때 Sources 폴더는 반드시 루트에 위치해야 하고, boot.sdi 파일의 위치는 굳이 루트가 아니더라도 상관 없습니다. 이건 기본이니까 따로 더 설명 안 하겠습니다.




준비를 마쳤으면 위에서 다운로드받은 배치 파일을 관리자 권한으로 실행한 후 아래의 과정을 차례로 진행합니다.

배치 파일에 대한 소개입니다. 저 이런 거 좋아하는 거 아시잖아요? Enter 키를 누르면 넘어갑니다.




시스템에 {ramdiskoptions} 항목이 존재하지 않을 경우에만 출력되는 과정입니다. {ramdiskoptions} 항목이 존재하면 이 단계는 자동으로 건너뛰게 됩니다. 앞서 미리 준비한 boot.sdi 파일을 통해 구성하시면 됩니다. 과정은 어렵지 않으니 스샷만 보여드리도록 하겠습니다.





본격적으로 WIM 이미지에 대한 부팅을 구성하는 과정입니다. 마찬가지로 그리 어렵지 않기 때문에 과정에 대한 설명은 생략하고 스샷만 보도록 하겠습니다.








간단하죠? 이제 실제로 해당 WIM 이미지에 대한 부팅 항목이 정상적으로 출력되고, 부팅도 문제 없이 진행되는지 확인해보았습니다. 이제부터의 사진들은 폰카로 찍은 것이라 사진의 상태는 이해 부탁드립니다. 제가 좀 많이 가난하거든요. 아무튼 부팅 항목도 잘 생성되었고, 부팅도 정상적으로 진행되는 것을 확인하실 수 있습니다.




혹시 모르니 실제로 설치도 한 번 진행해보죠. 참고로 제 경우 CMOS 셋업에서 디스크 4 를 첫 번째 하드 디스크로 설정했습니다. 그래서 디스크 4 에 설치하고 있는 겁니다. 디스크 0 에 있는 MBR 부팅용 윈도우 8 을 밀고 새로 설치하기엔 너무 힘들잖아요? 그걸로 지금 작업하고 이 글도 쓰고 있는 건데 말이죠. 각설하고 그냥 아주 깔끔하게 미리 설치되어 있던 윈도우도 포맷하고, 설치를 진행했습니다.






부팅은 물론 설치도 정상적으로 되는 것을 확인하실 수 있죠? 이로써 UEFI 환경에서 WIM 이미지로 부팅하여 그것을 실제로 사용하는 것까지 아무런 문제가 없다는 것을 확인하실 수 있습니다. 설치를 완료한 기념으로 진짜로 UEFI 부팅 환경으로 설치가 완료된 건지 확인해보죠.

[윈도우 8, 7, 비스타] 자신의 윈도우가 BIOS 부팅인지 UEFI 부팅인지 설치 정보를 확인하는 방법



EFI(UEFI) 맞죠? 여기서 뭐 더 보여드릴 건 없네요. ^^


댓글에서 질문은 오후에 확인했는데, 간단하게 할까 하다가 좀 이것저것 설명도 추가하다 보니 약간 길어졌네요. 어쩌다 보니 배치 파일까지 작성하고, 그 외에 뭐 혹시 잘못된 부분은 없나 테스트도 하고, 뭐 그러다가 좀 늦었습니다. 아무튼, 어떻게 잘 보셨나 모르겠네요. 댓글에서 질문 주신 분 혹시나 오래 기다리셨다면 죄송합니다.

참고로 아래는 마이크로소프트의 테크넷 문서인데, UEFI 기반 환경에서 하드 디스크에 아예 처음부터 부트 매니저를 구성하고, 추가로 윈도우 PE 의 부팅도 구성하는 것을 담고 있습니다. 근데 이 글의 주제완 크게 상관이 없는 내용이 좀 많습니다. 그래도 마이크로소프트사의 공식 자료이니 참고용으론 괜찮을 거라고 생각합니다.



마무리 하죠. 이런 식으로 자신이 사용할 64비트 버전의 WIM 이미지를 부팅에 추가하여 사용하시면 됩니다. 또 말하는 거지만 32비트 버전의 WIM 이미지는 안 됩니다. 그럼 배치 파일 잘 사용하세요. 이상입니다. ^^