The Desktop FilesWindows XP와 Windows PE 2.0 이중 부팅

Wes Miller

이 기사의 코드 다운로드: Desktop2008_02.exe (151KB)

The Desktop Files의 이전 연재 기사에서 Windows PE가 복구용 도구가 되었음을 언급하고 두 번째 파티션에서 이 도구를 사용하는 방법을 설명한 바 있습니다.########## 그런데 최근 어떤 질문을 받은 것을 계기로 Windows PE 2.0과 Windows XP를 함께 사용하는 데 대해 새롭게 조명하는 기사를 써보면 괜찮겠다는 생각이 들었습니다.

대다수 사용자는 당분간은 Windows® XP를 사용할 것이며 Microsoft에서는 Windows PE 2.0을 지원하는 방향으로 나아갈 것입니다. 즉, Windows PE 1.x에 대한 업데이트는 더 이상 발표하지 않습니다.

Windows PE 1.x와 2.x의 중요한 차이점 중 하나는 Windows PE 2.x의 경우 Windows PE 1.x처럼 특별한 방법을 사용하는 것이 아니라 표준 부팅 인터페이스를 통해 부팅할 수 있다는 점입니다. Windows PE 1.x 또는 2.x를 별도의 파티션에서 부팅할 수도 있지만 운영 체제가 설치된 부팅 파티션에서 부팅하면 앞으로 살펴볼 내용과 같이 많은 면에서 매우 편리합니다.

Windows 이중 부팅

Windows NT®에서는 이중 부팅이 비교적 용이했습니다. 하지만 EFI(Extensible Firmware Interface) 기반 컴퓨터가 기존 IBM PC AT BIOS를 대체하기 시작함에 따라 Microsoft에서는 EFI에 최적화되어 작동하고 모든 아키텍처에 하나의 부팅 메커니즘이 공통적으로 사용되도록 Windows 부팅 메커니즘을 변경했습니다. Windows Vista®에서부터 도입된 새로운 Windows 부팅 메커니즘을 BCD(부팅 구성 데이터베이스)라고 합니다(microsoft.com/whdc/system/platform/firmware/bcd.mspx 참조). 하지만 기존의 boot.ini나 새로운 BCD 메커니즘 모두에서 Windows는 일반적으로 다른 운영 체제로 부팅할 수 있습니다. 물론 이 경우에는 부팅 프로세스의 제어 권한이 다른 부팅 로더로 넘어갑니다.

본격적인 설명을 시작하기에 앞서 Windows PE 2.0은 ACPI(고급 구성 및 전원 인터페이스)와 완전하게 호환되고 384MB의 RAM(이상적으로는 512MB)이 장착된 시스템에서만 작동한다는 점을 기억해야 합니다. 5월호 칼럼(technetmagazine.com/issues/2007/05/DesktopFiles)에서 언급했듯이 ACPI를 지원하지 않는 시스템에서는 Windows PE 2.0으로 부팅할 수 없으며 Windows PE 2.0은 RAMDisk로 부팅해야 하므로 RAMDisk, 스크래치 공간 및 모든 RAM 작업 집합을 수용하기에 충분한 RAM이 있어야 합니다. 시스템의 RAM이 384MB 미만인 경우에는 Windows PE 1.6을 사용하는 것이 좋습니다. 아무리 Windows PE 크기를 줄이더라도 256MB에서는 제대로 실행할 수 없습니다.

해결할 문제

이제 Windows XP와 동일한 파티션에서 Windows PE 2.0을 부팅하여 해결할 수 있는 문제에 대해 살펴보겠습니다.

전체 시스템 복구 전체 시스템 복구는 Windows XP 파티션에서 곧바로 Windows PE를 부팅할 때 수행 가능한 작업 중 하나입니다. 이전 버전인 Windows PE 1.6과 마찬가지로 Windows PE 2.0은 완전히 RAMDisk로 부팅할 수 있기 때문에 전체 디스크의 이미지를 다시 만들 수 있습니다. 또한 전체 파티션 이미지를 다시 만들 필요가 없기 때문에 ImageX를 사용하여 Windows XP 파일을 그 자체만으로 복원할 수 있습니다.

시작할 때 Windows PE로 부팅할 수 있기 때문에 사용자가 원격으로 작업할 때도 자신의 시스템을 복구할 수 있습니다. 보조 파티션, 네트워크 공유(모바일 사용자가 아닌 경우), 복구 DVD 또는 USB 하드 디스크의 이미지를 사용할 수 있으며, ImageX를 사용할 때는 복구 중인 파티션에 저장할 수도 있습니다. 이러한 디스크 복구는 물리적인 디스크 손상을 제외한 많은 문제점의 효과적인 해결 방안이 됩니다. 물론 데이터가 이미 보호되고 있고 복구 과정의 일부로 복원하는 경우가 아니면 사용자 데이터를 복원하는 데에는 큰 효과가 없습니다. 이러한 손실을 방지하려면 로밍 프로필을 사용하고 PC에서 데이터를 백업해야 한다는 것을 기억하십시오. 또한 사용자가 특별한 조치를 취하지 않더라도 EFS 암호화 키 재설정으로 인한 손실을 비롯한 잠재적인 데이터 손실의 위험을 줄일 수 있는 복구 메커니즘을 사용해야 합니다.

파일 복구 Windows PE에서는 Windows 기본 설치로 부팅하지 않더라도 시스템을 시동하고 실행할 수 있는 메커니즘도 제공합니다. 이 경우에는 부팅한 후 사용자 데이터를 다른 시스템으로 복구하거나(사용자가 웜 백업 시스템을 사용할 수 있는 경우) 다른 위치로 복구하여 사용자가 신속하게 작업을 계속하도록 할 수 있습니다.

시스템 복구 마지막으로, Windows XP에서 Windows PE를 부팅하면 문제 해결 스크립트 또는 간단한 복구 작업이나 복구 응용 프로그램을 실행하여 시스템을 복구할 수 있습니다. 복구 과정은 전체 시스템 복구와 비슷하지만 범위가 더 좁고 사용자 데이터에 위험이 없습니다.

지금까지 Windows XP 파티션에서 Windows PE를 부팅할 경우 가능한 작업에 대해 살펴보았으므로 이제 원하는 다른 솔루션에 프로세스를 적용할 수 있도록 이 프로세스의 작동 방식에 대해 알아보겠습니다.

Windows Vista 이전

Windows Vista가 출시되기 이전의 BIOS/MBR(마스터 부트 레코드) 기반 시스템은 다음과 같이 부팅되었습니다. BIOS가 부팅 장치를 가리킵니다. 하드 디스크의 경우에는 디스크의 MBR을 가리킵니다. MBR에서는 부팅할 파티션을 지정하는 코드를 실행합니다. 이 파티션은 활성 플래그가 설정된 첫 번째 파티션입니다. diskpart의 최초 버전에서는 파티션을 비활성화할 수 없었습니다. 즉, 활성 플래그를 제거할 수 없었습니다. 이 문제를 해결하기 위한 스위치가 diskpart에 추가되었는데, 이 스위치가 없다면 파티션 테이블 순서에서 활성 플래그가 설정된 파티션은 첫 번째 파티션일 것입니다. 파티션에는 다음으로 실행할 코드를 지시하는 부트 섹터가 들어 있습니다. Windows NT부터 Windows Server® 2003까지는 실행할 코드가 ntldr이라는 파일(확장명 없음)에 있습니다. 디스크를 포맷한 적이 없고 Windows를 설치하지 않은 상태에서 부팅하려고 하면 "NTLDR not found(NTLDR을 찾을 수 없음)"라는 오류 메시지가 나타납니다.

ntldr은 하위 버전과는 완벽하게 호환되지만 당연히 상위 버전과는 호환되지 않습니다. 즉, Windows XP ntldr에서는 Windows 2000을 부팅할 수 있지만 그 반대로는 부팅되지 않습니다. 이런 이유로 이중 부팅을 계획할 때는 가장 이전 버전의 운영 체제를 먼저 설치해야 합니다. 게다가 ntldr에는 버전 번호가 추가되어 있지 않으므로 이 방식을 지키는 것이 더욱 중요합니다.

ntldr은 NTDetect.com을 시작하는 리얼 모드(16비트) 응용 프로그램입니다. NTDetect.com은 기본 장치 검색을 수행하고 커널인 ntoskrnl.exe(여러 파일 중 하나이며 항상 ntoskrnl.exe로 이름이 변경됨)를 시작합니다. 커널은 Windows 부팅 프로세스의 핵심 구성 요소입니다.

이는 부팅 프로세스를 지극히 단순하게 설명한 것으로, Win32®의 초기화에 대한 내용은 이 칼럼에는 적절하지 않으므로 생략했습니다. 이에 대한 자세한 내용은 Mark Russinovich와 David Solomon의 Windows Internals, Fourth Edition(Microsoft Press®, 2004)을 참조하시기 바랍니다.

CD에서 부팅할 때는 Windows Setup 및 Windows PE에서 ntldr 대신 setupldr.bin을 실행한다는 점도 알아두어야 합니다. 이 파일에는 ntldr에서는 불가능한 CD 부팅을 가능하게 하는 약간 다른 부팅 코드가 들어 있습니다. 따라서 Windows PE 1.x를 부팅하려면 setupldr.bin의 이름을 ntldr로 변경하여 디스크에 넣어야 합니다. 또한 setupldr.bin은 CD 부팅만을 위해 설계되었기 때문에 boot.ini가 필요 없는 것으로 간주되었고 이로 인해 파일에서 boot.ini 파일을 로드할 수 없습니다.

Windows Vista 이상

Windows Vista에서는 이 프로세스의 많은 부분이 변경되었습니다. 나아가 Windows Server 2008에서는 지금까지 Itanium 기반 시스템 외에는 불가능했던 EFI에서의 IA32(32비트 지원) 부팅까지 가능하게 되었습니다. BIOS 기반 시스템의 경우에는 부팅 프로세스의 초기 단계가 대부분 변경되지 않았습니다. 중요한 차이점이라면 BOOTMGR이 부팅 로더로서 초기화되고 이후 단계를 수행한다는 정도입니다.

BOOTMGR은 부팅 디렉터리에서 실질적으로 자체 레지스트리 하이브인 BCD 파일을 찾습니다. BCD에는 부팅할 부팅 항목(기본값 포함)이 포함됩니다. 이미지 형식(실행 파일 형식)은 그림 1을 참조하고 실행하는 특정 응용 프로그램 종류는 그림 2를 참조하십시오. 이러한 항목 중 하나 이상은 ntldr에 대한 참조일 수 있습니다. 그중 ntldr 로드에 사용되는 잘 알려진 GUID를 실제로 참조하는 항목은 하나뿐입니다. 이에 대해서는 그림 3의 다섯 번째 줄을 참조하십시오. 그런 다음 bootmgr은 시스템이 부팅 중인지, 최대 절전 모드에 상태인지, 아니면 ntldr 또는 다른 부팅 관리자로 부팅하는지(이 경우 다른 부트 섹터를 가리키고 해당 로드를 실행함) 여부에 따라 다음으로 로드할 항목을 결정합니다. 이는 Windows가 아닌 운영 체제로 이중 부팅을 한 경우에 일반적으로 발생하는 상황입니다. 자세한 내용은 microsoft.com/whdc/system/platform/firmware/bcd.mspx를 참조하십시오.

Figure 3 표준 응용 프로그램 개체

설명 BCDEdit ID GUID
Windows 부팅 관리자 {bootmgr} 9dea862c-5cdd-4e70-acc1-f32b344d4795
펌웨어 부팅 관리자 {fwbootmgr} a5a30fa2-3d06-4e9f-b5f4-a01df9d1fcba
Windows 메모리 테스터 {memdiag} b2721d73-1db4-4c62-bf78-c548a880142d
Windows 다시 시작 응용 프로그램 별칭 없음 147aa509-0358-4473-b83b-d950dda00615
레거시 Windows 로더 {ntldr} 466f5a88-0af2-4f76-9038-095b170dc21c
현재 부팅 항목 {current} fa926493-6f1c-4193-a414-58f0b2456d1e
기본 부팅 항목 {default} 사전 정의된 GUID 없음
     

Figure 2 응용 프로그램 유형

설명 설명
펌웨어 부팅 관리자 0x1 EFI 시스템에만 적용됩니다.
Windows 부팅 관리자 0x2 부팅 흐름을 제어합니다. 이중 부팅 시스템에서는 사용자에게 부팅 선택 메뉴를 표시합니다.
Windows 부팅 로더 0x3 Windows의 특정 버전 또는 구성을 로드합니다.
Windows 다시 시작 응용 프로그램 0x4 컴퓨터가 최대 절전 모드에서 다시 시작될 때 Windows를 실행 상태로 복원합니다.
Windows 메모리 테스터 0x5 메모리 진단 응용 프로그램입니다.
Ntldr 0x6 PC/AT BIOS 시스템에만 적용됩니다. Windows Vista 이전 버전의 Windows를 로드합니다.
부팅 섹터 0x8 16비트 리얼 모드 응용 프로그램입니다. PC/AT BIOS 시스템에만 적용됩니다. 부팅 프로세스를 다시 시작하고 Windows가 아닌 운영 체제를 로드하는 데 사용할 수 있습니다.
     

Figure 1 이미지 형식

설명
펌웨어 응용 프로그램 0x1
부팅 응용 프로그램 0x2
Ntldr 기반 로더 개체 0x3
리얼 모드 응용 프로그램 0x4
   

Windows Vista의 부팅 인프라는 이전 버전보다 훨씬 체계적으로 수정되었습니다. 즉, bootmgr 외부에서는 모든 부팅 코드가 루트 수준 \boot 디렉터리 안에 존재하며 BCD에서 지정된 후 Windows별 바이너리로 전달됩니다.

Windows XP와 Windows PE 2.0 부팅

이제 통합된 복구 도구로서 Windows PE 2.0를 추가하는 동시에, Windows XP 또는 이전 버전의 Windows로 계속 부팅할 수 있게 해주는 매개체로 Windows PE가 어떻게 이용되는지 Windows Vista 부팅 관리자를 사용하면서 이해할 수 있을 것입니다.

물론 부팅 프로세스에 새로운 단계를 추가하게 되지만 이는 Microsoft의 의도적인 설계입니다. 새로운 bootmgr 인프라에서는 기존의 ntldr 및 다른 타사 부팅 관리자의 이전 버전과 호환되어야 한다는 점을 인지하고 이러한 솔루션을 지원하도록 bootmgr을 설계한 것입니다.

지금까지 Windows가 부팅되는 과정과 새로운 BCD의 작동 방식을 알아보았습니다. 그렇다면 이 둘을 결합하여 Windows PE 2.0를 기존 Windows XP 설치에 추가하려면 어떻게 해야 할까요? 시스템에 bootmgr을 시작하도록 지시하는 부팅 코드인 Windows Vista 부트 섹터는 두 가지 방법으로 작성할 수 있습니다. 그중 하나는 diskpart를 사용하여 Windows PE 2.0으로 새 파티션을 만들고 포맷하는 방법입니다. 하지만 이미 Windows XP가 설치되어 있으며 이를 손상하거나 이동해서는 안 되므로 여기서는 이 방법이 적합하지 않습니다. 대신 다음 프로세스를 사용합니다.

  1. Windows PE 2.0 부팅 CD에 bootsect.exe 및 bcdedit.exe 파일이 포함되도록 합니다. 이 두 파일은 Windows Vista 설치 DVD에 있습니다.
  2. Windows XP 시스템을 Windows PE 2.0 CD로 부팅합니다.
  3. 부팅되면 다음 명령을 실행합니다.
    bootsect.exe /NT60 ALL

그러면 부팅 섹터가 bootmgr을 시작할 수 있는 Windows Vista 호환 부팅 섹터로 설정됩니다.

4. 부팅 관리자를 하드 디스크에 복사합니다.

    xcopy BOOTMGR C:\BOOTMGR /I

5. 하드 디스크의 \BOOT 디렉터리에 boot.SDI 파일을 복사합니다. Windows PE를 실행하는 동안에는 잠겨서 복사할 수 없게 되므로 부팅하기 전에 이 파일의 복사본을 만들어야 합니다.

    xcopy BOOT.SDI C:\BOOT\ 

원본 경로를 적절하게 수정합니다.

6. 하드 디스크에 boot.WIM을 복사합니다. 실행 중인 동안에는 파일을 복사할 수 없으므로 SDI와 마찬가지로 여분의 복사본을 준비해야 합니다.

    xcopy BOOT.WIM C:\BOOT\BOOT.WIM 

원본 경로를 적절하게 수정합니다.

7. 이제 BCD 저장소를 만듭니다.

    bcdedit /createstore

8. 다음으로 Windows PE를 로드할 BCD 항목을 만듭니다.

    bcdedit /create {ramdiskoptions} /d "Boot Windows PE"
    bcdedit /set {ramdiskoptions} ramdisksdidevice partition=c:
    bcdedit /set {ramdiskoptions} ramdisksdipath \boot\boot.sdi
    bcdedit /create /d "Windows PE" /application OSLOADER

9. 마지막 줄에서 GUID가 반환됩니다. {YOURGUID}를 반환된 실제 GUID로 바꿉니다. 이는 그림 4와 같이 하드 디스크에서 Windows PE를 부팅하는 RAMDisk에 추가할 항목입니다.

Figure 4 하드 디스크에서 Windows PE를 부팅하는 RAMDisk에 추가될 항목

bcdedit /set {YOURGUID} device ramdisk=[c:]\boot\boot.wim,{ramdiskoptions}
bcdedit /set{YOURGUID} path \windows\system32\winload.exe
bcdedit /{YOURGUID} osdeviceramdisk=[c:]\boot\boot.wim,{ramdiskoptions}
bcdedit /set{YOURGUID} systemroot \windows
bcdedit /set{YOURGUID} winpe yes
bcdedit /set {YOURGUID} detecthal yes

10. 부팅 관리자가 시작되도록 bootmgr 항목을 만듭니다.

    bcdedit /create {bootmgr} /d "Boot Manager"
    bcdedit /set {bootmgr} device boot

11. 마지막으로, 기존 Windows 설치에 대한 BCD 항목을 설정합니다. 여기에서 "Windows XP" 부분은 부팅 관리자 부팅 메뉴에 표시하고자 하는 텍스트로 변경합니다. 마지막 명령은 이 항목이 부팅 메뉴의 첫 번째(기본) 항목이 되도록 설정하는 명령입니다.

    bcdedit /create {ntldr} /d "Windows XP"
    bcdedit /set {ntldr} device partition=C:
    bcdedit /set {ntldr} path \ntldr
    bcdedit /displayorder {ntldr} /addfirst

12. 이제 시스템을 다시 시작하면 적절한 부팅 메뉴 항목을 선택하여 Windows의 이전 설치 또는 Windows PE 2.0을 시작할 수 있습니다. 그림 5에서 bcdedit /enum all의 샘플 출력을 볼 수 있습니다. 이 명령을 실행하면 항목이 추가된 후 BCD에 포함되어 있는 모든 항목이 나열됩니다. 이 명령은 Windows PE 1.6의 명령입니다.

샘플 입력

샘플 입력  (더 크게 보려면 이미지를 클릭하십시오.)

필자는 이 작업을 자동으로 수행할 수 있는 스크립트를 작성하고 있습니다. 현재 이 스크립트는 부팅 파일을 하드 디스크에 복사하고 BCD 항목을 설정하는 프로세스만 수행할 수 있고, Windows를 실행하는 동안 부팅 섹터를 새 Windows Server 2008 값으로 설정할 수는 없습니다. 이 설정 과정은 Windows PE에서 오프라인으로 수행해야 합니다. 이 스크립트는 TechNet Magazine 웹 사이트(technetmagazine.com)의 코드 다운로드 섹션에서 다운로드할 수 있습니다. 스크립트를 실행하려면 현재 실행 중인 VBScript와 같은 디렉터리에 다음 항목이 있어야 합니다.

  1. BCDEdit
  2. BOOTMGR
  3. Windows Vista 또는 Windows PE 2.0 미디어의 \BOOT\ 디렉터리
  4. 유효한 부팅 가능 Windows PE 2.0 BOOT.WIM 파일이 있는 \SOURCES\ 디렉터리

이 스크립트는 BCD를 만들고 적절한 부팅 파일을 복사합니다. Windows PE로 부팅하고 bootsect를 실행한 후에는 이중 부팅할 수 있습니다.

이중 부팅 취소

이중 부팅 취소는 이중 부팅을 사용하도록 설정하는 것보다 쉽습니다. 다음 명령을 실행하여 부팅 섹터를 Windows Vista 이전의 부팅 섹터로 복원하기만 하면 됩니다.

bootsect.exe /NT52 ALL

복원된 뒤 bootmgr과 \boot 디렉터리를 삭제할 수 있습니다. 다음에 다시 부팅할 때 부팅 섹터는 강제로 ntldr이 시작되도록 하고 Windows PE 2.0과 모든 Windows Vista 부팅 이진 파일을 부팅 흐름에서 완전히 제거합니다.

Wes Miller는 텍사스 오스틴 소재 Initiate Systems(InitiateSystems.com)에서 기술 제품 관리자로 근무하고 있습니다. 이전에는 Winternals Software에서 Microsoft 프로그램 관리자로 근무했습니다. 문의 사항이 있으신 분은 technet@getwired.com으로 연락하시기 바랍니다.

© 2008 Microsoft Corporation 및 CMP Media, LLC. All rights reserved. 이 문서의 전부 또는 일부를 무단으로 복제하는 행위는 금지됩니다..