부팅과 멀티 부팅

[Ntldr] 윈도우 XP 의 부팅 : BOOT.INI - 윈도우 형식 부팅 항목의 이해

CApple 2012. 1. 12. 07:37
지난 글인 윈도우 XP 의 부팅 : BOOT.INI 부팅 환경 설정 파일의 이해에 바로 이어 [operating systems] 범주에 해당하는 부팅 항목들에 대해서 이야기를 계속해 보도록 하겠습니다.



시작하기 전 기본 내용 되짚어보기

지난 글에 이어서 계속 이야기를 해 보자면 [Operating Systems] 라는 범주의 이름이 그러하듯 이곳은 OS 즉, 부팅할 운영체제에 관한 항목들을 설정하는 곳입니다.

제가 예전 글에서 이런 이야기를 했죠. NTLDR 부트 매니저 자체로는 5.x 버전대의 XP 계열 윈도우들만 부팅시킬 수 있다고요. 그리고 자신이 부팅시키지 못하는 운영체제들은 해당 운영체제를 부팅시킬 수 있는 부트 매니저에게 제어권을 넘기는 방식을 사용한다고 말이죠.

이러한 특성에 맞게 [Operating Systems] 에 포함되는 부팅 항목들도 윈도우 형식 부팅 항목부팅 섹터 형식 부팅 항목의 두 가지 형식으로 크게 나누어집니다. 윈도우 부팅 형식은 5.x 버전대의 XP 계열 윈도우들을 위한 것이며 부팅 섹터 형식은 NTLDR 로 부팅시킬 수 없는 나머지 운영체제들을 위해 적절한 부팅 섹터 파일이나 이러한 형식을 지원하는 부트 로더(부트 매니저) 파일을 읽어들이기 위한 형식이죠.

윈도우 형식 - 윈도우 2000, 윈도우 XP, 윈도우 서버 2003 과 같은 윈도우들을 위한 부팅 항목
부팅 섹터 형식 - 부팅 섹터 파일이나 그러한 구조를 가진 부트 로더를 읽어들이기 위한 부팅 항목


그럼 오늘 포스팅에서는 이 중에서 윈도우 형식의 부팅 항목들이 어떠한 구조를 가지고 있는지 그 요소들을 뜯어보도록 하겠습니다.




예제 멀티 부팅 환경 다시 보기

일단 지난 글에서 미리 꾸며놓은 멀티 부팅 환경을 다시 보도록 하겠습니다.


multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="윈도우 XP (1)" /noexecute=optin /fastdetect
multi(0)disk(0)rdisk(0)partition(2)\WINDOWS="윈도우 XP (2)" /noexecute=optin /fastdetect
multi(0)disk(0)rdisk(1)partition(1)\WINDOWS="윈도우 XP (3)" /noexecute=optin /fastdetect


이렇게 세 개의 윈도우를 스크린 샷에서와 같이 개별적인 파티션에 각각 설치하여 멀티 부팅 환경을 꾸몄고, BOOT.INI 파일의 [operating systems] 에는 박스와 같이 세 개의 부팅 항목이 존재하고 있습니다. 한 줄의 부팅 항목이 각각 하나의 윈도우를 의미한다는 것은 이미 이야기를 드렸죠.




윈도우 형식 부팅 항목 하나씩 뜯어보기

일단 예제 환경의 내용을 보면 윈도우 형식 부팅 항목이 아래와 같이 생겼다는 건 누구라도 알 수 있겠죠?

multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="윈도우 XP (1)" /noexecute=optin /fastdetect


그럼 이제 이걸 어떻게 해석하는 것인지 그걸 알아야 하겠죠. 뭔가 복잡해 보이는데 실상은 매우 쉽습니다. 음... 일단 윈도우 부팅 항목은 크게 세 가지 부분으로 나눌 수 있습니다. 아래와 같이 말이죠.



이쁘게 잘 나눠졌죠. ^^; 자 그럼 이제 이걸 하나 하나 뜯어서 요리조리 살펴보도록 하죠.


1. 윈도우 경로

multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="윈도우 XP (1)" /noexecute=optin /fastdetect

이 윈도우 경로 부분이 흔하게 접하는 경로 형식이 아니기 때문에 처음보면 많이 난감할텐데요. 실상은 진짜 뭐 별거 없습니다. 일단 현재 예제가 되고 있는 윈도우 XP (1) 이 설치된 위치를 윈도우를 통해 살펴보면 아래와 같습니다.



그럼 현재 시스템에서 저 윈도우의 전체 경로는 어떻게 되나요? 윈도우식으로 이야기를 하자면 C: 드라이브\WINDOWS 경로에 위치해 있죠? 그걸 표현하면 아래와 같습니다.

C:\WINDOWS


굉장히 친숙한 경로죠. 이제 여기에서 폴더 경로(디렉토리 경로)는 문제가 안 됩니다. 왜냐하면 이건 여기나 저기나 전부 쓰는 개념이거든요. 근데 드라이브 경로라는 것은 문제가 좀 있죠. 범용적이지 못하거든요. 그래서 이와 같이 특정 시스템에서만 쓸 수 있는 개념이 아니라 모두가 알 수 있는 좀 더 확실하고 범용적인 경로가 필요합니다.(윈도우는 x86 시스템 뿐만 아니라 당장 IA - 아이테니엄 시스템에서도 써야하고 Alpha 나 PowerPC 도 있고...) 그래서 C: 드라이브라고 불리우는 그곳을 디스크와 파티션의 순서라는 좀 더 범용적인 경로로 표현하기로 한 겁니다.



현재 윈도우에서 C: 드라이브라고 칭했던 곳은 시스템에 장착된 첫 번째 디스크첫 번째 파티션을 의미하는 거였네요. 그럼 이제 이걸 범용적인 경로 방식으로 표현해 봅시다. 마침 여기저기 시스템을 가리지 않고 좀 더 범용적으로 쓰이는 ARC 경로라는 것이 있네요. 이를 사용하여 저곳의 경로를 나타내도록 하죠.

* 디스크 번호는 0 번부터 시작되며 파티션 번호는 1 번부터 시작됩니다.
multi(0)disk(0)rdisk(0)partition(1)


짜잔~ 이렇게 현재 시스템에서 윈도우가 위치한 곳의 경로가 ARC 경로로 표현되었습니다. 즉, 현재 예제 시스템에선 아래와 같다는 거죠.

* 주의 - 모든 시스템의 C: 드라이브 경로가 아래와 같다는게 아니라 예제 시스템에서만 입니다.
C: = multi(0)disk(0)rdisk(0)partition(1)


그럼 예제 시스템에서의 윈도우의 전체 경로를 윈도우식 드라이브 경로와 ARC 경로로 비교하여 살펴 볼까요?

C:\WINDOWS

multi(0)disk(0)rdisk(0)partition(1)\WINDOWS


어때요? 간단하죠? 그러니까 ARC 경로라는건 우리가 흔히 사용하는 C: 라는 경로를 다른 시스템들을 위해 좀 더 자세하게 풀어 놓은 것이라고 생각하시면 되는 겁니다. 다른 예로 표현하자면 윈도우에선 C: 드라이브가 리눅스에선 /dev/hda1 뭐 이런 경로로 표현되는 것과 같이 볼륨(저장소)를 표현하기 위한 하나의 경로 형식이라고 생각하셔도 좋고요.


여기에 이제 윈도우는 보통 드라이브 루트의 [WINDOWS] 폴더에 설치가 되기 때문에 윈도우의 경로인 \WINDOWS 를 그대로 이어서 연결하면 되는 거죠. 만약 윈도우가 [WINNT] 폴더에 설치되어 있다면 \WINNT 가 되겠죠? 이와 같이 폴더 경로는 해당 윈도우가 설치된 폴더에 맞춰서 경로를 지정해주시면 됩니다.


추가적으로 ARC 경로에 대해서 좀 더 설명을 하도록 하죠. ARC 경로를 좀 더 뜯어보자면 윈도우에서의 디스크가 ARC 경로에선 rdisk 이고 윈도우에서의 파티션은 그대로 partition 입니다. 그러니까 아래와 같은 거죠.



그런데 ARC 경로 중 rdisk 의 앞에 disk 란 것이 있어서 헷갈릴 수 있는데요. disk 는 scsi 에서 사용하는 경로입니다. 즉, multi 에선 사용할 일이 없는 거죠. 일반적으로 사용되는 E-IDE 나 S-ATA 는 모두 multi 경로로 표현되고, 이런 multi 는 rdisk 와 연결됩니다. 즉,

* 이 때 multi, scsi, disk, rdisk 는 번호가 0 부터 시작되며 partition 은 1 부터 시작됩니다.
multi(0)disk(0)rdisk(x)partition(x) <- multi 면 disk 는 사용되지 않기에 무조건 0

scsi(0)disk(x)rdisk(0)partition(x) <- scsi 면 rdisk 는 사용되지 않기에 무조건 0


이제 이 내용까지 이해하셨으면 처음에 예제 환경으로 보여드린 스크린 샷에서 각각의 윈도우들이 설치된 드라이브의 디스크 - 파티션 위치를 보시고 그 아래의 부팅 항목에서 ARC 경로를 비교해 보세요. 그럼 느낌이 똭! 하고 오실 겁니다. 윈도우 경로 부분은 여기까지 하죠.

참고로 ARC 경로에서 rdisk  의 순서는 펌웨어에서(BIOS, UEFI) 인식된 디스크의 순서를 따라갑니다. 펌웨어에서 인식된 디스크의 순서와 디스크 관리에서 표시되는 디스크 순서가 일치하지 않는 경우도 많습니다. 그렇기 때문에 디스크 관리에서의 디스크 번호와 ARC 경로의 rdisk 의 디스크 번호가 반드시 일치하지 않을 수도 있다는 사실을 주의하세요.




2. 부팅 메뉴 이름

multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="윈도우 XP (1)" /noexecute=optin /fastdetect


이건 뭐 굳이 더 설명할 필요가 있나요? 앞의 윈도우 경로와 공백없이 =(등호) 로 연결하고 반드시 전체를 ""(따옴표) 로 묶어 주어야 한다는 것만 잊지마세요.



3. 부팅 옵션

multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="윈도우 XP (1)" /noexecute=optin /fastdetect

이건 이제 해당 윈도우를 부팅할 때 어떤 속성이나 어떤 기능을 켜고 끄고 뭐 그런 부분을 스위치(매개 변수)로 지정해 주는 겁니다. 기본값은 보시는 것과 같이 /noexecute=optin /fastdetect 가 기본 스위치입니다.

여기에는 여러 가지 스위치가 존재하는데 이건 여러분들이 이제 윈도우 XP 를 최적화하기 위해 관련 글을 보다가 부팅 옵션에 이걸 붙여라 그러면 그 때 해당 스위치를 붙이면 되는 겁니다. 에... 그러니까... 저는 그런 글을 쓴 기억이 없어서... 썼었나? 아닌가? 흠... 좀 찾아보고 올께요.

일단 제가 급하게 찾아본 자료 중엔 아래의 글이 좋은 참고 자료가 되겠네요.



글을 잘 읽어보시면 32비트 윈도우에서 인식하지 못하는 4GB 이상의 메모리를 램 디스크로 활용하기 위하여 실제 주소 확장(PAE) 기능을 켜는 것으로 부팅 옵션에 /PAE 스위치를 넣는 것이 보이시죠?

multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional" /noexecute=optin /fastdetect /usepmtimer /PAE


뭐 이런 식으로 어떤 글에서 "어떤 기능이 필요할 때 어떤 스위치가 사용되니 추가하면 된다." 뭐 그런식으로 설명이 되어 있다면 저런식으로 부팅 옵션 부분에 해당 스위치를 추가하면 된다라고 알고 계시면 됩니다. "/PAE 가 뭔데? 뭐 어쩌라고?" 그러지 마시구요. ^^; 뭐 아무튼 저도 이런 스위치들에 대해 모두 알고 있는 것은 아닙니다. ^^;

참고로 각각의 스위치들은 공백으로 구분됩니다. 윈도우 설치시 기본 옵션은 위에서 이야기한 것과 같이 /noexecute=optin /fastdetect 두 스위치만 붙어 있는 것이구요. 일반적인 부팅 환경이라면 이 기본 옵션에서 벗어나는 일은 아마 거의 없으실 겁니다.

아무튼 이러한 부팅 옵션에는 어떤 스위치들이 있는지 알고 싶으시다면 아래의 문서를 참고하세요.





마치며

윈도우 형식의 부팅 항목에 대한 내용은 이게 끝입니다. 간단...한 거 맞죠? 좀 길었나요? 뭐 그래도 어려운 내용은 없었으리라 생각합니다. ^^; 이제 오늘 설명드린 내용을 토대로 잘 생각해보시면 BOOT.INI 파일에 윈도우 부팅 항목을 적절히 추가하거나 수정하실 수 있겠죠?


참고로 매우 중요한 이야기인데요. 처음에도 이야기했지만 지금까지 이야기한 윈도우는 모두 5.x 버전대인 XP 계열 윈도우들에 대한 이야기였습니다. 그러니까 윈도우 2000, 윈도우 XP, 윈도우 서버 2003 에 관한 이야기였다는 것이죠. 이제 윈도우 비스타, 윈도우 7, 윈도우 서버 2008 이나 R2 를 설치하게 되면 지금까지 이야기한 NTLDR 에 관한 모든 내용은 잊어버리시고 새로운 마음으로 처음부터 다시 BOOTMGR 부트 매니저와 BCD 에 대해서 배우셔야 합니다. 어쩌겠습니까? 윈도우의 부트 매니저 구조가 그런 걸요. ^^;


그럼 이제 마지막으로 다음 글에서 부팅 섹터 형식의 부팅 항목에 대해서 짧게 알아보는 것으로 윈도우 XP 의 부팅은 이쯤에서 마치도록 하겠습니다.


p.s 참고로 실전 예제를 통해 부팅 불능 상황이나 여러가지 상황에 대처하는 것도 알아보아야 할텐데 그건 BOOTMGR 부트 매니저까지 모두 알아본 후 나중에 한 번에 알아보도록 하죠. 가정할 수 있는 상황이 너무 많거든요...

p.s 생각해보니까 윈도우 XP 의 부팅은 매우 간결하게 끝내고 바로 윈도우 7 의 부팅으로 넘어가려고 했는데 이게 왜 여기까지 온거지?


여담으로 ARC 경로에 대해서 추가로 이야기할게요. x86 시스템에선 multi 가 사용되며, rdisk 가 이제 시스템에 연결된 디스크를 의미합니다. E-IDE 시절 밖에 없던 예전엔 rdisk 는 각 채널에 대응하는 것으로 아래와 같은 원리로 디스크의 순서가 결정되었습니다.

Primary Master = rdisk(0)
Primary Slave = rdisk(1)
Secondary Master = rdisk(2)
Secondary Slave = rdisk(3)

요즘은 S-ATA 로 넘어왔죠? E-IDE 와 S-ATA 가 같이 사용되기도 하고요. 그래서 기본적으로 연결 가능한 디스크의 개수가 4 개를 넘어가는 경우가 보통입니다. 이럴땐 multi 같은 부분이 바뀌거나 그런 것은 아니고요.(multi 는 항상 0 으로 고정입니다.) rdisk 에서 번호가 추가로 이어서 계속 나가게 됩니다. rdisk(4)... rdisk(5)... 이런 식으로 나가는 것이죠. 그리고 디스크의 순서는 펌웨어(BIOS, UEFI)에서 인식된 순서를 따라 갑니다. 아래의 글을 참고하세요.

[Ntldr] 윈도우 XP 의 부팅 : S-ATA 와 E-IDE 의 ARC 경로는 어떻게 설정되는가?