본래, 부팅은 MBR에서 부터 시작됩니다.
MBR이 괜히 Mastr Boot Record가 아니죠, 여기서 부터 부팅에 필요한 코드가 들어가고,
그곳의 부트코드가 다음으로 진행할 곳으로 안내하게 되죠.
그래서 이곳에 담겨진 부트코드를 부트매니져라고 부릅니다.
GRUB/LILO/SYSLINUX/윈도우즈 부트매니저 등이 여기에 속하죠.
이러한 부트코드는 운영체제를 로드하기 위한 것으로, 운영체제보다 먼저 실행되며, 운영체제에 속하는 파일시스템을 해석할 필요가 본래 없으며,
운영체제의 부트코드로 안내하기 위한 코드입니다.
운영체제의 부트코드는 부트섹터(PBR, Partition Boot Record)에 담겨지는 것이고, 보통은 MBR에서 PBR로 안내하게 되지만,
GRUB이나 SYSLINUX 부트로더의 경우, chainload 기능을 통해서, 읽어 들인 MBR코드 자체를 교체하여, 다른 부트매니저로 전환하는 기능이 있습니다.
만일, MBR에 실행 코드가 없다면, 파티션에 등록된 Bootable(Active)파티션을 찾아서, 그 파티션의 PBR로 부팅하게 되겠죠.
하지만, 파티션이 여럿으로 나눠지고, 부팅가능한 부트레코드가 여럿 일 경우, 부트매니저에서 어떤 곳으로 갈지 안내해야 합니다.
윈도우즈 부트매니저는 윈도우즈를 위한 부트매니저로, 기본적으로 윈도우즈 관련 운영체제만 안내합니다.
반면, GRUB의 경우, 리눅스 및 윈도우즈, 유닉스, 애플 OS등을 안내할 수 있습니다.
윈도우즈를 설치하면 MBR에 윈도우즈 부트매니저를 심기 때문에, 기본적으로 다른 운영체제로 부팅이 안되는 것입니다.
GRUB이 PBR에 있더라도, 안내하지 않기 때문에, 부팅이 안됩니다.
그래서, 윈도우즈 부트매니저를 사용하는 경우, GRUB4DOS나 WUBI(Windows UBuntu Installer)의 부트로더를 설치하고,
boot.ini나 bcdeditexe.exe를 이용해서 GRLDR나 WUBILDR를 등록해 줘야 합니다.
다만, PBR에 GRUB을 설치한 경우나, PBR에 윈도우즈 부트매니저를 설치한 경우,
MBR의 변경에 영향을 받지 않기 때문에, 재 설치를 요하지 않고, 설정이 편하다는 점은 있습니다.
아래는 GRUB 부트로더를 사용할 경우, PBR로 안내하는 코드입니다.
첫번째 디스크의 첫번째 파티션의 부트코드로 안내
menuentry "Boot into 1’st HDD/1’st Partition" {
chainloader (hd0,1)+1
}
사용자 입력을 받아 그곳으로 안내
menuentry "Boot into N’st HDD/N’st Partition" {
echo "Target Disk Number(0>=):"
read dno
echo "Target Parition Number(1>=):"
read pno
chainloader (hd$dno,$pno)+1
}
여기서, +1이 사용된 것이 보시이죠?
이것은 첫번째 512바이트(블럭)를 MBR처럼 생각하고 읽으라는 것입니다.
당연하게도, 이것은 PBR이고, PBR은 MBR과 구조상 같기 때문에, PBR은 파티션에 저장된 MBR이라고 보시면 됩니다.
윈도우즈 부트매니저의 경우, PBR로 접근하여 부팅하는 기능을 제공하지 않습니다.
엇비슷한 기능을 사용하려면, PBR을 파일로 저장하여, application을 bootsector로 하여, path를 해당파일로 설정하여야 합니다.
[code:2v5xm552]bcdedit /create -d Grub4dos /application bootsector
==> GUID출력
bcdedit /set {guid} device boot
또는 bcdedit /set {guid} device partition=C:
bcdedit /set {guid} path /grldr.mbr
bcdedit /displayorder {guid} addlast
[/code:2v5xm552]
위의 코드는 bcdedit.exe를 이용하여 grub4dos를 부트메뉴의 끝에 추가시켜주는 것입니다.
왜 이렇게 과정이 되는지는 이해하셨을 것이라고 생각됩니다.
결론적으로 말씀드리자면, GRUB이 동작되기 위해서는 보통은 MBR에 설치되어야 유효합니다.
그렇지 않고도 접근하는 방법은 chainload를 해주어야 합니다.
윈도우즈 부트매니저의 경우는 부트섹터를 저장해 놓고, 그 부트섹터로 전환하는 기능은 존재하니,
GRUB4DOS를 이용하면 GRUB2로 체인로드하거나, 리눅스로 부팅이 가능합니다.
본디, 이것은 아마도, 도스나 윈도우즈3.x/95/98의 부트섹터를 읽어 들이기 위해 존재했을 것입니다.
이런, 리눅스와 윈도우즈의 멀티부팅의 문제의 경우는, 윈도우즈의 폐쇄적인 정책으로 인해 발생하는 것입니다.
MS가 관리하는 운영체제 외에는 부팅에 관해 생각하지 않는다는 것이 MS의 부트매니저 정책인 것 같습니다.