8.4. GRUB을 사용하여 부팅 프로세스 설정

8.4.1. 도입

[주의]

주의

GRUB을 잘못 구성하면 CD-ROM과 같은 대체 부팅 장치없이는 시스템이 작동하지 않게 될 수 있다. 이 절은 LFS 시스템을 부팅하는 데 필요하지 않다. Grub-Legacy, GRUB2, LILO와 같은 현재 사용 중인 부트 로더를 수정하는 편이 나을 수도 있다.

컴퓨터를 사용할 수 없게 되었을 때(부팅이 불가능한 경우)를 대비해 이를 되살릴 수 있도록 비상 부팅 디스크를 준비하라. 부팅 장치가 아직 없다면 생성하는 것이 좋다. 아래 절차를 제대로 따르려면 BLFS로 이동하여 libisoburn 패키지에서 xorriso를 설치해야 한다.

cd /tmp 
grub-mkrescue --output=grub-img.iso 
xorriso -as cdrecord -v dev=/dev/cdrw blank=as_needed grub-img.iso
[참고]

참고

UEFI를 사용하도록 설정한 호스트 시스템에서 LFS를 부팅하려면 커널을 이전 절에서 설명한 CONFIG_EFI_STUB 기능을 사용하여 빌드해야 한다. 그러나 LFS는 그러한 추가없이 GRUB2를 사용하여 부팅할 수 있다. 이렇게 하려면 호스트 시스템 BIOS의 UEFI 모드 및 보안 부팅 기능을 비활성화 해야 한다. 자세한 내용은 http://www.linuxfromscratch.org/hints/downloads/files/lfs-uefi.txt에서 lfs-uefi.txt 힌트를 참고하라.

8.4.2. GRUB 명명 규칙

GRUB은 (hdn,m) 형식으로 드라이브 및 파티션에 고유한 명명 방식을 사용한다. 여기서 n은 하드 드라이브 번호이고 m은 파티션 번호이다. 하드 드라이브 번호는 0부터 시작하지만 파티션 번호는 일반 파티션의 경우 1부터, 확장 파티션의 경우 5부터 시작한다. 이는 두 숫자가 모두 0에서 시작하는 이전 버전과 다르다는 점에 주의하라. 예를 들어, 파티션 sda1은 GRUB에서 (hd0,1)이고 sdb3(hd1,3)이다. 리눅스와 달리 GRUB은 CD-ROM 드라이브를 하드 드라이브로 간주하지 않는다. 예를 들어, hdb에서 CD를 사용하고, hdc에서 두 번째 하드 드라이브를 사용한다면, 두 번째 하드 드라이브는 여전히 (hd1)이다.

8.4.3. 구성 설정

GRUB은 하드 디스크의 물리적 첫 번째 트랙에 데이터를 쓰는 방식으로 작동한다. 이 영역은 파일 시스템의 일부가 아니다. 그 곳의 프로그램은 부트 파티션의 GRUB 모듈에 액세스한다. 기본 위치는 /boot/grub/이다.

부트 파티션의 위치는 구성하는 사용자의 선택에 달렸다. 한 가지 권장 사항은 부팅 정보를 위한 별도의 작은(권장 크기는 100 MB) 파티션을 만드는 것이다. 이렇게 하면 LFS 또는 일부 상용 배포판에 관계없이 각 빌드가 동일한 부팅 파일에 액세스할 수 있으며 부팅된 모든 시스템에서 액세스할 수 있다. 이렇게 하려면 별도의 파티션을 마운트하고 현재 /boot 디렉토리의 모든 파일(가령 이전 절에서 방금 빌드한 리눅스 커널)을 새 파티션으로 이동해야 한다. 그런 다음 파티션을 마운트 해제하고 /boot로 다시 마운트하라. 이렇게 할 경우 반드시 /etc/fstab을 업데이트하라.

현재의 lfs 파티션을 사용하는 것도 문제없지만 여러 시스템에 대한 구성은 더 까다롭다.

위의 정보를 사용하여 root 파티션(또는 별도의 파티션을 사용한다면 부트 파티션)의 적절한 이름를 확인하라. 다음 예시에서는 root 파티션(또는 별도의 부트 파티션)이 sda2인 것으로 가정한다.

GRUB 파일들을 /boot/grub에 설치하고 부트 경로를 설정한다:

[주의]

주의

다음 명령은 현재 부트 로더를 덮어쓴다. 다른 부팅 관리자로 마스터 부트 레코드(Master Boot Record, MBR)를 관리하는 경우와 같이, 덮어쓰기를 원하지 않는다면 이 명령을 실행하지 않도록 하라.

grub-install /dev/sda
[참고]

참고

시스템이 UEFI를 사용하여 부팅된 경우 grub-installx86_64-efi를 대상으로 한 설치를 시도할 것이다. 그러나 해당 파일들은 6장에서 설치되지 않았다. 이 경우 위의 명령에 --target i386-pc를 추가하라.

8.4.4. GRUB 구성 파일 생성

/boot/grub/grub.cfg를 생성하라:

cat > /boot/grub/grub.cfg << "EOF"
# Begin /boot/grub/grub.cfg
set default=0
set timeout=5

insmod ext2
set root=(hd0,2)

menuentry "GNU/Linux, Linux 5.5.3-lfs-9.1" {
        linux   /boot/vmlinuz-5.5.3-lfs-9.1 root=/dev/sda2 ro
}
EOF
[참고]

참고

GRUB의 관점에서 커널 파일은 사용된 파티션에 상대적이다. 별도의 /boot 파티션을 사용한다면 위의 linux 행에서 /boot를 제거하라. 또 set root 행이 부트 파티션을 가리키도록 수정해야 한다.

GRUB은 매우 강력한 프로그램으로 다양한 장치, 운영 체제 및 파티션 유형에서 부팅할 수 있는 엄청난 수의 옵션을 제공한다. 더불어 그래픽 스플래시 화면, 소리 재생, 마우스 입력 등과 같은 사용자 정의를 위한 많은 옵션들도 있다. 이러한 옵션에 대한 자세한 내용들은 본 주제의 범위를 벗어난다.

[경고]

경고

구성 파일을 자동으로 작성할 수 있는 grub-mkconfig라는 명령이 있다. 이것은 /etc/grub.d/의 스크립트들을 사용하는데, 사용자가 만드는 모든 사용자 정의를 파괴한다. 이 스크립트들은 주로 소스가 없는 배포판용(for non-source distributions)으로 설계되었으며 LFS에는 권장되지 않는다. 만약 상용 리눅스 배포판을 설치한다면 이 프로그램이 실행될 가능성이 농후하다. 반드시 grub.cfg 파일을 백업하라.