가장 중요한 이야기들은 윈도우 7 의 부팅 - 윈도우 7 계열 부팅 항목의 전체적인 구성 이해하기 글에서 대충 이야기를 끝냈습니다만 해당 글에서 미처 전하지 못한 몇 가지 이야기들을 추가적으로 해보도록 하겠습니다.
Partition 경로에는 정확하게 무엇이 저장되는가?
1. Partition 경로란?
여기에서 이야기하는 Device 장치의 Partition 경로는 다음을 이야기하는 것입니다.
이러한 경로들에 대해 관련 글에서 아래와 같은 부연 설명을 했었죠.
다른 글이 이 글이 되겠네요. 아무튼 그럼 BCD 는 어떻게 드라이브 문자의 변화를 자동으로 감지하여 변화에 대응하는 것일까요?
2. Partition 경로에 저장되는 값의 실체
우리는 BCD 작업을 할 때 Device 의 Partition 경로로 C: 와 같은 드라이브 (문자) 경로를 지정하지만 실제로 BCD 에 저장되는 값은 이같은 드라이브 경로가 아닙니다. BCD 에 실제로 저장되는 값은 볼륨 장치 경로라는 값이죠.
먼저 알아야 할 것은 드라이브 경로라는 것은 그저 우리가 접근하기 쉽고 사용하기 편한 그리고 꾸준히 사용된 하나의 경로 형식일 뿐이라는 것입니다. 이러한 드라이브 경로라는 것은 이야기했듯이 항상 변할 수 있기 때문에 불확실합니다. 언제 변할 지 모르니 믿을 수 없죠.
그래서 윈도우에는 이를 대신할 수 있는 몇 번째 디스크 몇 번째 파티션, 몇 번째 볼륨 같은 실제(물리) 장치를 바로 나타내는 경로 형식들이 존재하고 있습니다. 이러한 실제 장치 경로들은 장치 자체가 제거되지 않는 한 변하지 않기 때문에 좀 더 신뢰할 수 있는 확실한 경로라고 할 수 있죠. [이러한 실제 장치 경로에는 몇 가지가 있는데 볼륨 장치 경로는 그 중에 하나입니다.]
아무튼 그래서 BCD 에서는 Device 의 Partition 경로로 드라이브 경로 대신 이에 연결된 볼륨 장치 경로를 값으로 사용합니다. 이러한 볼륨 장치 경로는 [\Device\HarddiskVolume1] 과 같은 형식을 가지고 있습니다.
* 이 때 HarddiskVolume1 은 예시일 뿐이며, C: 가 반드시 HarddiskVolume1 이라는 의미는 아닙니다. 이러한 볼륨 장치 경로는 HarddiskVolume1, HarddiskVolume2 와 같이 순서대로 나갑니다.
이와 비슷한 예로 윈도우 XP 의 부트 매니저인 NTLDR - Boot.ini 에서는 드라이브 문자 대신 ARC 경로라는 것을 사용하였던 것을 생각하시면 될 듯 합니다.
정리하자면 우리가 BCD 작업을 할 때 Device 의 Partition 경로로 C: 와 같은 드라이브 경로를 지정해주면 실제로 BCD 에는 C: 가 아닌 현재 C: 가 연결되어 있는 볼륨 장치 경로인 \Device\HarddiskVolume1 경로가 저장되고, 우리가 이를 확인하면 \Device\HarddiskVolume1 경로에 현재 연결되어 있는 드라이브 경로를 표시해주는 것입니다.
이러한 원리로 Device 의 Partition 경로로 지정한 드라이브의 문자가 바뀌었을 때 마치 바뀐 드라이브 문자에 맞춰 자동으로 값이 변경되는 것 같은 결과를 보이게 되는 것입니다. 실제론 저장되어 있는 볼륨 장치 경로에 현재 연결되어 있는 드라이브 경로가 표시되는 거라 그렇게 보일 뿐인데 말이죠. 간단하죠?
3. Partition 경로에서 사용할 수 있는 값의 형식
참고로 Device 경로를 지정할 때 드라이브 문자 경로 뿐만 아니라 지금까지 설명했던 볼륨 장치 경로를 직접 사용할 수도 있습니다. 즉, 아래 뿐만 아니라
아래와 같이 작업할 수도 있다는 것이죠.
물론 이렇게 직접 볼륨 장치 경로로 지정해도 작업 후 확인해보면 앞서 이야기 드린 것과 같은 원리로 볼륨 장치 경로에 현재 연결되어 있는 드라이브 문자가 표시됩니다.
4. Partition 에 드라이브 문자가 없다면?
그렇다면 현재 Device 로 지정되어 있는 파티션(볼륨)에 드라이브 문자가 할당되어 있지 않다면 Device 경로는 어떻게 표시될까요? 그 때는 그냥 볼륨 장치 경로를 그대로 보여줍니다. 이는 Bootmgr 부트 매니저 구성이 시스템 예약 파티션에 설치되어 있을 때 {bootmgr} 항목의 Device 경로를 확인해 보는 것으로 바로 알 수 있습니다.
5. 끝으로
이제 대충 Device 에 사용되는 경로 중 Partition 형식의 경로에 대해 제가 알고 있고 드리고 싶었던 이야기는 대충 다 드린 것 같네요. 다음엔 Boot 경로에 대해 이야기를 해보죠. 이상입니다.
볼륨 장치 경로의 확인은 어떻게?
아래의 페이지에 접속하시거나 제가 올려드린 WinObj.zip 파일을 다운로드 받으세요.
파일을 다운로드 받으셨으면 압축을 푼 후 WinObj.exe 파일을 실행하시면 됩니다. 그 후 GLOBAL?? 을 확인하시면 됩니다.
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 등)
한 가지, 드라이브 문자는 부팅한 윈도우에 따라서 다를 수 있습니다. 또한 언제든지 사용자가 바꿀 수도 있습니다. 즉, 드라이브 문자는 항상 변할 수 있는 가변적인 값입니다. 그래서 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\HarddiskVolume1 이라는 경로는 겉으로 드러나지 않음.
이러한 원리로 Device 의 Partition 경로로 지정한 드라이브의 문자가 바뀌었을 때 마치 바뀐 드라이브 문자에 맞춰 자동으로 값이 변경되는 것 같은 결과를 보이게 되는 것입니다. 실제론 저장되어 있는 볼륨 장치 경로에 현재 연결되어 있는 드라이브 경로가 표시되는 거라 그렇게 보일 뿐인데 말이죠. 간단하죠?
이 때 윈도우 XP 때와는 달리 실제 장치 경로로 "디스크&파티션" 경로가 아닌 "볼륨" 경로를 사용하는 것은 윈도우 비스타 이후부터는 윈도우가 모든 작업에서 "디스크&파티션" 의 개념보다는 "볼륨" 이라는 개념을 좀 더 중시하기 때문입니다. 이는 비단 BCD 뿐만 아니라 디스크 관리에서도 확인할 수 있는데 비스타 이후 디스크 관리에서는 파티션 생성이 아닌 볼륨 생성과 같이 모든 작업을 볼륨 중심으로 놓고 접근하는 것을 볼 수 있습니다.
그리고 [\Device\HarddiskVolume1] 경로는 [C:] 와 같은 드라이브 경로 뿐만 아니라 [Harddisk0Partition1] 과 같은 디스크&파티션 경로에도 연결되어 있습니다. 이러한 실제 장치 경로들 중 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 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...
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?? 을 확인하시면 됩니다.