부팅과 멀티 부팅

MBR 의 구조와 활성 파티션, 활성 파티션은 어떻게 설정 되는가?

CApple 2012. 1. 4. 11:00
이 글은 지난 글인 활성 파티션에 대한 좀 더 자세한 이야기 - 활성 파티션의 개념과 특성 정리 - 의 내용 중 활성 파티션을 주 파티션에만 설정할 수 있다는 내용을 디스크의 관점에서 다시 한 번 자세하게 설명하는 내용입니다. 부팅 카테고리 보다는 디스크 카테고리에 더 어울리는 글이지만 그냥 활성 파티션을 다룬 김에 계속 다뤄 봅니다.


MBR 의 구조

일단 MBR 의 구조는 아래와 같습니다.



지금까지 수 없이 이야기했던 코드 영역(프라이머리) 파티션 테이블이 보이죠. (이하 파티션 테이블)

자 파티션 테이블을 보시면 총 64 Byte 의 크기를 가지고 있으며 개당 16 Byte 씩 총 네 개의 엔트리로 이루어져 있는 것을 볼 수 있습니다. 이러한 구조적인 이유로 MBR 디스크에는 총 네 개의 주 파티션이 존재할 수 있습니다. 이런 제약을 극복하기 위한 것이 확장 파티션과 논리 드라이브구요.

아무튼 이렇게 MBR 의 파티션 테이블에 총 네 개의 파티션이 존재할 수 있다보니 이 중에서 어떤 파티션이 부팅에 사용되는 파티션인지 알려주어야 합니다. 그게 바로 활성 파티션이라고 이야기를 했죠. 이렇게 활성 파티션이 설정되면 코드 영역에 적재된 프로그램이 활성 파티션을 확인하고 해당 파티션의 부트 섹터로 이동을 하는 것이죠.


일단 주 파티션을 제외하고 이러한 파티션 테이블에 위치하는 파티션으론 확장 파티션이 있습니다. 그런데 확장 파티션은 MBR 파티션 테이블의 엔트리가 네 개밖에 안 되다보니 이를 확장하기 위한 용도의 파티션으로 데이터를 기록하기 위한 파티션이 아닙니다. 그래서 활성 파티션으로는 사용이 되지 않으며 디스크 관리 프로그램 자체내에서 설정할 수 없게 막아버립니다. (근데 정말 무식한 방법을 사용하면 강제로는 가능합니다. ^^; 다음 글에서 이걸 해 볼 겁니다.)

다음으로 주 파티션과 비슷하게 데이터를 담는 파티션인 논리 드라이브는 왜 활성 파티션이 될 수 없는 것인가? 그것은 잠시 언급을 했지만 확장 파티션내의 논리 드라이브가 자체적으로 EBR 이라는 것을 가지고 그곳에 자기 자신의 정보를 기록하는 형태의 파티션이기 때문에 그렇습니다. 즉, 논리 드라이브는 MBR 의 파티션 테이블에 속하지 않는 파티션이라는 것이지요. 그래서 MBR 에서 설정되는 활성 파티션의 특성상 논리 드라이브는 구조적으로 애초에 활성 파티션이 될 수 없습니다.


이러한 주 파티션, 확장 파티션, 논리 드라이브의 구조는 다음과 같습니다.

출처 - 마이크로소프트 테크넷



보시면 제가 말했던 것과 같이 MBR 에서 바로 연결되는 주 파티션과 달리 논리 드라이브는 MBR 에서 연결되는 확장 파티션 내에서 다시 자체의 EBR 로 연결되는 것을 알 수 있습니다. 즉, MBR 의 영역을 벗어났죠. 이러한 구조적인 이유를 종합하여 계속 같은 이야기를 반복하게 되는데 아무튼 그래서 주 파티션만 활성 파티션으로 활용됩니다.




파티션 엔트리의 구조

자 그렇다면 디스크 입장에서 활성 파티션은 어떻게 식별(설정) 하는 것일까요? 활성 파티션은 단순하게 파티션 테이블에서 Active 로 마크된 파티션일 뿐이라고 했죠. 그럼 이제 파티션 테이블에 위치한 각 파티션 엔트리의 구조를 보도록 하겠습니다.



MBR 의 파티션 테이블은 위의 파티션 엔트리를 총 네 개를 담고 있습니다. 이 중에서 눈여겨 보아야 할 것이 바로 첫 1 Byte 인 파티션 상태 값입니다. 이 값이 해당 파티션이 일반 파티션인지 활성 파티션인지를 결정하는 값인 것이죠. 이 값은 보통 0x00 상태이고 0x80 으로 설정되면 활성 파티션이 되는 것입니다. 간단하죠?




실제 활성 파티션이 설정되는 모습

그럼 MBR 에서 활성 파티션이 설정되는 것을 실제로 보도록 하겠습니다. 일단 시작 전 정리하죠.



MBR 은 디스크의 첫 번째 섹터에(Logical Sector 0) 위치해 있고 그곳에서 파티션 테이블의 위치는 01BE ~ 01FD 까지 64 Byte 의 영역입니다. 다시 파티션 테이블은 16 Byte 씩 총 네 개의 엔트리를 가지고 있죠. 각 엔트리의 첫 번째 1 바이트가 바로 해당 파티션이 일반 파티션인지 활성 파티션인지를 결정하는 값인 것입니다.

이 내용을 종합하여 실제로 디스크의 MBR 을 살펴보면 아래와 같음을 알 수 있습니다.

예제에 사용된 디스크


예제 디스크의 MBR 실제 모습


보라색으로 선택된 부분이 파티션 테이블을 의미하며 노란 박스가 하나의 파티션 엔트리를 의미합니다. 이렇게 나누면 총 네 개의 파티션이 나오죠. 순서대로 첫 번째 주 파티션, 두 번째 주 파티션, 세 번째 주 파티션, 그리고 확장 파티션입니다.(논리 드라이브는 마지막 확장 파티션에서 연결되는 EBR 에 그 정보가 기록되어 있습니다.)

보시면 모든 파티션 엔트리의 시작이 0x00 값을 가지는 것을 볼 수 있습니다. 이는 예제 디스크 관리 스샷에서 보는 것과 같이 아직 해당 디스크에는 활성 파티션이 없기 때문입니다.


그럼 이 중에서 첫 번째 주 파티션인 J: 드라이브 파티션을 활성으로 설정하고 변화를 살펴 보도록 하겠습니다.




어떻습니까? 해당 파티션에 속하는 엔트리의 시작 값이 0x80 으로 바뀐 것을 확실히 파악할 수 있죠? 다음은 활성 파티션을 다른 주 파티션으로 바꿔보고 그 내용을 살펴본 것입니다.




역시 활성 파티션으로 설정된 파티션의 첫 번째 파티션 상태 값이 0x80 으로 바뀌는 것을 확인할 수 있습니다.


그렇다면 네 번째 파티션 엔트리에 해당하는 확장 파티션과 그에 포함되는 논리 드라이브는? 디스크 관리 도구 자체에 활성 파티션을 설정하는 항목이 없습니다.



근데 이거 마무리를 어떻게 해야 하는 거지? 에잉 몰라...


참고 자료


MBR 확인 헥스 에디터(쉐어웨어 - 읽기만 가능)
WinHex - http://www.x-ways.net/winhex/index-m.html

디스크 열기 : Tools -> Open Disk -> Physycal Media 에서 디스크 선택
섹터 이동 : Position -> Go To Sector (MBR 은 Logical Sector 0, 고로 열면 바로)


MBR 확인 헥스 에디터(프리웨어 - 읽기 쓰기 가능)