Sunday, August 27, 2017

windows recovery environment partiton

GPT 방식의 윈도우 파티션 구성에서 ESD (EFI Boot system)과 함께 MSR, 리커버리 파티션 등을 설치할 것을 권하고 있다.
윈도우 7, 8 , 8,1, 10까지 동일한 방식을 권장하는 것으로 보이며 microsoft 사이트에서도 해당 정보들이 혼재되어 나타난다.
최신 OS에서 파티션 구성을 어떻게 해야 할지 개념이 명확하지 않아 혼란 스러운 상황이다.

그 중에서도 리커버리 파티션의 경우 만들라고는 되어있으나, 막상 어떤 방식으로 리커버리 환경을 구성할 지도 잘 제시되어 있지 않다.
아래의 sysnet.pe.ke는 정성태 (kevin13@chol.net) 남이 운영하는 사이트로 가장 정리가 잘 된 것 같아 다음에 설치를 대비해 복사해 둔다.

http://www.sysnet.pe.kr/Default.aspx?mode=2&sub=0&detail=1&pageno=0&wid=11209&rssMode=1&wtype=0


Windows 10의 Recovery 파티션을 삭제 및 새로 생성하는 방법

이전 글에서 복구 모드로의 부팅을 설명했는데요.


Windows 10의 복구 콘솔로 부팅하는 방법
; http://www.sysnet.pe.kr/2/0/11207

복구 모드와 '복구 파티션(Recovery partition)'과는 무슨 관계가 있을까요? ^^

우선, "Disk Management" 관리 콘솔을 이용해 복구 파티션이 있는지 확인할 수 있습니다.

boot_recovery_mode_1.png

그리고, 자신의 Windows 10 PC에서 정상적으로 복구 콘솔 기능이 동작하고 있는지 reagentc.exe를 관리자 권한으로 실행해 보면 알 수 있습니다.

C:\Windows\System32>reagentc /info
Windows Recovery Environment (Windows RE) and system reset configuration
Information:

    Windows RE status:         Enabled
    Windows RE location:       \\?\GLOBALROOT\device\harddisk0\partition1\Recovery\WindowsRE
    Boot Configuration Data (BCD) identifier: cb172ec6-1b4f-11e7-947f-da9018c8edfd
    Recovery image location:
    Recovery image index:      0
    Custom image location:
    Custom image index:        0

REAGENTC.EXE: Operation Successful.

"Windows 10의 복구 콘솔로 부팅하는 방법" 글에서 설명한 데로 복구 콘솔로 진입한다는 것은 곧, "\\?\GLOBALROOT\device\harddisk0\partition1\Recovery\WindowsRE"에 저장된 winre.wim 이미지를 사용한다는 것과 같습니다.

그런데, 복구 콘솔로 진입한 경우에 나오는 "X:" 드라이브가 좀 재미있습니다. 해당 드라이브는 "\\?\GLOBALROOT\device\harddisk0\partition1\Recovery\WindowsRE" 폴더에 직접 매핑되는 것은 아니고, 윈도우는 RAM DISK를 만들어 그곳에 WindowsRE 폴더의 내용을 복사해 복구 콘솔을 운영하는 방식으로 동작합니다. 이에 관해 다음의 문서에서 설명하는,

Windows Recovery Environment (Windows RE)
; https://msdn.microsoft.com/en-us/windows/hardware/commercialize/manufacture/desktop/windows-recovery-environment--windows-re--technical-reference

bcdedit /enum all 명령어로 그 힌트를 찾을 수 있습니다.

Windows Boot Loader
-------------------
identifier              {f4117904-10c3-11e7-b9ca-9b96daeebba1}
device                  ramdisk=[unknown]\Recovery\WindowsRE\Winre.wim,{f4117905-10c3-11e7-b9ca-9b96daeebba1}
path                    \windows\system32\winload.efi
description             Windows Recovery Environment
locale                  en-US
inherit                 {bootloadersettings}
displaymessage          Recovery
osdevice                ramdisk=[unknown]\Recovery\WindowsRE\Winre.wim,{f4117905-10c3-11e7-b9ca-9b96daeebba1}
systemroot              \windows
nx                      OptIn
bootmenupolicy          Standard
winpe                   Yes




물론, 복구 파티션은 삭제해도 상관없습니다. 그래도 여전히 윈도우 부팅은 가능하고 단지 복구 콘솔로의 진입만 못하는 것뿐입니다.

실제로 ^^ 한번 삭제를 해볼까요? 관리자 권한의 diskpart.exe를 실행하고,

C:\Windows\System32>diskpart

Microsoft DiskPart version 10.0.15063.0

Copyright (C) Microsoft Corporation.
On computer: TESTPC

DISKPART>

윈도우가 설치된 디스크를 선택한 후,

DISKPART> list disk

  Disk ###  Status         Size     Free     Dyn  Gpt
  --------  -------------  -------  -------  ---  ---
  Disk 0    Online           64 GB   450 MB        *
  Disk 1    Online           24 GB      0 B        *

DISKPART> sel disk 0

Disk 0 is now the selected disk.

해당 디스크의 "Recovery" 파티션까지 선택한 다음,

DISKPART> list part

  Partition ###  Type              Size     Offset
  -------------  ----------------  -------  -------
  Partition 1    Recovery           449 MB  1024 KB
  Partition 2    System             100 MB   451 MB
  Partition 3    Reserved            16 MB   551 MB
  Partition 4    Primary             63 GB   567 MB

DISKPART> select part 1

이렇게 삭제할 수 있습니다.

DISKPART> delete part override

DISKPART> list part

  Partition ###  Type              Size     Offset
  -------------  ----------------  -------  -------
  Partition 2    System             100 MB   451 MB
  Partition 3    Reserved            16 MB   551 MB
  Partition 4    Primary             63 GB   567 MB

이제 다시 "Advanced startup"으로 재부팅하는 경우, 다음 화면과 같이 "Troubleshoot"로 들어가도 "Command Prompt"로의 (들어가는 메뉴가 없어져) 복구 콘솔로 들어갈 수 없습니다.

recovery_partition_2.png

이런 상황에서 reagentc.exe를 실행해 보면 다음과 같이 "Windows RE status"가 "Disabled"로 나옵니다.

C:\Windows\system32>reagentc /info
Windows Recovery Environment (Windows RE) and system reset configuration
Information:

    Windows RE status:         Disabled
    Windows RE location:
    Boot Configuration Data (BCD) identifier: f411790a-10c3-11e7-b9ca-9b96daeebba1
    Recovery image location:
    Recovery image index:      0
    Custom image location:
    Custom image index:        0

REAGENTC.EXE: Operation Successful.

즉, Recovery Partition을 지워도 "복구 모드"로의 부팅은 되지만, 그 내부에 포함된 "Command Prompt"로의 진입만 못하는 것뿐입니다.




자, 그럼 다시 복구 콘솔을 띄우고 싶다면 - 즉, 정상적인 Recovery partition을 만들려면 어떻게 해야 될까요? 한 마디로, "\Recovery\WindowsRE\Winre.wim" 파일이 있는 파티션을 만들어 주기만 하면 됩니다.

이를 위해 우선, "Disk Management" 관리 콘솔을 이용해 다시 해당 영역을 Primary 파티션으로 만들어 NTFS로 포맷해 줍니다. (물론, diskpart로 직접 파티션을 만들어도 됩니다.)

recovery_partition_3.png

보는 바와 같이 현재 F 드라이브로 할당되어 있습니다. 이제 winre.wim 파일만 구해주면 되는데, 이에 대한 방법은 다음의 글에 자세히 나옵니다.

Customize Windows RE
; https://msdn.microsoft.com/en-us/windows/hardware/commercialize/manufacture/desktop/customize-windows-re

정리해 보면, 우선 "d:\mount" 폴더를 만들고 설치 디스크로부터 /sources/install.wim 파일을 복사해 옵니다. 그다음, 아래의 명령어로 install.wim 파일의 내용을 마운트시켜 풀어줍니다.

md d:\mount\windows

Dism /Mount-Image /ImageFile:d:\mount\install.wim /Index:1 /MountDir:d:\mount\windows

위의 명령어가 실행된 후, "D:\mount\windows\Windows\System32\Recovery" 폴더를 보면 "Winre.wim" 파일이 있는데, 그 파일을 F 드라이브의 f:\temp 폴더에 복사해 줍니다. 그런 후, "Mount-Image" 시켰던 install.wim 파일을 다음의 명령으로 해제(unmount)해 줍니다.

Dism /Unmount-Image /MountDir:d:\mount\windows /Discard

(* 위의 명령이 실행되고 나면, d:\mount\windows 폴더 하위에 풀려있던 모든 파일들이 삭제됩니다.)

이제 reagentc.exe를 다음과 같이 실행해 줍니다.

F:\temp>reagentc /setreimage /path f:\temp\winre.wim
Directory set to: \\?\GLOBALROOT\device\harddisk0\partition4\temp

REAGENTC.EXE: Operation Successful.

그런 다음, "/enable" 옵션으로 다시 실행해 주면,

F:\temp>reagentc /enable
REAGENTC.EXE: Operation Successful.

temp 폴더에 복사했던 winre.wim 파일이 없어지고, 대신 f:\Recovery\WindowsRE 폴더가 생성된 후 그 안에 winre.wim 파일이 복사됩니다. 이 상태에서 reagentc /info로 복구 콘솔이 가능해졌는지를 확인할 수 있습니다.

F:\Recovery>reagentc /info
Windows Recovery Environment (Windows RE) and system reset configuration
Information:

    Windows RE status:         Enabled
    Windows RE location:       \\?\GLOBALROOT\device\harddisk0\partition4\Recovery\WindowsRE
    Boot Configuration Data (BCD) identifier: f411790a-10c3-11e7-b9ca-9b96daeebba1
    Recovery image location:
    Recovery image index:      0
    Custom image location:
    Custom image index:        0

REAGENTC.EXE: Operation Successful.

특이한 것은, harddisk0\partition4에서처럼 현재 4번 파티션으로 할당된 것을 볼 수 있습니다. 이는 Disk Management 관리 콘솔에서 파티션을 생성했을 때 정해진 것으로 diskpart에서도 4번이라고 나옵니다.

C:\Windows\system32>diskpart

Microsoft DiskPart version 10.0.14393.0

Copyright (C) 1999-2013 Microsoft Corporation.
On computer: TESTPC

DISKPART> list disk

  Disk ###  Status         Size     Free     Dyn  Gpt
  --------  -------------  -------  -------  ---  ---
  Disk 0    Online           64 GB  1024 KB        *
  Disk 1    Online           24 GB      0 B        *

DISKPART> sel disk 0

Disk 0 is now the selected disk.

DISKPART> list part

  Partition ###  Type              Size     Offset
  -------------  ----------------  -------  -------
  Partition 4    Primary            449 MB  1024 KB
  Partition 1    System             100 MB   451 MB
  Partition 2    Reserved            16 MB   551 MB
  Partition 3    Primary             63 GB   567 MB

상관없습니다. 재부팅하고 나면, 다시 다음과 같은 순서로 파티션 정렬이 됩니다.

  Partition ###  Type              Size     Offset
  -------------  ----------------  -------  -------
  Partition 1    Primary            449 MB  1024 KB
  Partition 2    System             100 MB   451 MB
  Partition 3    Reserved            16 MB   551 MB
  Partition 4    Primary             63 GB   567 MB

"reagentc.exe /enable" 명령어로 인해 이제부터 "복구 파티션"으로써의 기능이 실제로 동작하게 됩니다. 즉, 이 상태에서 "Advanced startup"으로 재부팅하면 정상적으로 X: 드라이브의 복구 콘솔로 진입할 수 있습니다.

'복구 콘솔'을 사용하기 위한 더 이상의 설정은 이제 '필요'하지 않습니다.

하지만, "F:\" 드라이브로 사용자가 언제든지 복구 파티션을 임의 접근할 수 있다는 것이 좀 걸립니다. 즉, 윈도우 설치 파일이 그랬던 것처럼 hidden 파티션으로 만들어 주고 싶은데요. 방법은, 파티션 타입을 Recovery로 바꿔주는 것으로 해결할 수 있습니다. 이를 위해 diskpart.exe를 실행하고, 다음과 같이 해당 파티션을 Recovery Partition으로 설정해 주면 됩니다.

DISKPART> list part

  Partition ###  Type              Size     Offset
  -------------  ----------------  -------  -------
  Partition 4    Primary            449 MB  1024 KB
  Partition 1    System             100 MB   451 MB
  Partition 2    Reserved            16 MB   551 MB
  Partition 3    Primary             63 GB   567 MB


DISKPART> sel part 4

Partition 4 is now the selected partition.

DISKPART> set id=de94bba4-06d1-4d40-a16a-bfd50179d6ac

DiskPart successfully set the partition ID.

위와 같이 해주고 나서, "Disk Management" 관리 콘솔로 확인해 보면 처음 지웠을 때와 동일한 복구 파티션으로 나타납니다.

boot_recovery_mode_1.png

물론, 취향에 따라 ^^ 저렇게 복구 파티션으로 굳이 지정하지 않아도 됩니다.




참고로, 이 글에서 복구 파티션에 할당한 winre.wim 파일은 그야말로 기본적인 환경만을 인식하는 윈도우 부팅 파일이라고 보시면 됩니다. 다시 말해, 특별한 장치들은 인식할 수 없습니다. 따라서, 복구 콘솔에서 인식하고 싶은 장치가 있다면 미리 winre.wim 파일에 device driver를 설치해 주어야 합니다. 이에 대해서는 다음의 글에 설명한 내용을 참고하시면 됩니다.

Windows 운영체제의 ISO 설치 파일에 미리 Device driver를 준비하는 방법
; http://www.sysnet.pe.kr/2/0/11190

그 외에, (UEFI 기반의 장치를 위한) 윈도우 설치 시 생성되는 기본 파티션들에 대한 설명을 다음의 글에서 찾을 수 있습니다.

UEFI/GPT-based hard drive partitions
; https://msdn.microsoft.com/en-us/windows/hardware/commercialize/manufacture/desktop/configure-uefigpt-based-hard-drive-partitions




끝맺기 전에, 주의 사항 하나 전달합니다. ^^

일반적인 PC인 경우 복구 파티션을 지우는 것은 크게 문제가 되지 않습니다. 하지만, 태블릿이나 소형 노트북 등의 경우에는 제조사가 미리 인식시켜야 할 장치에 대해 '복구 파티션'의 winre.wim에 장치 드라이버를 미리 설정해 놓은 경우가 있는데, 이를 삭제하게 되면 나중에 복구 콘솔로 들어갔을 때 (최악의 경우) 아무것도 못할 수도 있습니다.

가령, Dell Venue 8 Pro의 경우 델 측에서 미리 터치스크린과 가상 키보드를 장치 드라이버로 제공하게 되는데 "복구 파티션"을 지운 후 이 글의 방법에 따라 winre.wim 파일만 달랑 복사한 복구 파티션으로 복원하는 경우 복구 콘솔에서 터치스크린과 가상 키보드를 전혀 쓸 수 없는 상태가 됩니다.