리눅스에서 패스워드 리셋이나 마운트 에러 등의 이슈로 응급 모드로 진입하여 작업해야 할 때가 있는데 AWS는 기본적으로 원격 관리이기 때문에 콘솔 화면이 보이지 않습니다.
Nitro Hypervisor 를 지원하는 T3 급 이상의 인스턴스는 AWS Console 에서 직접 시리얼 콘솔을 접근할 수 있는 옵션이 추가가 되었는데
GRUB Timeout 설정 시간이 짧아서 응급모드 진입이 어려운 이슈가 있습니다.
Amazon Linux 2 OS 의 GRUB 타임아웃 시간을 늘려서 확인할 수 있도록 해 봅니다.
마운트 실패로 인한 응급 모드의 큰 틀은 다음의 2가지로 분류가 됩니다.
1) GRUB TIMEOUT 변경
2) 응급 모드 진입 후 mount 옵션에 nofail 추가 시, 실패해도 진행 가능
IAM 접근 최소 조건
# IAM이 Administrator Group 이라면 상관 없으나, 디테일 권한 관리될 경우
다음의 정책을 추가합니다.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ec2:GetSerialConsoleAccessStatus",
"ec2:EnableSerialConsoleAccess",
"ec2:DisableSerialConsoleAccess"
],
"Resource": "*"
}
]
}
GRUB TIMEOUT 값 수정하기
# root 권한에서 Default GRUB 의 값을 수정 및 추가합니다.
Console Serial 은 root 패스워드가 콘솔 로그인 가능해야 합니다.
아마존의 타임아웃 권장값은 1입니다만 넉넉하게 10(초)로 변경합니다.
sed -i 's/GRUB_TIMEOUT=0/GRUB_TIMEOUT=10/g' /etc/default/grub
sed -i 's/GRUB_TERMINAL="ec2-console"/GRUB_TERMINAL="console serial"/g' /etc/default/grub
echo -e GRUB_SERIAL_COMMAND=\"serial --speed=115200\" >> /etc/default/grub
# check
cat /etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT="console=tty0 console=ttyS0,115200n8 net.ifnames=0 biosdevname=0 nvme_core.io_timeout=4294967295 rd.emergency=poweroff rd.shell=0"
GRUB_TIMEOUT=10
GRUB_DISABLE_RECOVERY="true"
GRUB_TERMINAL="console serial"
GRUB_X86_USE_32BIT="true"
GRUB_SERIAL_COMMAND="serial --speed=115200"
# 실제 GRUB 에 적용합니다
grub2-mkconfig -o /boot/grub2/grub.cfg
EC2 Reboot 후 직렬 콘솔 확인
10초 지연 후 지나가므로 e 키를 바로 눌러 응급모드 진입
응급모드 진입
# 해당 위치에 single 구문을 추가 후 Ctrl + x 로 부팅
FSTAB 에서 nofail 옵션 사용
# 추가 마운트 옵션에 nofail 을 넣으면 부팅 시 실패해도 정상 진행됩니다