부팅과 멀티 부팅

활성 파티션은 반드시 하나만 존재할 수 있는가?

CApple 2012. 1. 4. 13:00
지난 활성 파티션에 대한 좀 더 자세한 이야기 - 활성 파티션의 개념과 특성 정리 -  글에서 저는 이런 정리를 했습니다.

4. 활성 파티션은 해당 디스크에서 하나만 존재해야 합니다.


이 문장을 거꾸로 해석하면 다음과 같이 해석할 수도 있습니다.(할 수 있다와 해야 한다의 차이?)

"활성 파티션은 하나의 디스크에 여러 개 존재할 수 있다. 하지만 그 특성상 하나만 존재해야 할 뿐이다."


그렇다면 이 해석은 맞는 것일까요? 그 대답은 다음의 스크린 샷으로 대신하죠.

합성 아닙니다.





이처럼 하나의 디스크에 활성 파티션을 여러 개 설정할 수 있습니다. 이게 가능한 것은 활성 파티션의 설정이란 것이 사실 복잡한게 아니고 매우 단순한 마크에 불과하기 때문입니다. 활성 파티션은 MBR 의 파티션 테이블에서 각 파티션 엔트리의 첫 번째 1 Byte 값인 파티션 상태 값을 0x80 으로 바꿔주는 것 뿐이기 때문에(참고 - MBR 의 구조와 활성 파티션, 활성 파티션은 어떻게 설정 되는가?) 이 값을 모두 0x80 으로 바꾸면 전부 활성 파티션이 되는 겁니다.


하지만 보통의 디스크 관리 유틸리티를 통해서는 이렇게 설정할 수 없죠. 그것은 왜 그럴까요?

그것은 활성 파티션이란 것이 부팅에 사용할 하나의 파티션을 지정해 주는 의미이기에 디스크 관리 유틸리티 자체내에서 이러한 의미를 지키기 위해 하나의 파티션만 활성 상태가 되도록 자동으로 처리하기 때문입니다.

즉, 일반적인 디스크 관리 유틸리티들은 하나의 파티션을 활성으로 지정하면 해당 디스크에 존재하는 나머지 모든 파티션들의 파티션 상태 값을 0x00 으로 되돌리는 작업을 동시에 수행합니다. 이를 통해 하나의 디스크에 하나의 활성 파티션만 존재하도록 만들어 주는 것이죠. 간단하죠?


그렇다면 제가 예시로 보여드린 상태는 어떻게 만든 것일까요?

1. 그냥 디스크 MBR 에 직접 접근하여 내용을 변경할 수 있는 디스크 관리 도구나 헥스 에디터를 사용하여 그냥 직접 파티션 엔트리의 값을 수정하여 만드는 방법.

2. 하나의 파티션을 활성할 때 다른 파티션의 활성 상태를 풀지 않는 디스크 관리 도구를 사용하여 여러 개의 파티션에 활성을 마크하는 방법.


이렇게 두 가지 방법이 있습니다. 2 번의 경우 예전 버전의 GDisk 가 그러한 기능을 지원하였는데 요즘 버전에선 안 되게 바뀐 것 같더군요. 이러한 작업이 가능한 디스크 관리 도구가 있는지 굳이 찾아볼 필요까진 없겠죠?


그런데 이런 의문이 들 수 있습니다.

"하나의 디스크에 활성 파티션이 여러 개이고 해당 디스크가 CMOS 기준 첫 번째 디스크로 부팅에 사용되는 디스크라면 코드 영역은 어떤 활성 파티션을 부팅용으로 인식하느냐? 혹시 부팅이 꼬이는 것 아닌가?"


근데 부팅이 꼬이지는 않습니다. 그냥 파티션 엔트리 순서를 기준으로 제일 처음에 만난 활성 파티션을 부팅에 사용하는 활성 파티션으로 인식하고 그쪽 파티션의 부트 섹터로 이동을 해버리거든요. 즉, 뒤의 나머지 활성 파티션들은 무시되는 것이죠.

하지만 그렇다고 하여 하나의 디스크에 활성 파티션이 여러 개 설정되어 있는 것은 분명 정상적인 모습이 아니고 그로 인해 권장할 만한 내용도 아닙니다. 이 내용은 그냥 재미 정도로만 보시고 잊어버리세요.



1. 활성 파티션은 오직 주 파티션만이 사용됩니다.

이제 이걸 파헤쳐 보도록 하죠.

일단 첫 의문으로 그럼 MBR 의 파티션 테이블에 포함되지만 그 의미상 활성 파티션으로는 사용되지 않는 그래서 디스크 관리 유틸리티들이 활성 파티션으로의 설정을 지원하지 않는 확장 파티션의 파티션 상태 값을 강제로 0x80 으로 변경하여 활성 상태로 바꾸면 어떻게 될까요?

자 아래와 같이 확장 파티션에 해당하는 파티션 엔트리의 파티션 상태 값을 0x80 으로 강제로 바꾸고 저장하였습니다.



디스크 관리에선 별 변화가 없죠.



하지만 DiskPart 에선 활성으로 표시가 됩니다.



다른 디스크 관리 유틸리티인 GDisk 를 통해서 봐도 활성 상태인 것을 알 수 있습니다.



하지만 이렇게 확장 파티션이 비록 강제이지만 활성 상태로 설정되었다고 하더라도 실제로 데이터를 담는 파티션이 아니기 때문에 아무런 의미가 없습니다. 그래서 제가 알고 있는 모든 디스크 관리 유틸리티들은 확장 파티션을 활성 상태로 마크하는 기능을 제공하지 않고 마크하려고 하면 잘못된 파티션이라고 무시해 버립니다. 필요가 없으니까요!



자 그럼 이제 마지막 의문을 해결해 보죠.(뭔 놈의 의문이 이리도...) 논리 드라이브는 MBR 이 아닌 EBR 이란 곳에 그 정보가 기록되는 파티션이죠. 하지만 아시는 분은 아시겠지만 EBR 의 외부적인 구조는 MBR 과 동일하다고 할 수 있습니다. 단지 이제 내부적으로 봤을 때 코드 영역은 비어있고 파티션 테이블이 사용되는 방법이 좀 다르긴 하지만요. 아무튼 중요한 것은 구조는 같다는 겁니다.

일단 EBR 의 파티션 테이블과 엔트리에 대해서 살펴보자면 EBR 의 첫 번째 파티션 엔트리는 자기 자신을 의미하며 두 번째 파티션 엔트리는 다음 논리 드라이브를 가르키는 구조를 가지고 있습니다.(이를 통해 서로 물리고 물려서 이론적으로 무한대로 생성이 가능하죠.)

첫 번째 파티션 엔트리가 자기 자신을 의미한다는 것은 MBR 의 파티션 엔트리와 동일한 의미를 가지고 있다는 것을 이야기합니다.(사실 내용도 같고...)


그럼 실제로 논리 드라이브를 준비하고 EBR 의 내용을 살펴 보죠.(하아... 이제 박스 넣고 색칠하기도 귀찮아...)


EBR 에선 실질적으로 첫 번째 두 번째 파티션 엔트리를 제외하곤 사용되지 않다보니 좀 휑하죠... -_-a



논리 드라이브가 하나인지라(이는 곧 해당 논리 드라이브가 마지막 논리 드라이브인지라) EBR 을 보면 첫 번째 파티션 엔트리에만 값이 존재하는 것을 확인할 수 있습니다. 아무튼 그런건 상관없고 중요한건 거기니까! 그리고 EBR 의 파티션 엔트리 자체의 구조는 MBR 의 그것과 동일합니다. MBR 에서 파티션 상태 값으로 사용되던 첫 번째 1 Byte 의 값을 0x80 으로 강제로 바꿔보도록 하겠습니다.



각 디스크 관리 유틸리티를 통해 활성으로 표시되는지 쭈욱 보도록 하겠습니다.

디스크 관리


DiskPart


GDisk



변화가 없죠. 이를 통해 EBR 의 파티션 엔트리 중 파티션 상태 값에 해당하는 값은 MBR 의 그것과는 다르게 사용되지 않는 것을 알 수 있습니다. 단순히 구조를 맞추기 위해 존재하는 값이란 것이죠. 즉, 논리 드라이브는 구조적으로 활성 파티션이 될 수 없습니다.


하아... 이건 또 어떻게 마무리를 해야하는 거지?


p.s 나는 왜 부팅 이야기하다 디스크 구조로 빠지게 되었나... 이 따위로 가서 윈도우 7 부팅을 볼 순 있는 걸까? 아무튼 부팅을 가장한 디스크 관리 글을 마치며...