대부분의 사용자들은 부트 로더가 운영 체제 중에서 가장 흥미로운 부분이라고 생각하지 않는다. 부트 로더가 작동하지 않으면 다른 어떠한 부분도 작동할 수 없다. 현재, 이전의 GRUB(Grand Unified Bootloader) Legacy 도구에서 새 GRUB 2로 전환하는 과정이 진행 중이다. Ubuntu 9.10에서는 GRUB 2가 기본 부트 로더이며 기타 주요 Linux 배포판에서는 대부분 GRUB 2가 선택사항이다. 조만간 기타 배포판에서도 GRUB 2를 기본 부트 로더로 배포할 예정이다.
그림 1에는 GRUB Legacy와 GRUB 2로 구현된 부트 프로세스가 표시되어 있다. 컴퓨터에서 실행할 첫 번째 코드는 기본 입/출력 시스템(BIOS)이며 이 코드는 컴퓨터 펌웨어에 저장된다. BIOS는 부트 장치의 첫 번째 섹터를 로드하여 이 섹터에 있는 코드를 실행한다. 하드 디스크의 첫 번째 섹터는 MBR(Master Boot Record)이라고도 하며 이 섹터에는 부트 로더의 첫 번째 단계와 MBR 파티션 테이블이 있다. 대부분의 디스크 장치에서 섹터 크기는 512바이트이기 때문에 첫 번째 단계 부트 로더 코드는 매우 작아야 한다. GRUB Legacy 및 GRUB 2와 같은 대부분의 부트 로더는 디스크의 다른 위치에 코드를 추가로 저장한다. GRUB Legacy의 경우에 이 추가 코드는 stage 1.5라고 하며 MBR 바로 뒤에 있는 지정되지 않은 영역에 저장된다. 단순하게 하기 위해 그림 1에는 이러한 파일이 생략되었지만 stage 2라고 하는 코드는 Linux 부트 파티션에 있는 파일(일반적으로 /boot 디렉토리에 있음)에 저장된다. 마찬가지로 다수의 운영 체제가 구성되어 있는 경우, 두 번째 부트 로더는 다른 곳에 추가 구성 파일을 저장한다.
그림 1. 순차적으로 로드되고 실행되는 몇 개의 서브컴포넌트로 구성된 GRUB와 GRUB 2
GRUB 2는 전체적으로 GRUB Legacy와 비슷하지만 stage 1.5가 없고 모듈식 구성 방식으로 구현되어 있으며 다양한 파티션 분할 시스템, 파일 시스템 및 기타 확장을 처리할 코드를 디스크 파일(일반적으로 /boot/grub)에 저장한다.
GRUB Legacy와 GRUB 2를 사용하면 방금 설명한 구성을 변경할 수 있다. 다시 말해서 GRUB의 stage 1 코드를 MBR 대신 Linux 부트 파티션의 첫 번째 섹터에 설치할 수 있다. 이러한 방식으로 사용되는 MBR에는 또 다른 부트 로더가 상주하며 GRUB의 메뉴는 이 부트 로더가 GRUB를 체인로드하는 경우에만 표시된다. 결과적으로 표준 PC 펌웨어로서 BIOS를 대체할 가능성이 있는 EFI(Extensible Firmware Interface)에서는 내장 부트 로더를 제공하기 때문에 이와 같은 구성은 EFI 기반 시스템에서 GRUB 2를 사용하는 경우에 가능하다.
작동 중인 시스템에서 GRUB Legacy를 GRUB 2로 바꾸고자 할 경우에는 새로운 GRUB 2 패키지를 설치하여 해당 파일을 구성하고 특수 명령을 실행하여 기존의 GRUB Legacy MBR과 특수한 숨겨진 코드를 GRUB 2에 맞게 바꾸어야 한다. 기본 부트 로더로 GRUB 2를 사용하는 새로운 배포판을 설치하게 되어 GRUB 2로 전환하게 되는 경우에는 이러한 단계를 수행할 필요가 없다. 어떤 경우이든지 새로운 GRUB 2 구성 파일의 형식과 새로운 부트 로더의 전체 기능을 이해해야 한다.
Linux 전용 시스템에서는 GRUB Legacy가 부트 로더 작업을 완벽하게 처리한다. GRUB 2로 전환하는 이유는 부트 로더 개발과 일부 관련이 있다. GRUB Legacy에는 개발자가 골치 아프게 여기는 유지하기 힘든 코드가 있다. 새로운 기능을 추가하기 위해 개발자는 GRUB Legacy를 기반으로 부트 로더를 작성하기 보다는 처음부터 다시 작성하기로 했다. GRUB 2는 사실상 시스템 관리자에게 중요한 다음과 같은 몇 가지 기능을 지원하며 이러한 기능은 현재나 미래에 중요한 역할을 하게 될 것이다.
- 플랫폼 지원 GRUB Legacy는 x86 및 x86-64 시스템에서만 작동한다. GRUB 2는 더욱 다양한 아키텍처에서 작동하도록 계획되었으며 특정 아키텍처에서 GRUB 2를 사용하는 방법이 문서로 작성되어 있기는 하지만 x86 또는 x86-64의 경우에는 관련 문서가 부족하다. 그렇긴 해도 GRUB 2는 PowerPC®와 SPARC(Scalable Process Architecture)에서 작동한다.
- 펌웨어 지원 GRUB 2는 BIOS와 EFI, OpenFirmware와 같은 펌웨어 유형을 추가로 지원한다. 특수한 CPU를 지원함으로써 특수한 펌웨어를 최소한 일부는 지원하지만 이러한 펌웨어는 매우 실험적이라는 점을 고려해야 한다.
- 파티션 테이블 GRUB Legacy는 이전의 MBR 파티션 분할 스킴만 공식적으로 지원한다. 그러나 대부분의 Linux 배포판은 GPT(GUID Partition Table)를 비공식적으로 지원하는 GRUB Legacy 버전과 함께 제공된다. GRUB 2는 GPT를 공식적으로 지원한다.
- RAID 및 LVM GRUB Legacy는 소프트웨어 기반의 RAID(Redundant Array of Independent Disks)나 LVM(Logical Volume Manager)을 구성하는 것을 지원하지 않는다. 이 때문에 GRUB Legacy가 해당 구성 파일을 읽을 수 있도록 표준 파티션이나 RAID 1 구성에 하나 이상의 파일 시스템이 있어야 한다. GRUB 2는 Linux 형태의 RAID와 LVM을 지원한다. 따라서 RAID나 LVM 파티션만을 사용하여 시스템을 구성할 수 있다.
- 파일 시스템 지원 구성 파일을 읽으려면 GRUB가 이러한 파일이 저장된 파일 시스템을 읽을 수 있어야 한다. GRUB Legacy는 Ext2fs(Extended Filesystem), FAT(File Allocation Table), JFS(Journaling File System), ReiserFS 및 XFS(Extents File System)와 같은 파일 시스템을 지원한다. Linux 전용 시스템에서는 GRUB 2와 GRUB Legacy에서 지원하는 파일 시스템이 서로 비슷하다. 그러나 GRUB 2는 Apple의 HFS+(Hierarchical File System Plus), Microsoft의 NTFS 파일 시스템 및 Sun의 ZFS와 같은 일부 비Linux 파일 시스템을 지원한다.
- 커널 지원 GRUB Legacy는 GNU HURD 커널, OpenSolaris 등이 포함된 Multiboot Specification을 따르는 모든 운영 체제와 Linux, FreeBSD, NetBSD, OpenBSD를 직접 부트할 수 있다. GRUB 2는 이러한 모든 커널과 XNU(Mac OS X 및 Darwin 커널)를 직접 부트할 수 있다. Windows®와 같은 기타 운영 체제를 부트하려면 GRUB Legacy와 GRUB 2를 모두 사용하여 또 다른 부트 로더를 체인로드해야 한다.
이미 GRUB Legacy를 사용해 본 경험이 있는 경우에는 GRUB 2의 구성 파일이 대충 보면 비슷하지만 자세히 보면 다르다는 것을 알 수 있다. 또한, GRUB 2를 구성하는 다른 수단을 알아야 한다.
GRUB 2 구성 파일의 기본 위치는 /boot/grub/grub.cfg이다. 일부 Linux 배포판은 그 대신 /boot/grub2/grub.cfg를 사용하기 때문에 GRUB Legacy와 GRUB 2를 함께 설치할 수 있다. Listing 1에는 GRUB 2 샘플 구성 파일이 있다.
Listing 1. GRUB 2 샘플 구성 파일
set timeout=10
set default=0
menuentry "Linux (2.6.32.2 kernel)" {
set root=(hd1,8)
linux /bzImage-2.6.32.2 ro root=/dev/sdb4
initrd /initramfs-x86_64-2.6.32.2
}
menuentry "Windows 7" {
set root=(hd1,2)
parttool (hd0,1) hidden+
parttool (hd1,5) hidden-
chainloader +1
}
|
GRUB Legacy에 익숙하다면 이러한 기본적인 GRUB 2 구성 파일이 비슷하다는 것을 알 수 있을 것이다. GRUB Legacy 구성 파일과 마찬가지로 GRUB 2 구성 파일은 다양한 글로벌 옵션을 설정하는 섹션으로 시작하며 이 경우에는 timeout 값(10초)과 기본 메뉴 항목이 설정되었다.
파일에서 그 다음에는 일련의 메뉴 항목이 있다. 이러한 항목의 양식은 GRUB Legacy의 양식과는 다르지만 목적은 같다. 다시 말해서, 각 양식에는 다양한 Linux 커널과
같은 부트 변종이나 하나의 운영 체제를 정의한다. 각 메뉴 항목에는 menuentry 키워드와 인용 부호로 둘러싸인 이름이 차례로 지정되며 이 항목은
GRUB 2 메뉴에 표시된다. 이러한 메뉴 항목과 관련된 옵션은 중괄호({}) 사이에 표시된다.
GRUB Legacy와 GRUB 2 구성 파일 형식 간의 몇 가지 차이점은 다음과 같다.
- GRUB 2에서는
set키워드를 사용하며 옵션의 이름과 값 사이에는 등호(=)를 사용한다. 같은 옵션에서 GRUB Legacy는set키워드와 등호가 생략된다. - GRUB Legacy에서는 메뉴 항목이
title키워드로 시작하며 행의 마지막까지 표시된 텍스트가 제목이다. 정의된 나머지 메뉴 항목은 다음 행에 표시되며 이 항목을 정의하는 데는 중괄호를 사용하지 않는다. 메뉴 항목은 다음 메뉴가 정의되기 시작하면 끝난다. - GRUB Legacy는
kernel키워드를 사용하여 Linux 커널을 지정하며 GRUB 2는 그 대신linux를 키워드로 사용한다. - 약간 더 특수한 옵션의 이름이 변경되었다. 예를 들면, Listing 1에서는 새로운
parttool명령을 사용하며 이 명령은 Windows 7을 정의하는 과정에서 간단한 파티션 조작을 수행할 수 있다. Listing 1에서는 이러한 기능을 사용하여 특정 파티션을 숨기거나 표시함으로써 Windows 7에서 마운트할 파티션을 제어한다. GRUB Legacy에서는hide와unhide가 동일한 기능을 수행한다.
또 다른 변화도 매우 중요하지만 Listing 1에서는 분명하게 확인할 수 없다. 즉, GRUB 2에서는 파티션 번호가 1부터 지정되는 데 반해서 GRUB Legacy에서는
0부터 지정된다. 디스크에 번호를 지정하는 방식은 차이가 없다. 따라서 첫 번째 디스크에 있는 첫 번째 파티션이 GRUB Legacy에서는 (hd0,0)가 되지만
GRUB 2에서는 동일한 파티션이 (hd0,1)이 된다. 이 사항은 문제를 일으킬 수 있는 주요 요인이므로 유의해야 한다.
물론 GRUB 2에는 새로운 기능이 많이 구현되었다. 이들 중 일부는 표준 Linux 설치판과는 거의 관련이 없거나 구성 파일에 직접적으로 영향을 주지 않는다. 조정이 필요한 몇 가지 중요한 옵션은 다음과 같다.
- GRUB 2는 모듈식으로 작동하기 때문에 사용자는 명시적으로 모듈을 로드하여 다양한 기능을 지원할 수 있다.
insmod lvm을 통해 LVM 지원을 로드하듯이insmod키워드는 이름이 지정된 모듈을 로드한다. 모듈은 /boot/grub에 저장되며 모듈의 파일 이름 끝에는 .mod가 붙는다. GRUB 2 대부분의 모듈을 자동으로 로드하기 때문에insmod를 명시적으로 사용할 필요는 거의 없지만 때로는 수동으로 모듈을 로드해야 한다. - GRUB 2에는 조건에 따라 조치를 수행하고 데이터를 저장하는 등의 작업을 수행할 수 있도록 새로운 스크립트 작성 기능이 구현되었다. 이러한 기능은 아직 문서화가 부족한 상태이지만 구문상에서 보면 bash의 스크립트 작성 기능과 비슷하다.
Ubuntu 9.10에서는 grub-mkconfig와 이 유틸리티와 짝을 이루는 스크립트(/etc/grub.d에 있음)를 사용하여 시스템을 설치하는 과정에서 /boot/grub/grub.cfg 파일을
자동으로 재작성한다. 커널을 업그레이드하거나 기타 특정 조치를 수행하면 이 스크립트가 자동으로 실행된다. 따라서 grub.cfg 파일을 수동을 변경하려면
이 파일을 백업해야 한다는 점을 유념해야 한다.
어떤 경우에는 grub-mkconfig 유틸리티를 신중하게 실행해야 한다. 기본 구성을 사용하지만 시스템에 새 커널을 추가한 경우에는 새 커널을 확인하여
해당 GRUB 2 구성 파일에 이 커널을 추가하면 된다.
더 세부적으로 변경을 해야 하는 경우에는 /etc/grub.d에 있는 파일을 직접 편집해야 한다. 사실상 이러한 파일은 bash 스크립트이다. 각 스크립트는 특정 유형의 커널이나 운영 체제를 찾는 방법을 시스템에 전달하고 해당 항목을 /boot/grub/grub.cfg에 추가한다.
grub-mkconfig 파일에서 참조하는 추가 파일은 /etc/default/grub이다. 이 파일에는 마지막으로 작성된 /boot/grub/grub.cfg 파일의 글로벌 기본값이 저장된다.
GRUB 2 설치판을 관리하는 데 도움을 줄 수 있는 몇 가지 도구와 스크립트를 써드파티에서 작성했다. 이러한 예로는 StartUp Manager가 있다. 이 GUI(Graphical User Interface) 도구는 Ubuntu와 함께 제공되며 GRUB Legacy와 GRUB 2 설치판을 관리하는 데 도움을 주는 가리키고 누르기 인터페이스를 제공한다.
GRUB Legacy와 마찬가지로 GRUB 2는 한 번만 설치해야 한다. GRUB 2가 설치되고 나면 부트 로더가 /boot/grub/grub.cfg 파일을 읽어서 부트 메뉴를 사용자에게 표시한다. 그렇다 하더라도 GRUB 2를 설치하기 전에 파티션 레이아웃을 검토하고자 할 수도 있다. GRUB 2를 설치한 다음에는 부트 과정에서 조작하는 데 필요한 몇 가지 기본적인 기능을 확인해야 한다.
MBR 파티션 분할 스킴을 사용하는 디스크에 GRUB 2를 설치하는 경우에는 특별한 파티션이 필요 없다. 기술적으로는 GPT에서도 마찬가지이지만 GPT 디스크에 BIOS 부트 파티션이 있는 경우에는 GRUB 2가 이 파티션에 추가 코드를 저장하게 된다. BIOS 부트 파티션이 존재하지 않는 경우, GRUB 2는 대신 /boot 디렉토리에 있는 파일에 해당하는 디스크 섹터의 목록에 의존한다. 이러한 파일 시스템을 조정한 적이 있는 경우에는 디스크 섹터 목록이 올바르지 않을 수 있으며 결과적으로 GRUB가 부트할 수 없게 된다. 따라서 GPT 디스크에서는 BIOS 부트 파티션을 사용할 것을 강력하게 권장한다.
BIOS 부트 파티션의 크기는 31KB 이상이 되어야 한다. 더 크게 한다고 해도 아무런 문제 없이 유용하며 미래에는 이 크기를 변경할 필요가 있다.
GNU Parted 최신 버전에서는 파티션에 bios_grub 옵션을 설정하여 이 파티션을 BIOS 부트 파티션으로 전환할 수 있다. GPT fdisk로 파티션 유형 코드를
EF02로 변경한다.
grub-install 명령을 사용하여 GRUB와 같은 방식으로 디스크의 MBR에 GRUB 2를 설치한다. (일부 배포판에서는 이 명령이 grub2-install로 이름이
변경했다.) 이 명령에 설치할 디스크 장치의 이름(일반적으로 /dev/sda 또는 /dev/hda)을 전달한다.
다음과 같이 입력하여 GRUB Legacy를 파티션의 부트 섹터(예: /dev/sda4)에 정상적으로 설치할 수 있다.
grub-install /dev/sda4 |
(필요한 경우 파티션 장치 파일 이름을 변경) 그렇지만 GRUB 2에서는 이 명령이 작동하지 않는다. 다음과 같이 입력하면 이러한 문제를 해결할 수도 있다.
grub-setup --force /dev/sda4 |
(필요한 경우 장치 파일 이름을 변경) 그러나 이 방법이 언제나 작동하는 것은 아니다.
정상적으로 사용하는 동안에는 GRUB 2가 GRUB Legacy처럼 작동한다. 다시 말해서 컴퓨터가 부트되고 BIOS에서 확인 과정을 수행하고 나면 운영 체제 메뉴와 커널 옵션이 표시된다. 사용자는 화살표 키를 사용하여 부트할 운영 체제를 선택한 다음, Enter를 누른다. 선택을 하지 않으면 구성 파일 옵션에 따라 기본값으로 부트된다.
항목이 작동하지 않는 경우에는 GRUB 2 편집 모드를 사용하여 이 항목을 한 번 변경할 수 있다. Enter를 눌러서 항목을 부트하는 대신 E 키를 눌러서 항목을 편집한다. Emacs와 같은 편집 옵션을 따르는 간단한 편집기가 표시된다. 편집을 완료한 다음, Ctrl-X를 눌러서 변경된 항목으로 부트한다.
GRUB 2가 해당 구성 파일을 찾지 못하는 경우에는 grub> 프롬프트가 표시된다. 구성 파일의 메뉴 항목에서 사용한 것과 같은 GRUB 2 명령을 입력할 수 있다.
GRUB 2를 사용하는 데 익숙한 경우에는 컴퓨터가 부트되도록 할 수도 있다. 불행히도 GRUB 2의 명령행 모드를 사용하여 문제점을 해결하는 방법을 완전히
설명하기에는 이 기사가 너무 길어진다.
GRUB 2를 사용하는 주된 이유는 기본적으로 GRUB 2를 설치하는 배포판을 사용하거나 XNU 커널을 직접 부트할 수 있는 기능과 같은 GRUB 2의 특수 기능 중 하나를 이용하는 데 있다. 기타 대부분의 경우에는 GRUB Legacy에 비해 GRUB 2가 제공하는 장점이 거의 없다. 이러한 사례 중 하나는 사용자가 BIOS 기반 컴퓨터에서 GPT를 사용하는 경우이다. GRUB 2는 이러한 구성을 지원하지만 표준 GRUB Legacy는 지원하지 않는다. GPT를 지원하는 GRUB Legacy 패치 버전을 사용할 수 있으며 이 버전은 최신 배포판과 함께 제공되지만 공식적으로 GPT를 지원하는 부트 로더를 사용하는 것을 사용자가 선호할 수도 있다.
결론적으로 말해서 설치한 부트 로더가 이미 작동하는 경우에는 그것을 계속 사용하는 것이 최상이다. 부트 로더를 변경하면 시스템이 부트되지 않을 수 있으며 이러한 문제를 해결하는 작업은 성가신 일이다.
그렇긴 하지만 계속 추진되고 있는 GRUB Legacy를 GRUB 2가 대체할 가능성이 있으며 따라서 사용자는 테스트 시스템이나 가상 머신에서만이라도 GRUB 2에 익숙해지기를 원할 수도 있다. 조만간 사용하는 배포판에서 부트 로더가 변경되었기 때문에 GRUB 구성 파일 형식이 변경되었다는 사실을 확인할 수도 있다. 약간의 사전 조사를 하면 별다른 문제 없이 이러한 변화를 견뎌낼 수 있을 것이다.
교육
- GRUB 2 및 EFI에서는 EFI 기반 시스템에서 GRUB 2를 사용하는 방법을 배울 수 있다.
-
GNU GRUB 2는 Ubuntu를 주로 다루는 사이트로 GRUB 2와 관련된 다양한 주제가 자세하게 문서화되어 있다.
-
Learn Linux, 101: Boot managers"(developerWorks, 2010년 4월): 이 기사에서는 부트 프로세스와 가장 일반적으로 사용되는 두 가지
부트 로더인 LILO와 GRUB를 소개하며 또한, 이러한 부트 로더의 작동 방식과 구성 방법 그리고 공통된 문제점을 해결하는 방법을 살펴본다.
-
"Make the most of large drives with GPT and Linux"(developerWorks, 2009년 7월): 이 기사에서는 사용자의 Linux 시스템이 미래의 디스크 스토리지에
맞게 완전히 준비되었는지 확인하는 방법을 설명한다.
-
developerWorks Linux 영역에서 Linux 개발자와 관리자에게 도움이 되는 수백 개의 입문 기사와 튜토리얼, 다운로드, 토론 포럼 및 기타 다양한 리소스를 확인할 수 있다.
-
다양한 IBM 제품 및 IT 주제에 중점을 두고 있는 developerWorks
기술 행사 및 웹 캐스트를 통해 최신 정보를 얻을 수 있다.
-
무료
developerWorks Live! briefing을 통해 최신 IBM 제품 및 도구에 대한 정보뿐만 아니라 IT 업계의 최신 경향까지도 빠르게
확인할 수 있다.
-
developerWorks
on-demand demos에서는 입문자를 위한 제품 설치 및 설정부터 숙련된 개발자를 위한 고급 기능까지 망라된 다양한 데모를 제공한다.
-
developerWorks Twitter에 가입하거나 developerWorks의 Linux 트윗 피드를 구독하자.
제품 및 기술 얻기
-
StartUp Manager는 GRUB 2 구성 도구이다.
-
기본 GRUB 사이트에는 GRUB Legacy와 GRUB 2를 위한 문서와 다운로드 링크가 있다.
-
자신에게 가장 적합한 방법으로 IBM
제품을 평가해 보자. 시험판 제품을 다운로드하거나, 온라인으로 제품을 사용해 보거나, 클라우드 환경에서 제품을 사용하거나,
SOA Sandbox에서
SOA(Service Oriented Architecture)를 효과적으로 구현하는 방법을 배울 수 있다.
토론
-
developerWorks community에 참여하자.
개발자 중심 블로그, 포럼, 그룹 및 Wiki 검색 중에 다른 developerWorks 사용자와 의견을 교환해 보자.
