부팅 USB

GRUB 부트로더

본 토픽은 현재 준비중입니다.공동공부에 참여하시면 완성 되었을 때 알려드립니다.

GRUB 소개

 GRUB(GRand Unified Bootloader)[그러브]는 Linux 기반 운영체제의 부팅을 위해 사용되는 부트로더 시스템이다. 거의 대부분의 Linux 기반 운영체제를 포함하여 Windows 부트로더인 Windows Boot Manager를 로드하는 기능 또한 수행할 수 있어 부트로더 중 가장 먼저 실행되어 활용할 수 있다.

 여기선 Ubuntu 설치 이미지에 포함된 GRUB 부트로더를 가져와 설치하고 부트 메뉴를 구성한 뒤 iso 파일을 로드하거나 다른 부트로더를 로드하는 과정에 대해서 설명한다.

 Windows 부트로더(bootmgr)에서는 리눅스 부팅을 위한 GRUB로의 Chainloading을 지원하지 않으므로 GRUB가 1차 부트로더가 되어야 한다.

GRUB 설치

 Rufus의 UEFI:NTFS 부트로더가 설치된 USB는 처음에 UEFI_NTFS 파티션이 로드가 되고 그 뒤 본 파티션에서 efi/boot/bootx64.efi 및 efi/boot/grubx64.efi 파일을 로드한다. GRUB 부트로더를 실행하기 위한 절차이며, 이 문서에서는 Ubuntu ISO 파일에 포함되어 있는 GRUB 바이너리를 설치한다. 2023년 3월 6일 기준 최신 Ubuntu 버전은 22.04.2이다. ubuntu-22.04.2-live-server-amd64.iso 파일을 다운로드 한 뒤 압축 프로그램으로 파일을 압축해제하면, GRUB 부트로더를 추출할 수 있는데, 아래 경로의 파일을 복사하여 USB의 동일한 경로에 붙여 넣는다. 해당 GRUB의 버전은 2.06이다.

├─boot
│  └─grub
│      │  grub.cfg
│      │  
│      ├─fonts
│      │      unicode.pf2
│      │      
│      ├─i386-pc
│      │      *
│      │      
│      └─x86_64-efi
│              *
│              
└─efi
    └─boot
            bootx64.efi
            grubx64.efi

grub.cfg

 이제 GRUB 부팅이 가능한 상태다. 하지만 부트 메뉴를 구성하지 않았기 때문에 grub.cfg 파일을 수정하여 메뉴를 구성할 수 있다. boot/grub/grub.cfg 파일이 GRUB의 부팅 메뉴 구성 파일이며, 해당 파일을 GRUB 문법에 맞게 수정하여 Linux 배포판 별 ISO 파일을 로드하거나 Windows 부트 매니저를 로드하는 등의 작업을 할 수 있다.

if loadfont /boot/grub/font.pf2 ; then
    set gfxmode=auto
	insmod efi_gop
	insmod efi_uga
	insmod gfxterm
	terminal_output gfxterm
fi

if [ $grub_platform = pc ] ; then
	set menu_color_normal=black/light-gray
	set menu_color_highlight=white/magenta
fi
if [ $grub_platform = efi ] ; then
	set menu_color_normal=black/light-gray
	set menu_color_highlight=white/red
fi

set default=3
set timeout=-1

menuentry 'Master bootloader' {true}
if [ $grub_platform = pc ] ; then
	menuentry 'This system has been booted to the Legacy BIOS platform with USB.' {true}
fi
if [ $grub_platform = efi ] ; then
	menuentry 'This system has been booted to the EFI platform with USB.' {true}
fi
menuentry '--------------------------------------------------------------' {true}
menuentry 'Chainloading Windows Boot Manager' {
	chainloader /EFI/BOOT/bootmgfw.efi
}
menuentry 'Boot ubuntu-18.04.6-desktop-amd64' {
	set iso_path='/iso/ubuntu-18.04.6-desktop-amd64.iso'
	loopback loop $iso_path
	linux	(loop)/casper/vmlinuz boot=/casper file=/preseed/ubuntu.seed iso-scan/filename=$iso_path noeject noprompt splash --
	initrd	(loop)/casper/initrd
}
menuentry 'Install ubuntu-18.04.6-server-amd64' {
	set iso_path='/iso/ubuntu-18.04.6-server-amd64.iso'
	loopback loop $iso_path
	set gfxpayload=keep
	linux	(loop)/install/vmlinuz boot=/install file=/preseed/ubuntu-server.seed iso-scan/filename=$iso_path noeject noprompt splash --
	initrd	(loop)/install/initrd.gz
}
menuentry 'Boot ubuntu-20.04-desktop-amd64' {
	set iso_path='/iso/ubuntu-20.04-desktop-amd64.iso'
	search --set -f $iso_path
	loopback loop $iso_path
	linux	(loop)/casper/vmlinuz boot=/casper file=/preseed/ubuntu.seed iso-scan/filename=$iso_path noeject noprompt splash --
	initrd	(loop)/casper/initrd
}
menuentry 'Install ubuntu-20.04-server-amd64' {
	set iso_path='/iso/ubuntu-20.04-legacy-server-amd64.iso'
	search --set -f $iso_path
	# set gfxpayload=keep
	loopback loop $iso_path
	linux	(loop)/install/vmlinuz boot=/install file=/preseed/ubuntu-server.seed iso-scan/filename=$iso_path noeject noprompt splash --
	initrd	(loop)/install/initrd.gz
}
menuentry '--------------------------------------------------------------' {true}
menuentry 'System Firmware Settings' {
	fwsetup
}
menuentry 'System Reboot' {
	reboot
}
menuentry 'System Shutdown' {
	halt
}
menuentry 'Exit GRUB' {
	exit
}
 Ubuntu Server ISO 파일을 로드하는 경우 cd-rom 마운트가 되지 않는 문제가 발생한다. 수동으로 Ubuntu Server ISO 파일을 마운트하는 과정이 필요하다.
  • 봤어요 0명

댓글

댓글 본문