본문 바로가기

부팅과 멀티 부팅

[Bootmgr] Device 경로 중 Partition 장치 경로에 대한 이해

가장 중요한 이야기들은 윈도우 7 의 부팅 - 윈도우 7 계열 부팅 항목의 전체적인 구성 이해하기 글에서 대충 이야기를 끝냈습니다만 해당 글에서 미처 전하지 못한 몇 가지 이야기들을 추가적으로 해보도록 하겠습니다.



Partition 경로에는 정확하게 무엇이 저장되는가?

1. Partition 경로란?

여기에서 이야기하는 Device 장치의 Partition 경로는 다음을 이야기하는 것입니다.

device partition=C:

device vhd=[C:]\Example.vhd

device ramdisk=[C:]\Example.wim,{ramdiskoptions}


이러한 경로들에 대해 관련 글에서 아래와 같은 부연 설명을 했었죠.

항상 변하는 값인 가변적인 드라이브 문자와 이를 자동으로 인식하는 BCD

한 가지, 드라이브 문자는 부팅한 윈도우에 따라서 다를 수 있습니다. 또한 언제든지 사용자가 바꿀 수도 있습니다. 즉, 드라이브 문자는 항상 변할 수 있는 가변적인 값입니다. 그래서 Device 에서 지정하는 드라이브 문자는 항상 현재 작업을 진행 중인 윈도우를 기준으로 해야 합니다. 복잡하게 생각할 것 없이 현재 작업 중인 윈도우에서 해당 윈도우가 D: 드라이브에 위치해 있다면 그냥 partition=D: 로 값을 설정하면 된다는 것이죠.

이렇게 현재를 기준으로 파티션 장치의 드라이브가 한 번 설정되면 이후부터는 해당 파티션의 드라이브 문자의 변화에 맞춰 값이 자동으로 변경됩니다. 즉, D: 드라이브일 때 Device 를 partition=D: 로 설정했고 이후 해당 파티션이 E: 드라이브로 바뀌었다면(다른 윈도우로 부팅했거나 사용자가 바꿨거나) 자동으로 Device 의 값이 partition=E: 로 바뀐 드라이브 문자에 맞춰 변경된다는 의미입니다. 그러니 Device 로 파티션 장치의 드라이브를 설정할 때에는 드라이브 문자가 바뀔 상황이나 다른 윈도우에서의 드라이브 문자까지 신경을 쓸 필요는 없습니다. 알아서 적용됩니다. (이건 표면적으로 드러나는 부분만을 통해 설명한 것으로 좀 더 자세한 설명이 필요한 부분입니다. 이에 대한 내용은 다른 글에서 이야기하도록 하겠습니다.)

또한 파티션 장치 뿐만 아니라 VHD 장치나 Ramdisk 장치 등 BCD 에서 사용되는 모든 드라이브 문자 설정 값은 이처럼 작업을 진행 중인 현재를 기준으로 드라이브를 설정하면 이후부터는 해당 드라이브 문자의 변화에 맞춰 자동으로 값이 변경됩니다.

참고로 이 내용은 모든 Device 종류의 항목 옵션들에서 동일하게 적용됩니다.(Device, OSDevice, FileDevice, RadiskSDIDevice 등)

다른 글이 이 글이 되겠네요. 아무튼 그럼 BCD 는 어떻게 드라이브 문자의 변화를 자동으로 감지하여 변화에 대응하는 것일까요?



2. Partition 경로에 저장되는 값의 실체

우리는 BCD 작업을 할 때 Device 의 Partition 경로로 C: 와 같은 드라이브 (문자) 경로를 지정하지만 실제로 BCD 에 저장되는 값은 이같은 드라이브 경로가 아닙니다. BCD 에 실제로 저장되는 값은 볼륨 장치 경로라는 값이죠.

먼저 알아야 할 것은 드라이브 경로라는 것은 그저 우리가 접근하기 쉽고 사용하기 편한 그리고 꾸준히 사용된 하나의 경로 형식일 뿐이라는 것입니다. 이러한 드라이브 경로라는 것은 이야기했듯이 항상 변할 수 있기 때문에 불확실합니다. 언제 변할 지 모르니 믿을 수 없죠.

그래서 윈도우에는 이를 대신할 수 있는 몇 번째 디스크 몇 번째 파티션, 몇 번째 볼륨 같은 실제(물리) 장치를 바로 나타내는 경로 형식들이 존재하고 있습니다. 이러한 실제 장치 경로들은 장치 자체가 제거되지 않는 한 변하지 않기 때문에 좀 더 신뢰할 수 있는 확실한 경로라고 할 수 있죠. [이러한 실제 장치 경로에는 몇 가지가 있는데 볼륨 장치 경로는 그 중에 하나입니다.]

아무튼 그래서 BCD 에서는 Device 의 Partition 경로로 드라이브 경로 대신 이에 연결된 볼륨 장치 경로를 값으로 사용합니다. 이러한 볼륨 장치 경로는 [\Device\HarddiskVolume1] 과 같은 형식을 가지고 있습니다.

볼륨 장치 경로 : \Device\HardddiskVolume1 -> C:

* 이 때 HarddiskVolume1 은 예시일 뿐이며, C: 가 반드시 HarddiskVolume1 이라는 의미는 아닙니다. 이러한 볼륨 장치 경로는 HarddiskVolume1, HarddiskVolume2 와 같이 순서대로 나갑니다.


이와 비슷한 예로 윈도우 XP 의 부트 매니저인 NTLDR - Boot.ini 에서는 드라이브 문자 대신 ARC 경로라는 것을 사용하였던 것을 생각하시면 될 듯 합니다.

ARC 경로 : multi(0)disk(0)rdisk(0)partition(1) -> C:


정리하자면 우리가 BCD 작업을 할 때 Device 의 Partition 경로로 C: 와 같은 드라이브 경로를 지정해주면 실제로 BCD 에는 C: 가 아닌 현재 C: 가 연결되어 있는 볼륨 장치 경로인 \Device\HarddiskVolume1 경로가 저장되고, 우리가 이를 확인하면 \Device\HarddiskVolume1 경로에 현재 연결되어 있는 드라이브 경로를 표시해주는 것입니다.

C: 지정 -> \Device\HarddiskVolume1 저장 -> C: 표시
└ 이런 구조로 보통 \Device\HarddiskVolume1 이라는 경로는 겉으로 드러나지 않음.

이러한 원리로 Device 의 Partition 경로로 지정한 드라이브의 문자가 바뀌었을 때 마치 바뀐 드라이브 문자에 맞춰 자동으로 값이 변경되는 것 같은 결과를 보이게 되는 것입니다. 실제론 저장되어 있는 볼륨 장치 경로에 현재 연결되어 있는 드라이브 경로가 표시되는 거라 그렇게 보일 뿐인데 말이죠. 간단하죠?

이 때 윈도우 XP 때와는 달리 실제 장치 경로로 "디스크&파티션" 경로가 아닌 "볼륨" 경로를 사용하는 것은 윈도우 비스타 이후부터는 윈도우가 모든 작업에서 "디스크&파티션" 의 개념보다는 "볼륨" 이라는 개념을 좀 더 중시하기 때문입니다. 이는 비단 BCD 뿐만 아니라 디스크 관리에서도 확인할 수 있는데 비스타 이후 디스크 관리에서는 파티션 생성이 아닌 볼륨 생성과 같이 모든 작업을 볼륨 중심으로 놓고 접근하는 것을 볼 수 있습니다.

그리고 [\Device\HarddiskVolume1] 경로는 [C:] 와 같은 드라이브 경로 뿐만 아니라 [Harddisk0Partition1] 과 같은 디스크&파티션 경로에도 연결되어 있습니다. 이러한 실제 장치 경로들 중 BCD 에서 사용하는 건 볼륨 장치 경로 뿐이죠. 뭐 그렇습니다. 솔직히 저도 뭐가 최상위 경로인지 모르겠습니다. 워낙에 서로 물리고 물려 있어서... ㅡㅡ;



3. Partition 경로에서 사용할 수 있는 값의 형식

참고로 Device 경로를 지정할 때 드라이브 문자 경로 뿐만 아니라 지금까지 설명했던 볼륨 장치 경로를 직접 사용할 수도 있습니다. 즉, 아래 뿐만 아니라

bcdedit /set {GUID} device partition=C:
bcdedit /set {GUID} device vhd=[C:]\Example.vhd
bcdedit /set {GUID} device ramdisk=[C:]\Example.wim.{ramdiskoptions}



아래와 같이 작업할 수도 있다는 것이죠.

bcdedit /set {GUID} device partition=\Device\HarddiskVolume1
bcdedit /set {GUID} device vhd=[\Device\HarddiskVolume1]\Example.vhd
bcdedit /set {GUID} device ramdisk=[\Device\HarddiskVolume1]\Example.wim,{ra...



물론 이렇게 직접 볼륨 장치 경로로 지정해도 작업 후 확인해보면 앞서 이야기 드린 것과 같은 원리로 볼륨 장치 경로에 현재 연결되어 있는 드라이브 문자가 표시됩니다.

partition 경로를 드라이브 경로로 지정하는 모습과 볼륨 장치 경로로 지정하는 모습.


* 그래서 사실 시스템 예약 파티션과 같이 드라이브 문자가 없는 파티션에 위치한 어떠한 대상의 Device 장치 경로를 설정할 때에는 앞에서도 잠깐 본 것과 같이 바로 볼륨 장치 경로를 지정하여도 됩니다. 하지만 볼륨 장치 경로란게 사용자가 바로 파악할 수 있는 것이 아니기 때문에 보통은 관련된 글에서 그냥 우선 드라이브 문자를 할당한 후 작업하고 다시 드라이브 문자를 제거하라고 하는 것이 일반적이죠. 즉, 못해서가 아니라 볼륨 장치 경로를 파악하는 과정이 오히려 드라이브 문자를 할당하고 제거하는 과정보다 불편할 수 있기 때문에 그냥 그렇게 작업하라고 권장하는 겁니다.



4. Partition 에 드라이브 문자가 없다면?

그렇다면 현재 Device 로 지정되어 있는 파티션(볼륨)에 드라이브 문자가 할당되어 있지 않다면 Device 경로는 어떻게 표시될까요? 그 때는 그냥 볼륨 장치 경로를 그대로 보여줍니다. 이는 Bootmgr 부트 매니저 구성이 시스템 예약 파티션에 설치되어 있을 때 {bootmgr} 항목의 Device 경로를 확인해 보는 것으로 바로 알 수 있습니다.


해당 파티션에 드라이브 문자가 없어 볼륨 장치 경로가 직접 표시된 모습.


* {bootmgr} 의 Device 는 Bootmgr 파일이 위치한 장치 경로를 의미합니다. Bootmgr 부트 매니저가 시스템 예약 파티션에 설치되어 있다면 {bootmgr} 의 Device 경로는 드라이브 문자가 할당되지 않은 파티션을 가르키게 되는 것이죠. 그래서 위와 같은 결과를 확인할 수 있는 겁니다. 또는 그냥 아무 부팅 항목이나 Device 로 지정된 드라이브의 문자를 제거한 후 살펴보셔도 됩니다. 물론 제거할 수 있을 때 이야기입니다.



5. 끝으로

이제 대충 Device 에 사용되는 경로 중 Partition 형식의 경로에 대해 제가 알고 있고 드리고 싶었던 이야기는 대충 다 드린 것 같네요. 다음엔 Boot 경로에 대해 이야기를 해보죠. 이상입니다.




볼륨 장치 경로의 확인은 어떻게?

아래의 페이지에 접속하시거나 제가 올려드린 WinObj.zip 파일을 다운로드 받으세요.




파일을 다운로드 받으셨으면 압축을 푼 후 WinObj.exe 파일을 실행하시면 됩니다. 그 후 GLOBAL?? 을 확인하시면 됩니다.