

# EC2 직렬 콘솔을 사용하여 Amazon EC2 인스턴스 문제 해결
<a name="troubleshoot-using-serial-console"></a>

EC2 직렬 콘솔을 사용하면 인스턴스의 직렬 포트에 연결하여 부팅, 네트워크 구성 및 기타 문제를 해결할 수 있습니다.

인스턴스의 운영 체제 지침과 인스턴스에서 구성한 도구의 지침을 사용하세요.

**Topics**
+ [GRUB(Linux)](#grub)
+ [SysRq(Linux)](#SysRq)
+ [SAC(Windows)](#troubleshooting-sac)

**사전 조건**  
시작하기 전에 선택한 문제 해결 도구 구성을 포함한 [사전 조건](ec2-serial-console-prerequisites.md)을 완료했는지 확인합니다.

## (Linux 인스턴스) GRUB을 사용하여 인스턴스 문제 해결
<a name="grub"></a>

GNU GRUB(GNU GRand Unified Bootloader의 약어, 일반적으로 GRUB이라고 함)은 대부분의 Linux 운영 체제에 대한 기본 부트 로더입니다. GRUB 메뉴에서 부팅할 커널을 선택하거나 메뉴 항목을 수정하여 커널 부팅 방법을 변경할 수 있습니다. 이는 장애가 발생한 인스턴스의 문제를 해결할 때 유용할 수 있습니다.

부팅 프로세스 중에 GRUB 메뉴가 표시됩니다. 이 메뉴는 일반 SSH를 통해 액세스할 수 없지만, EC2 직렬 콘솔을 사용하여 액세스할 수 있습니다.

단일 사용자 모드 또는 응급 모드로 부팅할 수 있습니다. 단일 사용자 모드는 낮은 실행 수준에서 커널을 부팅합니다. 예를 들어 파일 시스템을 탑재하지만 네트워크를 활성화하지 않음으로써 인스턴스를 수정하는 데 필요한 유지 관리를 수행할 수 있는 기회를 제공합니다. 응급 모드는 커널이 가능한 가장 낮은 실행 수준에서 실행된다는 점을 제외하면 단일 사용자 모드와 유사합니다.

**단일 사용자 모드로 부팅하려면**

1. 인스턴스의 직렬 콘솔에 [연결](connect-to-serial-console.md)합니다.

1. 다음 명령을 사용하여 인스턴스를 재부팅하세요.

   ```
   [ec2-user ~]$ sudo reboot
   ```

1. 재부팅하는 동안 GRUB 메뉴가 나타나면 아무 키나 눌러 부팅 프로세스를 중지합니다.

1. GRUB 메뉴에서 화살표 키를 사용하여 부팅할 커널을 선택하고 키보드에서 `e` 키를 누릅니다.

1. 화살표 키를 사용하여 커널이 있는 줄에 커서를 놓습니다. 이 줄은 인스턴스를 시작할 때 사용된 AMI에 따라 `linux` 또는 `linux16`으로 시작됩니다. Ubuntu의 경우 두 줄이 `linux`로 시작되며 다음 단계에서 수정해야 합니다.

1. 줄 끝에 `single` 단어를 추가합니다.

   다음은 Amazon Linux 2의 예제입니다.

   ```
   linux /boot/vmlinuz-4.14.193-149.317.amzn2.aarch64 root=UUID=d33f9c9a-\
   dadd-4499-938d-ebbf42c3e499 ro  console=tty0 console=ttyS0,115200n8 net.ifname\
   s=0 biosdevname=0 nvme_core.io_timeout=4294967295 rd.emergency=poweroff rd.she\
   ll=0 single
   ```

1. **Ctrl\+X** 키를 눌러 단일 사용자 모드로 부팅합니다.

1. `login` 프롬프트에서 [이전에 설정](configure-access-to-serial-console.md#set-user-password)한 암호 기반 사용자의 사용자 이름을 입력한 다음 **Enter** 키를 누릅니다.

1. `Password` 프롬프트에서 암호를 입력한 다음 **Enter** 키를 누릅니다.

 

**응급 모드로 부팅하려면**  
단일 사용자 모드와 동일한 단계를 따르되 6단계에서 `single` 대신 `emergency`라는 단어를 추가합니다.

## (Linux 인스턴스) SysRq를 사용하여 인스턴스 문제 해결
<a name="SysRq"></a>

"매직 SysRq"라고도 하는 시스템 요청(SysRq) 키를 사용하면 셸 외부에서 커널에 직접 명령을 전송할 수 있습니다. 커널은 수행하는 작업과 관계없이 응답합니다. 예를 들어 인스턴스가 응답을 중지한 경우 SysRq 키를 사용하여 커널에 충돌 또는 재부팅을 지시할 수 있습니다. 자세한 내용은 Wikipedia에서 [Magic SysRq key](https://en.wikipedia.org/wiki/Magic_SysRq_key)를 참조하세요.

EC2 직렬 콘솔 브라우저 기반 클라이언트 또는 SSH 클라이언트에서 SysRq 명령을 사용할 수 있습니다. 중단 요청을 보내는 명령은 클라이언트마다 다릅니다.

SysRq를 사용하려면 사용 중인 클라이언트에 따라 다음 절차 중 하나를 선택합니다.

------
#### [ Browser-based client ]

**직렬 콘솔 브라우저 기반 클라이언트에서 SysRq를 사용하려면**

1. 인스턴스의 직렬 콘솔에 [연결](connect-to-serial-console.md)합니다.

1. 중단 요청을 보내려면 `CTRL+0`(영)을 누릅니다. 키보드가 지원하는 경우 Pause 또는 Break 키를 사용하여 중단 요청을 보낼 수도 있습니다.

   ```
   [ec2-user ~]$ CTRL+0
   ```

1. SysRq 명령을 실행하려면 키보드에서 필요한 명령에 해당하는 키를 누릅니다. 예를 들어 SysRq 명령 목록을 표시하려면 `h` 키를 누릅니다.

   ```
   [ec2-user ~]$ h
   ```

   `h` 명령은 다음과 비슷한 결과를 출력합니다.

   ```
   [ 1169.389495] sysrq: HELP : loglevel(0-9) reboot(b) crash(c) terminate-all-tasks(e) memory-full-oom-kill(f) kill-all-tasks(i) thaw-filesystems
   (j) sak(k) show-backtrace-all-active-cpus(l) show-memory-usage(m) nice-all-RT-tasks(n) poweroff(o) show-registers(p) show-all-timers(q) unraw(r
   ) sync(s) show-task-states(t) unmount(u) show-blocked-tasks(w) dump-ftrace-buffer(z)
   ```

------
#### [ SSH client ]

**SSH 클라이언트에서 SysRq를 사용하려면**

1. 인스턴스의 직렬 콘솔에 [연결](connect-to-serial-console.md)합니다.

1. 중단 요청을 보내려면 `~B`(물결표 다음에 대문자 `B`)를 누릅니다.

   ```
   [ec2-user ~]$ ~B
   ```

1. SysRq 명령을 실행하려면 키보드에서 필요한 명령에 해당하는 키를 누릅니다. 예를 들어 SysRq 명령 목록을 표시하려면 `h` 키를 누릅니다.

   ```
   [ec2-user ~]$ h
   ```

   `h` 명령은 다음과 비슷한 결과를 출력합니다.

   ```
   [ 1169.389495] sysrq: HELP : loglevel(0-9) reboot(b) crash(c) terminate-all-tasks(e) memory-full-oom-kill(f) kill-all-tasks(i) thaw-filesystems
   (j) sak(k) show-backtrace-all-active-cpus(l) show-memory-usage(m) nice-all-RT-tasks(n) poweroff(o) show-registers(p) show-all-timers(q) unraw(r
   ) sync(s) show-task-states(t) unmount(u) show-blocked-tasks(w) dump-ftrace-buffer(z)
   ```
**참고**  
중단 요청을 보내는 데 사용하는 명령은 사용 중인 SSH 클라이언트에 따라 다를 수 있습니다.

------

## (Windows 인스턴스) SAC를 사용하여 인스턴스 문제 해결
<a name="troubleshooting-sac"></a>

Windows의 Special Admin Console(SAC) 기능은 Windows 인스턴스 문제를 해결할 수 있는 방법을 제공합니다. 인스턴스의 직렬 콘솔에 연결하고 SAC를 사용하여 부팅 프로세스를 중단하고 Windows를 안전 모드로 부팅할 수 있습니다.

**참고**  
인스턴스에서 SAC를 활성화하면 암호 검색에 의존하는 EC2 서비스가 Amazon EC2 콘솔에서 작동하지 않습니다. Amazon EC2 Windows 시작 에이전트(EC2Config, EC2Launch v1 및 EC2Launch v2)는 직렬 콘솔을 사용하여 다양한 작업을 실행합니다. 인스턴스에서 SAC를 사용 설정하면 이러한 작업이 성공적으로 수행되지 않습니다. Amazon EC2 Windows 시작 에이전트에 대한 자세한 내용은 [Amazon EC2 Windows 인스턴스 구성](ec2-windows-instances.md) 섹션을 참조하세요. SAC를 활성화하면 나중에 비활성화할 수 있습니다. 자세한 내용은 [SAC 및 부팅 메뉴 비활성화](#disable-sac-bootmenu) 섹션을 참조하세요.

**Topics**
+ [SAC 사용](#use-sac)
+ [부팅 메뉴 사용](#use-boot-menu)
+ [SAC 및 부팅 메뉴 비활성화](#disable-sac-bootmenu)

### SAC 사용
<a name="use-sac"></a>

**SAC를 사용하려면**

1. [직렬 콘솔에 연결합니다.](connect-to-serial-console.md)

   SAC가 인스턴스에서 활성화된 경우 직렬 콘솔에 `SAC>` 프롬프트가 표시됩니다.  
![직렬 콘솔에 표시된 SAC 프롬프트입니다.](http://docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/images/win-boot-3.png)

1. SAC 명령을 표시하려면 ?를 입력하고 **Enter**를 누릅니다.

   예상 결과  
![물음표를 입력하면 SAC 명령이 표시됩니다.](http://docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/images/win-boot-4.png)

1. 명령 프롬프트 채널(예: `cmd0001` 또는 `cmd0002`)을 생성하려면 cmd를 입력한 다음 **Enter**를 누릅니다.

1. 명령 프롬프트 채널을 보려면 **ESC**를 누른 다음 **TAB**을 누릅니다.

   예상 결과  
![명령 프롬프트 채널입니다.](http://docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/images/win-boot-5.png)

1. 채널을 전환하려면 **ESC\+TAB\+채널 번호**를 함께 누릅니다. 예를 들어, `cmd0002` 채널(생성된 경우)로 전환하려면 **ESC\+탭\+2**를 누릅니다.

1. 명령 프롬프트 채널에 필요한 자격 증명을 입력합니다.  
![보안 인증이 필요한 명령 프롬프트입니다.](http://docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/images/win-boot-6.png)

   명령 프롬프트는 이미 출력된 문자를 읽을 수 없다는 점을 제외하고 데스크톱에서 사용할 수 있는 모든 기능을 갖춘 명령 셸입니다.  
![모든 기능이 제공되는 명령 쉘입니다.](http://docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/images/win-boot-7.png)

**명령 프롬프트에서 PowerShell을 사용할 수도 있습니다.**

참고로 진행률 기본 설정을 자동 모드로 설정해야 할 수 있습니다.

![명령 프롬프트 내의 PowerShell입니다.](http://docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/images/win-boot-8.png)


### 부팅 메뉴 사용
<a name="use-boot-menu"></a>

인스턴스에 부팅 메뉴가 활성화되어 있고 SSH를 통해 연결한 후 다시 시작한 경우 다음과 같이 부팅 메뉴가 표시됩니다.

![명령 프롬프트의 부팅 메뉴입니다.](http://docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/images/win-boot-1.png)


**부팅 메뉴 명령**

ENTER  
선택한 운영 체제 항목을 시작합니다.

Tab  
도구 메뉴로 전환합니다.

ESC  
인스턴스를 취소하고 다시 시작합니다.

ESC 다음에 8  
**F8**키를 누르는 것과 같습니다. 선택한 항목에 대한 고급 옵션을 표시합니다.

ESC 키\+왼쪽 화살표  
초기 부팅 메뉴로 돌아갑니다.  
ESC 키만 누르면 Windows가 이스케이프 시퀀스가 진행 중인지 확인하기 위해 기다리기 때문에 주 메뉴로 돌아가지 않습니다.

![고급 부팅 옵션입니다.](http://docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/images/win-boot-2.png)


### SAC 및 부팅 메뉴 비활성화
<a name="disable-sac-bootmenu"></a>

SAC 및 부팅 메뉴를 활성화하면 나중에 이러한 기능을 비활성화할 수 있습니다.

다음 방법 중 하나를 사용하여 인스턴스에서 SAC 및 부팅 메뉴를 비활성화합니다.

------
#### [ PowerShell ]

**Windows 인스턴스에서 SAC 및 부팅 메뉴 활성화**

1. 인스턴스에 [연결](connecting_to_windows_instance.md)하고 상승된 PowerShell 명령줄에서 다음 단계를 수행합니다.

1. 먼저 값을 `no`로 변경하여 부팅 메뉴를 비활성화합니다.

   ```
   bcdedit /set '{bootmgr}' displaybootmenu no
   ```

1. 그런 다음 값을 `off`로 변경하여 SAC를 비활성화합니다.

   ```
   bcdedit /ems '{current}' off
   ```

1. 인스턴스를 재부팅하여 업데이트된 구성을 적용합니다.

   ```
   shutdown -r -t 0
   ```

------
#### [ Command prompt ]

**Windows 인스턴스에서 SAC 및 부팅 메뉴 활성화**

1. 인스턴스에 [연결](connecting_to_windows_instance.md)하고 명령 프롬프트에서 다음 단계를 수행합니다.

1. 먼저 값을 `no`로 변경하여 부팅 메뉴를 비활성화합니다.

   ```
   bcdedit /set {bootmgr} displaybootmenu no
   ```

1. 그런 다음 값을 `off`로 변경하여 SAC를 비활성화합니다.

   ```
   bcdedit /ems {current} off
   ```

1. 인스턴스를 재부팅하여 업데이트된 구성을 적용합니다.

   ```
   shutdown -r -t 0
   ```

------