본문 바로가기

부팅과 멀티 부팅

[Bootmgr] 윈도우 7 의 부팅을 시작하기 전 - BCD 의 GUID 항목 식별자와 잘 알려진 식별자

BCD 부팅 항목을 구별하는 GUID 항목 식별자

대한민국 국민이라면 누구나 숫자로 이루어진 주민등록번호를 가지고 있습니다. 군대를 다녀오신 분들이라면 군번이 있고 규모가 어느 정도 되는 기업을 다니시는 분들이라면 사원 번호라는 것을 가지고 있을 것입니다. 이들의 공통점은 무엇인가요? 

집단내에서 나를 타인과 구별하는 고유한 식별 체계 = Identifier

BCD 저장소는 여러 부팅 항목들이 모두 모여 있는 일종의 집단이라고 할 수 있습니다. 고로 현재의 BCD 저장소내에서 각각의 부팅 항목을 개별적으로 식별(지정)할 수 있는 고유한 아이디(Identifier)가 필요하게 됩니다. 그것이 바로 항목 식별자(Identifier) 입니다.



이러한 BCD 의 항목 식별자는 컴퓨터에서 많이 사용되는 식별자 형식 중 GUID(Globally Unique IDentifier) 라는 형식을 사용하고 있습니다. GUID 는 보통 {20d79837-3452-11e1-8c24-fcd506014735} 와 같은 형식으로 생겼으며 16Byte(128bit) 의 크기를 가지고 있습니다.

20, d7, 98, 37, 34, 52, 11, e1, 8c, 24, fc, d5, 06, 01, 47, 35 = 16Byte

이러한 GUID 는 보다 쉽게 알아보고 좀 더 체계적인 ID 부여를 위하여 {4Byte-2Byte-2Byte-8Byte} 또는 {4Byte-2Byte-2Byte-2Byte-6Byte} 와 같이 나누어 각 자리를 하이픈(-) 으로 구분하고 중괄호({})로 묶는 형식을 취하는 것이 보통입니다. 윈도우에서는 GUID 를 {4Byte-2Byte-2Byte-2Byte-6Byte} 의 형식으로 사용하고 있으며 그로 인해 BCD 의 항목 식별자들도 이와 같은 형식을 가지고 있습니다.


BCD 에서 일부 특정한 값으로 고정된 부팅 항목들을(ex. {ntldr}, {ramdiskoptions}...) 제외한 대다수의 부팅 항목들은 생성 당시 항목 식별자로 랜덤한 값을 부여 받습니다. [사용자가 원하는 값을 지정을 할 순 있지만 특별한 목적을 가진 경우가 아니면 잘 사용되진 않습니다.] 즉, 보통 부팅 항목의 Identifier GUID 값은 직접 보기 전까진 모른다는 것이지요. - 당신 컴퓨터에 존재하는 부팅 항목의 GUID 를 나는 모릅니다. - 그리하여 보통 BCDEdit.exe 를 통한 작업을 설명하게 될 때에는 명령의 설명으로 아래와 같은 형식을 많이 사용하게 됩니다.(특히나 부팅 항목 생성 작업에서)

bcdedit /create /d "새로운 부팅 항목" /application osloader
bcdedit /set {GUID} device partition=c:

bcdedit /create /d "새로운 부팅 항목" /application osloader
bcdedit /set {ID} device partition=c:

bcdedit /create /d "새로운 부팅 항목" /application osloader
bcdedit /set GUID device partition=c:

bcdedit /create /d "새로운 부팅 항목" /application osloader
bcdedit /set ID device partition=c:

이는 이전 작업인 /create 명령을 통해 부팅 항목을 생성하면서 얻은 GUID 값을 {GUID}, {ID}, GUID, ID 로 표시한 부분에 알아서 적용하라는 의미입니다. (수정이라면 미리 파악한 GUID 를 적용하라는 의미)


이러한 의도를 파악하지 못하시고 그냥 써진 문자 그대로 명령을 내리시고는 안 된다며 팁이나 강좌 작성자에게 화를 내진 마세요. ^^ 어쩔 수 없는 겁니다.


참고로 이러한 GUID 식별자는 BCD 에서 뿐만 아니라 윈도우는 물론 여러 소프트웨어에서 전반적으로 쓰이는 표준 식별자 형식입니다. 즉, BCD 의 항목 식별자를 GUID 라고 부르는게 아니라 BCD 가 항목 식별자로 GUID 라는 형식을 사용한다는 것죠. 헷갈리시면 안 됩니다. ^^

GUID 식별자 형식은 BCD 뿐만 아니라 여러 곳에서 사용되고 있습니다.


GUID - 전역 고유 식별자 (위키피디아)




BCDEdit.exe 의 잘 알려진 식별자

제가 한 가지 자주 사용되는 부팅 항목의 항목 식별자를 보여드리도록 하죠.

{466f5a88-0af2-4f76-9038-095b170dc21c}

이 부팅 항목은 BCD 내에서 고정된 ID 값으로 모든 컴퓨터(BCD)에서 동일한 항목을 의미합니다. 이 값을 두고 제가 세 가지 질문을 드리도록 하죠.

첫 째, 여러분은 이것이 어떠한 부팅 항목을 의미하는지 바로 파악하실 수 있겠나요?
둘 째, BCD 편집 작업은 대부분 GUID 를 통해 대상을 지정하여 이루어집니다. 그럼 이걸 외우실 수 있겠나요?
셋 째, 이걸 BCDEdit.exe 작업을 진행할 때마다 매번 직접 입력하라고 한다면?


프로그램의 입장에서는 항목 식별자로 GUID 를 사용함으로써 중복될 확률이 거의 없는 것은(생성 가능한 ID 개수 = 2128 개) 참으로 좋았는데, 이게 사용하는 인간의 입장에서는 인간 친화적인 구조가 아닌지라 한눈에 파악도 힘들고 작업을 위해 값을 외우기는 더더욱 힘들며 실제 작업시 일일히 입력하기엔 짜증이 나더라는 겁니다.


이 문제를 해결해야 할 필요가 생겼습니다. 그래서 BCDEdit.exe 는 복잡한 GUID 형식의 항목 식별자를 좀 더 친근한 형식으로 나타내기로 하였습니다. 아래와 같이 말이죠.

{ntldr}

어떤가요? 파악하기도 쉽고 외우기도 쉽고 입력하기도 쉬워졌습니다. 우리가 {ntldr} 이라는 식별자를 사용하면 BCDEdit.exe 는 자동으로 {466f5a88-0af2-4f76-9038-095b170dc21c} 으로 변환하여 인식을 하는 것이죠. 그리고 우리에게 표시해 줄 때에도 {ntldr} 과 같은 형식으로 표시해 줌으로써 우리가 해당 항목을 좀 더 수월하게 파악할 수 있도록 도와줍니다.

이와 같은 항목 식별자를 잘 알려진 식별자(BCDEdit ID)라고 합니다. BCD 내의 항목들 중 자주 사용되거나(현재 부팅한 항목 등), 모든 컴퓨터(BCD)에서 동일한 즉, 고정된 GUID 를 가지는 항목들은({ntldr} 등) GUID 식별자를 대신하여 쓰기 쉽고 알아보기 편하게 변환하여 연결한 것이죠.

{ntldr} -> {466f5a88-0af2-4f76-9038-095b170dc21c}


즉, BCDEdit.exe 를 통해 작업을 할 땐 원래 값인 {466f5a88-0af2-4f76-9038-095b170dc21c} 을 사용해도 되고 잘 알려진 식별자로 {ntldr} 을 사용해도 동일한 작업이 되는 것입니다. 간단하죠? {bootmgr} 이나 {ramdiskoptions}, {current}, {default} 모두 이와 같은 잘 알려진 식별자입니다.


이러한 잘 알려진 식별자에는 두 가지 종류가 있습니다.

첫 째, BCD 에서 일부 특정한 값으로 고정된 부팅 항목들을 위한 잘 알려진 식별자.
둘 째, 현재 부팅된 항목, 기본 부팅 항목과 같이 상황과 설정에 따라 자동으로 변경되는 잘 알려진 식별자.


첫 번째 종류의 잘 알려진 식별자들은 언제 어디에서나 동일한 항목에 연결됩니다. 즉, 내 컴퓨터에서나 네 컴퓨터에서나 {ntldr} 은 {466f5a88-0af2-4f76-9038-095b170dc21c} 이라는 동일한 항목을 가르키고 있습니다. 고정적이죠.

두 번째 종류의 잘 알려진 식별자로는 {current} 와 {default} 식별자가 있습니다. 이는 현재 부팅한 부팅 항목과 기본 부팅 항목으로서 다른 윈도우로 부팅을 하면 {current} 식별자에 연결된 부팅 항목이 바뀌고 기본 부팅 항목 설정을 바꾸면 {default} 식별자에 연결된 부팅 항목이 바뀌게 됩니다. 즉, 그 때 그 때 달라지는 것으로 가변적입니다.

대부분의 잘 알려진 식별자들은 첫 번째 종류에 속합니다. 이제 여기에 특수한 의미를 지닌 {current} 와 {default} 가 함께 포함되어 있다고 생각하시면 편하실 겁니다.


아래는 BCDEdit.exe 에서 사용되는 잘 알려진 식별자를 정리한 표입니다.

잘 알려진 식별자 - GUID 식별자
{bootmgr} {9dea862c-5cdd-4e70-acc1-f32b344d4795}
Windows 부팅 관리자 항목을 지정합니다.
{fwbootmgr} {a5a30fa2-3d06-4e9f-b5f4-a01df9d1fcba}
특별히 EFI(Extensible Firmware Interface) 사양을 구현하는 시스템에서 펌웨어 부팅 관리자 항목을 지정합니다.
{memdiag} {b2721d73-1db4-4c62-bf78-c548a880142d}
메모리 진단 응용 프로그램 항목을 지정합니다.
{ntldr} or {legacy} {466f5a88-0af2-4f76-9038-095b170dc21c}
Windows Vista 이전의 운영 체제를 시작하는 데 사용할 수 있는 OS 로더(Ntldr)를 지정합니다.
{current} * {fa926493-6f1c-4193-a414-58f0b2456d1e}
현재 실행 중인 운영 체제에 대한 운영 체제 부팅 항목에 해당하는 가상 식별자를 지정합니다.
{default} * {1cae1eb7-a0df-4d4d-9851-4860e34ef535}
부팅 관리자 기본 응용 프로그램 항목에 해당하는 가상 식별자를 지정합니다.
{ramdiskoptions} {ae5534e0-a924-466c-b836-758539a3ee3a}
RAM 디스크 장치를 위한 부팅 관리자에 필요한 추가 옵션이 들어 있습니다.
{dbgsettings} {4636856e-540f-4170-a130-a84776f4c654}
부팅 응용 프로그램 항목에서 상속할 수 있는 전역 디버거 설정이 들어 있습니다.
{emssettings} {0ce4991b-e6b3-4b16-b23c-5e0d9250e5d9}
부팅 응용 프로그램 항목에서 상속할 수 있는 전역 응급 관리 서비스 설정이 들어 있습니다.
{badmemory} {5189b25c-5558-4bf2-bca4-289b11bd29e2}
부팅 응용 프로그램 항목에서 상속할 수 있는 전역 RAM 결함 목록이 들어 있습니다.
{globalsettings} {7ea2e1ac-2e61-4728-aaa3-896d9d0a9f0e}
모든 부팅 응용 프로그램 항목에서 상속해야 하는 전역 설정 모음이 들어 있습니다.
{bootloadersettings} {6efb52bf-1766-41db-a6b3-0ee5eff72bd7}
모든 Windows 부팅 로더 응용 프로그램 항목에서 상속해야 하는 전역 설정 모음이 들어 있습니다.
{resumeloadersettings} {1afa9c49-16ab-4a5c-901b-212802da9460}
최대 절전 모드 응용 프로그램 항목의 모든 Windows 다시 시작에서 상속해야 하는 전역 설정 모음이 들어 있습니다.
{hypervisorsettings} {7ff607e0-4395-11db-b0de-0800200c9a66}
모든 OS 로더 항목에서 상속할 수 있는 하이퍼바이저 설정이 들어 있습니다.
* {current} 와 {default} 의 GUID 식별자는 가상 식별자로 BCDEdit.exe 에서 해당 GUID 식별자는 작동하지 않습니다.


이 중 {current} 와 {default} 는 위에서 설명한 것과 같이 각각 현재 부팅한 항목, 기본 부팅으로 설정된 항목을 뜻하는 것으로 해당 부팅 항목의 GUID 식별자와 연결이 되어 있습니다. 표에 정리된 {current} 와 {default} 의 GUID 식별자는 스크립트 등에서 {current} 와 {default} 를 나타내기 위한 가상의 식별자 역할을 하는 것으로 BCDEdit.exe 에서는 사용되지 않습니다.

또한 {current} 와 {default} 가 동일한 항목을 가르키는 경우 BCDEdit.exe 는 {current} 를 우선하여 표시해 줍니다. 즉, BCDEdit.exe 에 {default} 로 표시되는 항목이 없다면 {current} 가 {default} 임을 의미하는 것입니다.(명령은 {current}, {default} 둘 모두 동일하게 적용됩니다.)



이상으로 앞으로 편집하면서 마추지게 될 BCD 의 GUID 식별자와 잘 알려진 식별자를 미리 정리해 보았습니다. 뭐 별거 없죠? 이제 기본적으로 필요한 이론적인 설명은 이쯤에서 마치도록 하고 실제 작업들로 들어가도록 하겠습니다. ^^

p.s 이건 백과로 넣기에도 애매하고 강좌로 넣기에도 애매하고... 윈도우 부팅이 블로그의 변화된 카테고리 설정을 미리 염두해두고 작성이 시작된 글이 아닌지라 애매하네요. ㅎㅎㅎ