linuxfromscratch:12.1:167-using_grub_to_set_up_the_boot_process

Linux From Scratch - Version 12.1-systemd
Chapter 10. Making the LFS System Bootable
이전 위로 / 처음으로 다음
Linux-6.7.4 마무리

참고
시스템에 UEFI가 지원되고 UEFI로 LFS를 부팅하려는 경우 이 페이지의 지침을 건너뛰고 이 페이지에서 grub.cfg의 구문과 파일에서 파티션을 지정하는 방법을 익힌 후 BLFS 페이지에 제공된 지침을 사용하여 UEFI 지원으로 GRUB을 구성해야 합니다.



경고
GRUB를 잘못 구성하면 CD-ROM 또는 부팅 가능한 USB 드라이브와 같은 대체 부팅 장치 없이는 시스템이 작동하지 않을 수 있습니다. 이 섹션은 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

GRUB는 드라이브와 파티션에 대해 (hdn,m) 형식의 자체 명명 구조를 사용합니다. 여기서 n은 하드 드라이브 번호이고 m은 파티션 번호입니다. 하드 드라이브 번호는 0부터 시작하지만, 파티션 번호는 일반 파티션의 경우 1부터 시작합니다(확장 파티션의 경우 5부터 시작). 이는 두 번호가 모두 0부터 시작했던 이전 버전과 다릅니다. 예를 들어, 파티션 sda1은 (hd0,1)에서 GRUB로, sdb3은 (hd1,3)입니다. 리눅스와 달리 GRUB는 CD-ROM 드라이브를 하드 드라이브로 간주하지 않습니다. 예를 들어, hdb에 CD를 사용하고 hdc에 두 번째 하드 드라이브를 사용하는 경우 두 번째 하드 드라이브는 여전히 (hd1)이 됩니다.

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

부팅 파티션의 위치는 구성에 영향을 미치는 사용자의 선택입니다. 부팅 정보만을 위한 별도의 작은(권장 크기는 200MB) 파티션을 만드는 것이 좋습니다. 이렇게 하면 LFS든 상용 배포판이든 각 빌드에서 동일한 부팅 파일에 액세스할 수 있으며 부팅된 모든 시스템에서 액세스할 수 있습니다. 이 방법을 선택하면 별도의 파티션을 마운트하고 현재 /boot 디렉터리의 모든 파일(예: 이전 섹션에서 방금 빌드한 리눅스 커널)을 새 파티션으로 이동해야 합니다. 그런 다음 파티션을 마운트 해제하고 /boot로 다시 마운트해야 합니다. 이 경우 /etc/fstab을 업데이트해야 합니다.

현재 LFS 파티션에 /boot를 그대로 두어도 작동하지만 여러 시스템에 대한 구성이 더 어렵습니다.

위의 정보를 사용하여 루트 파티션(또는 별도의 파티션을 사용하는 경우 부팅 파티션)에 적합한 지정자를 결정합니다. 다음 예에서는 루트(또는 별도의 부팅) 파티션이 sda2라고 가정합니다.

boot/grub에 GRUB 파일을 설치하고 부팅 트랙을 설정합니다.

경고
다음 명령은 현재 부트 로더를 덮어씁니다. 다른 부트 관리자를 사용하여 MBR(마스터 부트 레코드)을 관리하는 경우와 같이 원치 않는 경우에는 이 명령을 실행하지 마세요.


grub-install /dev/sda

참고
시스템이 UEFI를 사용하여 부팅된 경우, grub-installx86_64-efi에 대한 파일을 설치하려고 시도하지만 해당 파일은 8장에서 설치되지 않았습니다. 이 경우 위의 명령에 –target i386-pc를 추가합니다.


boot/grub/grub.cfg를 생성합니다.

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

insmod part_gpt
insmod ext2
set root=(hd0,2)

menuentry "GNU/Linux, Linux 6.7.4-lfs-12.1-systemd" {
        linux /boot/vmlinuz-6.7.4-lfs-12.1-systemd root=/dev/sda2 ro
}
EOF

insmod 명령은 part_gptext2라는 이름의 GRUB 모듈을 로드합니다. 이름과 달리 ext2는 실제로 ext2, ext3ext4 파일 시스템을 지원합니다. grub-install 명령은 “닭이 먼저냐 달걀이 먼저냐” 문제 없이 다른 모듈(/boot/grub/i386-pc에 있는)에 액세스할 수 있도록 일부 모듈을 기본 GRUB 이미지(MBR 또는 GRUB BIOS 파티션에 설치)에 임베드하므로 일반적인 구성에서는 이 두 모듈이 이미 임베드되어 있으며 이 두 insmod 명령은 아무 일도 하지 않습니다. 하지만 어쨌든 해를 끼치지는 않으며 일부 구성에서는 필요할 수 있습니다.

참고
GRUB의 관점에서 커널 파일은 사용된 파티션에 상대적입니다. 별도의 /boot 파티션을 사용했다면 위의 linux 줄에서 /boot를 제거하세요. 또한 설정된 루트 줄이 부팅 파티션을 가리키도록 변경해야 합니다.

참고
일부 디스크(USB 드라이브 같은 이동식 디스크 포함)를 추가하거나 제거한 경우 파티션의 GRUB 지정자가 변경될 수 있습니다. 이 변경으로 인해 부팅 실패가 발생할 수 있는데, 이는 grub.cfg가 일부 “이전” 지정자를 참조하기 때문입니다. 이러한 문제를 방지하려면 GRUB 지정자 대신 파티션의 UUID와 파일 시스템의 UUID를 사용하여 장치를 지정할 수 있습니다. lsblk -o UUID,PARTUUID,PATH,MOUNTPOINT를 실행하여 파일 시스템(UUID 열에)과 파티션(PARTUUID 열에)의 UUID를 표시합니다. 그런 다음 set root=(hdx,y)search –set=root –fs-uuid <커널이 설치된 파일시스템의 UUID>로 바꾸고 root=/dev/sda2root=PARTUUID=<LFS가 구축된 파티션의 UUID>로 바꿉니다.

파티션의 UUID는 이 파티션에 있는 파일 시스템의 UUID와 완전히 다릅니다. 일부 온라인 리소스에서는 root=PARTUUID=<파티션 UUID> 대신 root=UUID=<파일 시스템 UUID>를 사용하라고 안내할 수 있지만 그렇게 하려면 LFS의 범위를 벗어나는 initramfs가 필요합니다.

/dev에 있는 파티션의 장치 노드 이름도 변경될 수 있습니다(GRUB 지정자 변경보다는 가능성이 낮습니다). 장치 노드 이름이 변경된 경우 잠재적인 부팅 실패를 방지하기 위해 /etc/fstab에서 /dev/sda1과 같은 장치 노드 경로를 PARTUUID=<파티션 UUID>로 대체할 수도 있습니다.

GRUB는 매우 강력한 프로그램이며 다양한 장치, 운영 체제 및 파티션 유형에서 부팅할 수 있는 수많은 옵션을 제공합니다. 또한 그래픽 스플래시 화면, 사운드 재생, 마우스 입력 등과 같은 사용자 정의 옵션도 많이 있습니다. 이러한 옵션에 대한 자세한 내용은 여기서 소개하는 범위를 벗어납니다.

주의
구성 파일을 자동으로 작성할 수 있는 grub-mkconfig라는 명령이 있습니다. 이 명령은 /etc/grub.d/에 있는 스크립트 세트를 사용하며 사용자가 만든 모든 사용자 정의를 파괴합니다. 이러한 스크립트는 주로 소스 배포판이 아닌 배포판을 위해 설계되었으며 LFS에는 권장되지 않습니다. 상용 리눅스 배포판을 설치하는 경우 이 프로그램이 실행될 가능성이 높습니다. grub.cfg 파일을 백업하세요.

  • linuxfromscratch/12.1/167-using_grub_to_set_up_the_boot_process.txt
  • 마지막으로 수정됨: 2024/06/15 13:48
  • 저자 baecy