Linux Mint를 멀티부팅으로 설치하다보니, 부팅과정이 좀 궁금해졌다. 맥북은 grub을 설치해도 이게 뜨기전에 특정 키를 누르고 있으면, 내부적으로 가지고 있는 다른 메뉴를 보여주기도 한다. 윈도우즈 10을 사용중인 PC에 민트를 설치했을 때는 grub이 먼저 실행되는데, 여기서 windows bootloader를 선택해서 윈도우즈를 실행하기도 한다. 예전부터 리눅스 설치할 때 이부분이 좀 모호했다. 그리고 이 부분에 대해 내가 가지고 있는 지식도 너무 낡은거라 업데이트가 필요했고.
먼저 알게 된건, 내가 아는 컴퓨터 바이오스 시스템이 너무 옛날 정보라는거다. 그 옛날 바이오스는 바이오스가 있고, 디스크 파티션에는 MBR(Master Boot Record)라는게 있어서 부팅 디스크라는 플래그(55AA 라고 한다)가 있으면, 그 디스크의 첫번째 섹터를 로드하고 실행했다고 한다. 한 섹터는 고작 512바이트이고 주소도 32비트를 사용했기 때문에, 사용 가능한 하드는 2TB로 용량이 제한되기도 했다.
이런 제한적인 BIOS를 극복하기 위해 나온게 UEFI(Unified Extensible Firmware Interface)이다. 뭐 많은게 다르겠지만, GUI사용이 가능한 점도 있고, 기존 바이오스가 가지고 있던 하드디스크의 2TB용량 제한도 사라지고, 파티션 개수의 제약도 없고 등등. 파티션도 기존 MBR대신 GPT(GUID Partition Table)이란걸 사용한다. 첫 섹터는 기존 MBR과의 호환성 문제로 비워두고, 그 다음에 GPT헤더(GUID 파티션 테이블)가 들어가는데, 64비트 주소를 사용하고 GUID를 식별자로 사용한다. 간단히 파티션에 제한이 없다고 생각하면 될 거 같다. 또, 가장 뒤쪽에는 백업 영역이 있어서, GPT헤더가 손상된 경우에 복구도 가능하다.
너무 구체적인 부분은 나도 잘 모르기도 하고, 부팅 부분에 집중해보자. UEFI는 ESP(EFI System Partition)이라는 별도의 파티션을 가지고 있으며, 여기에는 펌웨어가 로딩할 수 있는 어플리케이션들이 들어 갈 수 있다. 또는, 부트로더나 부트 매니저등도 들어간다. 윈도우즈를 먼저 설치하고 리눅스 민트를 설치했는데, grub은 대체 어디에 설치되나 싶었는데, Gparted로 다음과 같이 윈도우즈가 설치된 HDD에 이미 ESP 파티션이 존재했다.

위 그림을 보면, 윈도우즈가 설치된 디스크의 앞에 100MB의 ESP 영역이 보일 것이다. 커맨드라인으로도 확인이 된다.

위 그림처럼, fdisk를 이용해보면, Type 에 “EFI System”이라고 표시된다. grub은 이 영역에 grub이 실행 될 수 있는 부트 매니저를 저장해 놓는 것으로 추측된다. 기존에 윈도우즈 부트로더도 여기에 있기 때문에, grub에서 windows bootloader선택 항목은 그 windows 부트로더를 로딩하는 일일 것이다.
여기서 잠깐, 부트 매니저와 부트 로더가 좀 헷갈릴 수 있는데, 부트매니저는 사용자가 어떤 부트로더를 사용할지 선택할 수 있게 해주는 것이고, 부트 로더는 해당하는 OS를 로딩하는(아마도 커널을 로딩) 역할을 한다. grub은 부트 매니저이자 리눅스를 로딩하는 부트 로더이기도 하다. 그래서 유저들이 부트 매니저를 다른걸로 설치하기도 하는데, 대표적인게 rEFInd, systemd-boot(gummiboot) 같은게 있다. gummiboot는 grub을 대체하기위해 만들어 졌는데, 나중에 systemd-boot로 이름이 변경됐다.
간단하게 정리해 보자면, 요즘 바이오스는 UEFI라는게 사용되고 있으며, ESP라는 별도 파티션에 부트 로더들과 부트 매니저가 설치되면 펌웨어가 이를 로딩하게 된다. 가장 먼저 사용되는 부트 매니저는 아마도 어딘가 표시가 되어 있을 것이다. rEFInd나 grub같은 부트 매니저들은 부트로더들의 리스트를 보여주고, 사용자가 선택하면 해당 OS의 부트 로더가 실행되게 된다. 끝.