InfraPlatform

[꿀팁] grubby를 이용한 grub2 커널 부팅 순서 변경하기

IT오이시이 2020. 12. 26. 23:29
728x90

[꿀팁] grubby를 이용한 grub2 커널 부팅 순서  변경하기

RHEL 8, CentOS8 : grubby를 이용한 커널 부팅 순서 변경하기

(읽기전에 당부할 내용)
우선 현재 커널로 부팅 순서가 잘되는지 연습을 해보고 실제 커널을 추가 설치해서 변경하는 것으로 커널을 만질때 혹시의 불상사를 방지하도록 글을 작성했습니다.  커널은 잘못 만지면 부팅이 안되기 때문에 항상 복구 방안을 생각하면서 작업을 해야 합니다.
(저는 20년 사이 커널 컴파일만 1천번 이상 해보았고,  시스템 설치는 대략 1만번 되는 경험을 가지고 있습니다. 항상 이런 실전의 상황을 고려하기를 당부 드립니다.)

GRUB2와 관련된 환경 파일의 디렉토리는 아래와 같습니다.

/etc/grub2.cfg
/etc/grub.d/*
/boot/grub/grub.cfg

예전에는 /etc/grub2.cfg 와 같은 환경 파일을 수정해서 부팅시 이미지 순서를 변경하는 것이 가능했었습니다. 이제는  이러한 환경 파일들에서 부팅 이미지의 순서를 알수 없게 되었습니다. 그리고 모든 것이 커멘드 명령으로 설정하고 조회하도록 변경 되었습니다.

* 이런 환경 파일들은 반드시 커멘드로 수정하고 임의로 수정하지 않도록 권고합니다. 

 

grubby라는 명령으로 커널의 부팅 순서를 변경하는 것을 해보도록 하겠습니다.

아래와 같이 부팅을 하게 되면 나오는 메뉴를 부트로드의 메뉴라고 합니다. 여기에서 부팅 이미지를 선정하여 부팅시 다양한 버전의 리눅스 커널을 로딩하여 사용 가능합니다. (아래 이미지는 커널을 업그레이드 후의 모습입니다.)

 

1. grub2 의 기본 커널 목록을 확인합니다. 

- grubby --default-kernel 명령으로 부팅시 사용되는 기본 커널을 확인 할 수 있습니다.

grubby --default-kernel
/boot/vmlinuz-4.18.0-193.el8.x86_64

# grubby --default-index
0

2. grub2 의 기본 커널 을 수정합니다.

- grubby --set-default=/boot/vmlinuz-4.18.0-193.el8.x86_64 와 같이 /boot/ 아래 있는  부팅 이미지 파일 이름을 입력합니다.

# grubby --set-default=/boot/vmlinuz-4.18.0-193.el8.x86_64
The default is /boot/loader/entries/13f1789a18d547a393f67d8a55fdbeba-4.18.0-193.el8.x86_64.conf with index 0 and kernel /boot/vmlinuz-4.18.0-193.el8.x86_64

3. grub2 의 설정 상태를 확인합니다.  

grubby --info=kernel이미지명을 입력하면 부팅 인덱스 이름을 알려 줍니다.

주의 인덱스는 0 부터 시작되며 새로운 커널을 설치하면 기존 인덱스는 변경됩니다. 아래 새로운 커널을 추가하고 난 후를 확인 바랍니다.

# grubby --default-kernel 
/boot/vmlinuz-4.18.0-193.el8.x86_64 

# grubby --default-index
0

# grubby --default-title
CentOS Linux (4.18.0-193.el8.x86_64) 8 (Core)

# grubby --info=/boot/vmlinuz-4.18.0-193.el8.x86_64
index=0 kernel="/boot/vmlinuz-4.18.0-193.el8.x86_64" args="ro crashkernel=auto resume=/dev/mapper/cl-swap rd.lvm.lv=cl/root rd.lvm.lv=cl/swap rhgb quiet $tuned_params" root="/dev/mapper/cl-root" initrd="/boot/initramfs-4.18.0-193.el8.x86_64.img $tuned_initrd" title="CentOS Linux (4.18.0-193.el8.x86_64) 8 (Core)" id="13f1789a18d547a393f67d8a55fdbeba-4.18.0-193.el8.x86_64"

4. grub2 의 부팅시 사용되는 환경 상태를 확인합니다.  

grub2-editenv list 

# grub2-editenv list
saved_entry=13f1789a18d547a393f67d8a55fdbeba-4.18.0-193.el8.x86_64
kernelopts=root=/dev/mapper/cl-root ro crashkernel=auto resume=/dev/mapper/cl-swap rd.lvm.lv=cl/root rd.lvm.lv=cl/swap rhgb quiet boot_success=0 boot_indeterminate=0

 

5. 재부팅을 해봅니다.

   - 아직 새로운 커널을 설치 하지 않았기 때문에 기본 이미지만 보입니다.

 

연습을 해보았습니다. 작동 원리가 대충 이렇구나 이해 되면 새로운 커널을 설정하고 부팅 순서를 변경하는 순서를 해보시면 됩니다.

6. 커널 변경해 보기 (실전 적용하기)

  - yum install kernel  또는 dnf install kernel  명령을 수행하면 최신 커널을 업데이트 할수 있습니다.
커널은 아래와 같은 3가지 패키지를 설치합니다.

kernel-4.18.0-240.1.1.el8_3.x86_64.rpm
kernel-core-4.18.0-240.1.1.el8_3.x86_64.rpm
kernel-modules-4.18.0-240.1.1.el8_3.x86_64.rpm

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# dnf install kernel
Last metadata expiration check: 1:03:51 ago on Sat 26 Dec 2020 07:13:24 AM EST.
Package kernel-4.18.0-193.el8.x86_64 is already installed.
Dependencies resolved.
==================================================================================================
 Package                Architecture   Version                               Repository      Size
==================================================================================================
Installing:
 kernel                 x86_64         4.18.0-240.1.1.el8_3                  BaseOS         4.3 M
Upgrading:
 linux-firmware         noarch         20200619-99.git3890db36.el8           BaseOS         101 M
Installing dependencies:
 kernel-core            x86_64         4.18.0-240.1.1.el8_3                  BaseOS          30 M
 kernel-modules         x86_64         4.18.0-240.1.1.el8_3                  BaseOS          26 M
 
Transaction Summary
==================================================================================================
Install  3 Packages
Upgrade  1 Package
 
Total size: 161 M
Total download size: 101 M
Is this ok [y/N]:
cs

 

<yum 명령으로 커널 설치>

7. 커널 설치 확인 하기 

config-4.18.0-240.1.1.el8_3.x86_64
initramfs-4.18.0-240.1.1.el8_3.x86_64.img 
System.map-4.18.0-240.1.1.el8_3.x86_64
vmlinuz-4.18.0-240.1.1.el8_3.x86_64 

위 와 같은 파일이 추가 되어 있음을 확인 한다.  

1

2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[root@vm1 ~]# ls -al /boot/
total 252564
dr-xr-xr-x.  6 root root     4096 Dec 26 08:28 .
dr-xr-xr-x. 19 root root      247 Dec 25 09:25 ..
-rw-r--r--.  1 root root   187648 May  8  2020 config-4.18.0-193.el8.x86_64
-rw-r--r--.  1 root root   189500 Nov 19 12:28 config-4.18.0-240.1.1.el8_3.x86_64
drwxr-xr-x.  3 root root     4096 Aug 29 08:39 efi
drwx------.  4 root root     4096 Dec 26 07:41 grub2
-rw-------.  1 root root 98497217 Aug 29 08:48 initramfs-0-rescue-13f1789a18d547a393f67d8a55fdbeba.img
-rw-------.  1 root root 53331022 Aug 29 08:52 initramfs-4.18.0-193.el8.x86_64.img
-rw-------.  1 root root 19600089 Sep 28 09:29 initramfs-4.18.0-193.el8.x86_64kdump.img
-rw-------.  1 root root 51469315 Dec 26 08:24 initramfs-4.18.0-240.1.1.el8_3.x86_64.img
drwxr-xr-x.  3 root root     4096 Aug 29 08:45 loader
-rw-------.  1 root root  3909996 May  8  2020 System.map-4.18.0-193.el8.x86_64
-rw-------.  1 root root  4032815 Nov 19 12:28 System.map-4.18.0-240.1.1.el8_3.x86_64
-rwxr-xr-x.  1 root root  8913656 Aug 29 08:47 vmlinuz-0-rescue-13f1789a18d547a393f67d8a55fdbeba
-rwxr-xr-x.  1 root root  8913656 May  8  2020 vmlinuz-4.18.0-193.el8.x86_64
-rwxr-xr-x.  1 root root  9514120 Nov 19 12:28 vmlinuz-4.18.0-240.1.1.el8_3.x86_64
cs

 

8. 커널 부팅 순서 확인 하기

- 새로 설치된 커널 이미지가  기본 커널로 설정 되었습니다. 부팅하면 기존 커널이 아닌 새로운 커널로 부팅이 될 것입니다. 

<새로운 커널 설치후 부팅 이미지 순서>

# grubby --default-kernel
/boot/vmlinuz-4.18.0-240.1.1.el8_3.x86_64

# grubby --default-title

CentOS Linux (4.18.0-240.1.1.el8_3.x86_64) 8

# grubby --default-index

0

# grubby --info=/boot/vmlinuz-4.18.0-240.1.1.el8_3.x86_64
index=0 kernel="/boot/vmlinuz-4.18.0-240.1.1.el8_3.x86_64" args="ro crashkernel=auto resume=/dev/mapper/cl-swap rd.lvm.lv=cl/root rd.lvm.lv=cl/swap rhgb quiet $tuned_params" root="/dev/mapper/cl-root" initrd="/boot/initramfs-4.18.0-240.1.1.el8_3.x86_64.img $tuned_initrd" title="CentOS Linux (4.18.0-240.1.1.el8_3.x86_64) 8" id="13f1789a18d547a393f67d8a55fdbeba-4.18.0-240.1.1.el8_3.x86_64"

* 기존 이미지는 인덱스가 0에서 1로 변경 되었습니다.

# grubby --info=/boot/vmlinuz-4.18.0-193.el8.x86_64
index=1 kernel="/boot/vmlinuz-4.18.0-193.el8.x86_64" args="ro crashkernel=auto resume=/dev/mapper/cl-swap rd.lvm.lv=cl/root rd.lvm.lv=cl/swap rhgb quiet $tuned_params" root="/dev/mapper/cl-root" initrd="/boot/initramfs-4.18.0-193.el8.x86_64.img $tuned_initrd" title="CentOS Linux (4.18.0-193.el8.x86_64) 8 (Core)" id="13f1789a18d547a393f67d8a55fdbeba-4.18.0-193.el8.x86_64"

 

9. 커널 부팅 순서 변경 하기

<기본 커널 변경 후 부팅 순서>

# grubby --set-default=/boot/vmlinuz-4.18.0-193.el8.x86_64
The default is /boot/loader/entries/13f1789a18d547a393f67d8a55fdbeba-4.18.0-193.el8.x86_64.conf with index 1 and kernel /boot/vmlinuz-4.18.0-193.el8.x86_64

# grubby --default-kernel
/boot/vmlinuz-4.18.0-193.el8.x86_64

# grubby --default-title

CentOS Linux (4.18.0-193.el8.x86_64) 8 (Core)

# grubby --default-index
1

* 이상 부팅시 기본커널을 설정하는 방법을 알아 보았습니다.

 

* Introduction to GRUB 2

docs.fedoraproject.org/en-US/fedora/rawhide/system-administrators-guide/kernel-module-driver-configuration/Working_with_the_GRUB_2_Boot_Loader/

 

Working with the GRUB 2 Boot Loader :: Fedora Docs

The Secure Boot technology ensures that the system firmware checks whether the system boot loader is signed with a cryptographic key authorized by a database contained in the firmware. With signature verification in the next-stage boot loader, kernel, and,

docs.fedoraproject.org

* 오래된 커널의 역사를 이해 하는 참고 자료

www.dedoimedo.com/computers/grub.html

 

GRUB bootloader - Full tutorial

GRUB bootloader - Full tutorial Updated: September 13, 2007; November 30, 2017 This tutorial focuses on GRUB legacy. If you're looking for a tutorial on GRUB 2, the next generation of the popular bootloader, please take a look at this article. One of the m

www.dedoimedo.com

 

728x90
반응형