

# 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 の場合、2 つの行は `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\$1X** キーを押します。

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 の「[マジック SysRq キー](https://en.wikipedia.org/wiki/Magic_SysRq_key)」を参照してください。

SysRq コマンドはEC2 シリアルコンソールブラウザベースのクライアントまたは SSH クライアントで使用できます。中断リクエストを送信するコマンドはクライアントごとに異なります。

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 起動エージェント (EC2Config、EC2Launch v1、EC2Launch v2) での Windowsはシリアルコンソールを使用してさまざまなタスクを実行します。インスタンスで 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/ja_jp/AWSEC2/latest/UserGuide/images/win-boot-3.png)

1. SAC コマンドを表示するには と入力し、 **Enter**.を押します。

   正常な出力  
![\[疑問符を入力して SAC コマンドを表示します。\]](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/images/win-boot-4.png)

1. コマンドプロンプトチャネル `cmd0001` やなど `cmd0002`を作成するには と入力し、 **Enter**.を押します。

1. コマンドプロンプトチャネルを表示するには**ESC** を押してから **TAB** を押します。

   正常な出力  
![\[コマンドプロンプトチャネル。\]](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/images/win-boot-5.png)

1. チャネルを切り替えるには**ESC \$1 TAB \$1 チャネル番号**を同時に押します。例えば、`cmd0002` チャネルに切り替えるには (チャネルが作成されている場合)、**ESC \$1 TAB \$1 2** を押します。

1. コマンドプロンプトチャネルに必要な認証情報を入力してください。  
![\[コマンドプロンプトで認証情報が要求されます。\]](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/images/win-boot-6.png)

   コマンドプロンプトは既に出力された文字の読み取りを許可しない点を除いて、デスクトップ上で取得するのと同じフル機能のコマンドシェルです。  
![\[フル機能のコマンドシェル。\]](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/images/win-boot-7.png)

**PowerShell はコマンドプロンプトからも使用できます。**

進行状況の詳細設定をサイレントモードに設定する必要がある場合があります。

![\[コマンドプロンプト内の PowerShell。\]](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/images/win-boot-8.png)


### ブートメニューを使用する
<a name="use-boot-menu"></a>

インスタンスでブートメニューが有効になっていて、SSH 経由で接続した後に再起動した場合は次のようにブートメニューが表示されます。

![\[コマンドプロンプトのブートメニュー。\]](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/images/win-boot-1.png)


**ブートメニューのコマンド**

ENTER  
オペレーティングシステムの選択したエントリを開始します。

TAB  
[Tools] (ツール) メニューに切り替えます。

ESC  
インスタンスをキャンセルして再起動します。

ESC、その後に 8  
[**F8**] を押す操作に相当します。選択した項目の詳細オプションを表示します。

ESC キー \$1 左矢印  
最初のブートメニューに戻ります。  
ESC キーだけではWindows がエスケープシーケンスが進行中かどうかを確認するために待機しているため、メインメニューに戻ることはありません。

![\[高度なブートオプション。\]](http://docs.aws.amazon.com/ja_jp/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
   ```

------