삽질도 두드려 보고,

DESIGN YOUR EXPERIENCE

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

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이다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
├─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 부트 매니저를 로드하는 등의 작업을 할 수 있다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
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 파일을 마운트하는 과정이 필요하다.

댓글

댓글 본문
버전 관리
Hyunseok Lim
현재 버전
선택 버전
공동공부
graphittie 자세히 보기