GRUB2 BLS 구성 파일 문제로 인해 부팅에 실패한 Red Hat 8 또는 CentOS 8 인스턴스를 복구하려면 어떻게 해야 합니까?

최종 업데이트 날짜: 2020년 2월 3일

Red Hat 8 또는 CentOS 8 Amazon EC2(Amazon Elastic Compute Cloud) 인스턴스를 실행하고 있습니다. /boot/loader/entries/ 아래에 있는 BLS 구성(blscfg) 파일이 손상되거나 삭제된 경우 이를 복구하려면 어떻게 해야 합니까?

간략한 설명

RHEL 8 및 Centos 8의 GRUB2는 이전 grub.cfg 형식과 달리 /boot/loaderblscfg 파일 및 입력 항목을 부트 구성에 사용합니다. grubby 도구는 /boot/loader/entries/에서 blscfg 파일을 관리하고 정보를 검색하는 데 권장됩니다. blscfg 파일이 이 위치에 없거나 손상된 경우 grubby는 결과를 표시하지 않습니다. 기능을 복구하려면 파일을 다시 생성해야 합니다. blscfg를 다시 생성하려면 임시 복구 인스턴스를 생성한 다음 Amazon EBS(Amazon Elastic Block Store) 볼륨을 복구 인스턴스에 다시 마운트합니다. 복구 인스턴스에서 설치된 커널에 대해 blscfg를 다시 생성합니다.

중요: 인스턴스 스토어 지원 인스턴스에서는 이 절차를 수행하지 마십시오. 이 복구 절차를 수행하려면 인스턴스를 중지했다가 시작해야 하며, 이는 인스턴스의 데모든 데이터가 손실된다는 것을 의미합니다. 자세한 내용은 인스턴스의 루트 디바이스 유형 확인을 참조하십시오.

​해결 방법

복구 EC2 인스턴스에 루트 볼륨 연결

1.    루트 볼륨의 EBS 스냅샷을 생성합니다. 자세한 내용은 Amazon EBS 스냅샷 만들기를 참조하십시오.

2.    Amazon EC2 콘솔을 엽니다.

참고: 올바른 리전에 있어야 합니다. 리전은 Amazon EC2 콘솔의 계정 정보 오른쪽에 표시됩니다. 필요한 경우 드롭다운 메뉴에서 다른 리전을 선택할 수 있습니다.

3.    탐색 창에서 [인스턴스]를 선택한 다음, 손상된 인스턴스를 선택합니다.

4.    [작업]을 선택하고 [인스턴스 상태]를 선택한 다음 [중지]를 선택합니다.

5.    [설명] 탭의 [루트 디바이스]에서 [/dev/sda1]을 선택한 다음 EBS ID를 선택합니다.

6.    [작업]을 선택하고 [볼륨 분리]를 선택한 다음 [예, 분리]를 선택합니다. [가용 영역]을 기록해 둡니다.

7.    동일한 가용 영역에서 비슷한 복구 EC2 인스턴스를 시작합니다. 이 인스턴스가 복구 인스턴스가 됩니다.

8.    복구 인스턴스를 시작한 후에 탐색 창에서 [볼륨]을 선택한 다음, 손상된 인스턴스의 분리된 루트 볼륨을 선택합니다.

9.    [작업]을 선택한 다음 [볼륨 연결]을 선택합니다.

10.    복구 인스턴스 ID(id-xxxxx)를 선택한 다음, 사용하지 않는 디바이스를 설정합니다. 이 예제에서 사용하지 않는 디바이스는 /dev/sdf입니다.

손상된 인스턴스의 볼륨 마운트

1.    SSH를 사용하여 복구 인스턴스에 연결합니다.

2.    lsblk 명령을 실행하여 사용 가능한 디스크 디바이스를 확인합니다.

[ec2-user@ip-10-10-1-111 /]s lsblk
NAME    MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
xvda    202:0    0  10G  0 disk
├─xvda1 202:1    0   1M  0 part
└─xvda2 202:2    0  10G  0 part /
xvdf    202:80   0  10G  0 disk
├─xvdf1 202:81   0   1M  0 part
└─xvdf2 202:82   0  10G  0 part 

참고: Nitro 기반 인스턴스는 EBS 볼륨을 NVMe 블록 디바이스로 표시합니다. Nitro 기반 인스턴스에서 lsblk 명령으로 생성된 출력은 디스크 이름을 nvme[0-26]n1로 표시합니다. 자세한 내용은 Linux 인스턴스의 Amazon EBS 및 NVMe를 참조하십시오.

3.    마운트 디렉터리를 생성한 다음, 마운트된 볼륨의 루트 파티션을 이 새 디렉터리에 마운트합니다. 이전 예제에서 /dev/xvdf2는 마운트된 볼륨의 루트 파티션입니다. 자세한 내용은 Amazon EBS 볼륨을 Linux에서 사용할 수 있도록 만들기를 참조하십시오.

sudo mkdir /mount
sudo mount /dev/xvdf2 /mount

4.    새로 마운트한 볼륨과 동일한 경로에 복구 인스턴스의 /dev, /run, /proc/sys를 마운트합니다.

sudo mount -o bind /dev /mount/dev
sudo mount -o bind /run /mount/run
sudo mount -o bind /proc /mount/proc 
sudo mount -o bind /sys /mount/sys

5.    chroot 환경을 시작합니다.

sudo chroot /mount

blscfg 파일 다시 생성

1.    rpm 명령을 실행합니다. 인스턴스에서 사용 가능한 커널을 기록해 둡니다.

[root@ip-10-10-1-111 ~]# rpm -q --last kernel
kernel-4.18.0-147.3.1.el8_1.x86_64 Tue 21 Jan 2020 05:11:16 PM UTC
kernel-4.18.0-80.4.2.el8_0.x86_64 Tue 18 Jun 2019 05:06:11 PM UTC

2.    blscfg 파일을 다시 생성하려면 kernel-install 명령을 실행합니다.

참고: kernel-install 바이너리는 systemd-udev rpm 설치 패키지와 함께 제공됩니다.

sudo kernel-install add 4.18.0-147.3.1.el8_1.x86_64 /lib/modules/4.18.0-147.3.1.el8_1.x86_64/vmlinuz 

4.18.0-147.3.1.el8_0.x86_64를 커널 버전 번호로 바꿉니다.

지정된 커널에 대한 blscfg가 /boot/loader/entries/ 아래에 다시 생성됩니다.

[root@ip-10-10-1-111 ~]# ls /boot/loader/entries/
2bb67fbca2394ed494dc348993fb9b94-4.18.0-147.3.1.el8_1.x86_64.conf

3.    필요한 경우, 인스턴스에 설치된 다른 커널에 대해 2단계를 반복합니다. 최신 커널이 기본 커널로 설정됩니다.

4.    현재 기본 커널을 확인하려면 grubby 명령 --default kernel을 실행합니다.

sudo grubby --default-kernel

5.    chroot에서 종료하고 /dev/run, /proc 및 /sys 마운트를 해제합니다.

Exit
sudo umount /mount/dev
sudo umount /mount/run
sudo umount /mount/proc
sudo umount /mount/sys
sudo umount /mount

6.    올바른 블록 디바이스 매핑을 사용하여 디바이스를 원래 인스턴스에 다시 마운트합니다. 이제 디바이스가 기본 커널로 부팅됩니다.