RHEL(Red Hat Enterprise Linux) 8 또는 CentOS 8 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스를 가지고 있습니다. "/boot/loader/entries/"에 있는 손상되거나 삭제된 BLS 구성(blscfg) 파일을 복구하려고 합니다.
간략한 설명
RHEL 8 및 Centos 8의 GRUB2는 부팅 구성에 이전 grub.cfg 형식 대신 blscfg 파일과 /boot/loader의 항목을 사용합니다. 모범 사례는 blscfg 파일을 관리하고 **/boot/loader/entries/**에서 정보를 검색하려면 grubby 도구를 사용하는 것입니다.
**/boot/loader/entries/**에서 blscfg 파일이 손상되었거나 누락된 경우, grubby는 아무런 결과도 표시하지 않습니다. 기능을 복구하려면 파일을 다시 생성해야 합니다. blscfg를 다시 생성하려면 임시 복구 인스턴스를 생성한 다음 복구 인스턴스에 Amazon Elastic Block Store(Amazon EBS) 볼륨을 다시 탑재하십시오. 복구 인스턴스에서 설치된 모든 커널에 대해 blscfg를 다시 생성하십시오.
중요: 인스턴스 스토어 지원 인스턴스에서는 이 절차를 수행하지 마십시오. 이 복구 프로세스를 수행하려면 인스턴스를 중지하고 다시 시작해야 합니다. 인스턴스를 중지하고 시작하면 인스턴스의 모든 데이터가 손실됩니다. 자세한 내용은 Amazon EC2 인스턴스의 루트 볼륨을 참조하십시오.
해결 방법
루트 볼륨을 복구 EC2 인스턴스에 연결
다음 단계를 완료합니다.
- 루트 볼륨의 Amazon EBS 스냅샷을 생성합니다.
- Amazon EC2 콘솔을 엽니다.
참고: AWS 리전이 정확한지 확인하십시오.
- 탐색 창에서 Instances(인스턴스)를 선택한 다음 영향을 받는 인스턴스를 선택합니다.
- Actions(작업)를 선택하고 Instance State(인스턴스 상태)를 선택합니다.
- Stop(중지)을 선택합니다.
- Description(설명) 탭의 Root device(루트 디바이스)에서 /dev/sda1을 선택한 다음 EBS ID를 선택합니다.
- Actions(작업)를 선택한 다음 Detach Volume(볼륨 분리)을 선택합니다.
- Yes(예)를 선택하고 Detach(분리)를 선택합니다. Availability Zone(가용 영역) 값을 기록해 둡니다.
- 동일한 가용 영역에서 복구 인스턴스로 사용할 EC2 인스턴스를 시작합니다.
- 탐색 창에서 Volumes(볼륨)를 선택한 다음 영향을 받는 인스턴스의 분리된 루트 볼륨을 선택합니다.
- Actions(작업)를 선택하고, Attach volume(볼륨 연결)을 선택합니다.
- 복구 인스턴스 ID를 선택하고, Device name(디바이스 이름)에서 사용하지 않는 디바이스(예: /dev/sdf)를 선택합니다.
영향을 받은 인스턴스의 볼륨 마운트
다음 단계를 완료합니다.
-
SSH를 사용하여 복구 인스턴스에 연결합니다.
-
lsblk 명령을 실행하여 사용 가능한 디스크 디바이스를 확인합니다.
[ec2-user@ip-10-10-1-111 ~]$ lsblk
출력 예시:
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTxvda 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로 표시됩니다. 자세한 내용은 Amazon EBS 볼륨 및 NVMe를 참조하십시오.
-
다음 명령을 실행하여 탑재 디렉터리를 생성하고 마운트된 볼륨의 루트 파티션을 새 디렉터리에 마운트합니다.
[ec2-user@ip-10-10-1-111 ~]$ sudo -i
[root@ip-10-10-1-111 ~]# mkdir /mount
[root@ip-10-10-1-111 ~]# mount /dev/xvdf2 /mount
참고: /dev/xvdf2를 마운트된 볼륨의 루트 파티션으로 바꾸십시오. 자세한 내용은 사용할 수 있는 Amazon EBS 볼륨 생성의 Linux 인스턴스 섹션을 참조하십시오.
-
다음 명령을 사용하여 복구 인스턴스의 /dev, /run, /proc, /sys를 새로 탑재한 볼륨과 같은 경로에 마운트합니다.
[root@ip-10-10-1-111 ~]# for i in dev proc sys run; do mount -o bind /$i /mount/$i; done
-
다음 명령을 실행하여 chroot 환경을 시작합니다.
[root@ip-10-10-1-111 ~]# chroot /mount
blscfg 파일 재생성
다음 단계를 완료합니다.
-
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
출력에서 사용 가능한 커널을 기록해 둡니다.
-
인스턴스에 설치된 각 커널에 대해 kernel-install 명령을 실행하여 blscfg 파일을 다시 생성합니다.
[root@ip-10-10-1-111 ~]# 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를 커널 버전 번호로 바꾸십시오. systemd-udev rpm 설치 패키지는 kernel-install 바이너리를 제공합니다.
지정된 커널에 대한 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
-
kernell-install에서 설정한 마지막 기본 커널이 기본 커널이 됩니다. 현재 기본 커널을 확인하려면 grubby 명령 --default kernel을 실행합니다.
[root@ip-10-10-1-111 ~]# grubby --default-kernel
-
다음 명령을 실행하여 chroot를 종료하고 /dev, /run, /proc, /sys 마운트를 해제합니다.
[root@ip-10-10-1-111 ~]# exit
[root@ip-10-10-1-111 ~]# umount /mount/{dev,proc,run,sys,}
[root@ip-10-10-1-111 ~]# umount /mount
-
올바른 블록 디바이스 매핑을 사용하여 디바이스를 원래 인스턴스에 다시 마운트합니다. 이제 디바이스가 기본 커널로 부팅됩니다.
관련 정보
업데이트로 인해 Amazon EC2 인스턴스가 성공적으로 재부팅되지 않는 경우, 알려진 안정적인 커널로 되돌리려면 어떻게 해야 하나요?