GRUB と sysrq へのアクセス権を事前に確保することで、多くのダウンタイムを節約できます

シリアル コンソールと GRUB にアクセスすると、ほとんどの場合、IaaS Linux 仮想マシンの復旧時間が短縮されます。 GRUB には、VM の復旧に時間がかかる回復オプションが用意されています。

VM の復旧を実行する理由は多く、次のようなシナリオに起因する可能性があります。

  • 破損したファイル システム/カーネル/MBR (マスター ブート レコード)
  • カーネルのアップグレードに失敗しました
  • GRUB カーネル パラメーターが正しくありません
  • 不適切な fstab 構成
  • ファイアウォールの構成
  • パスワードの紛失
  • Mangled sshd 構成ファイル
  • ネットワーク構成

その他の多くのシナリオについては、こちらを参照してください

Azure にデプロイされている VM 上の GRUB とシリアル コンソールにアクセスできることを確認します。

シリアル コンソールを初めて使用する場合は、 このリンクを参照してください。

ヒント

変更を加える前に、ファイルのバックアップを作成してください

GRUB にアクセスしたら Linux VM をすばやく復旧する方法については、以下のビデオをご覧ください。

Linux VM ビデオを回復する

Linux VM の復旧に役立つ方法は多数あります。 クラウド環境では、このプロセスは困難でした。 サービスが迅速に復旧されるように、ツールと機能に継続的に進歩が見られます。

Azure シリアル コンソールを使用すると、システムのコンソールにいるかのように Linux VM と対話できます。

カーネルの起動方法など、多くの構成ファイルを操作できます。

経験豊富な Linux/Unix システム管理者は、Azure シリアル コンソールを介してアクセスできる 単一のユーザー モードと 緊急モード に感謝し、多くの回復シナリオでディスク スワップと VM の削除を冗長化します。

回復方法は、発生している問題によって異なります。たとえば、パスワードの紛失や誤った場所に置き換えた場合は、Azure portalオプション ->パスワードのリセットを使用してリセットできます。 パスワードのリセット機能は拡張機能と呼ばれ、Linux ゲスト エージェントと通信します。

カスタム スクリプトなどの他の拡張機能を使用できますが、これらのオプションでは、Linux waagent を稼働させ、常にそうではない正常な状態にする必要があります。

Azure portalの [プロパティ] ページのエージェントの状態のスクリーンショット。

Azure シリアル コンソールと GRUB にアクセスできることを確認すると、パスワードの変更や正しくない構成が数時間ではなく数分で修正される可能性があります。 プライマリ カーネルが破損するシナリオで、ディスクに複数のカーネルがある場合は、別のカーネルから VM を強制的に起動することもできます。

GRUB で選択したブート OS 画面のスクリーンショット。複数のカーネルを選択できることを示しています。

推奨される回復方法の順序

ディスク スワップ ビデオ

このビデオwatch GRUB にアクセスできない場合は、ディスクスワップ手順を簡単に自動化して VM を回復する方法を参照してください。

課題

すべての Linux Azure VM が GRUB アクセス用に既定で構成されているわけではありません。また、いずれも sysrq コマンドで中断されるように構成されているわけではありません。 SLES 11 などの一部の古いディストリビューションは、Azure シリアル コンソールにログイン プロンプトを表示するように構成されていません

この記事では、GRUB を使用できるようにする方法について、さまざまな Linux ディストリビューションとドキュメント構成を確認します。

SysRq キーを受け入れるように Linux VM を構成する方法

sysrq キーは既定で一部の新しい Linux ディストリビューションで有効になっていますが、他の Linux ディストリビューションでは、特定の SysRq 関数に対してのみ値を受け入れるように構成されている場合があります。 古いディストリビューションでは、完全に無効になっている可能性があります。

SysRq 機能は、クラッシュした VM または応答しない VM を Azure シリアル コンソールから直接再起動する場合に便利です。また、GRUB メニューへのアクセスを取得する場合にも役立ちます。また、別のポータル ウィンドウまたは ssh セッションから VM を再起動すると、現在のコンソール接続が削除され、GRUB メニューの表示に使用される GRUB タイムアウトが期限切れになることがあります。 VM は、sysrq または 128 のすべての関数を有効にするカーネル パラメーターの値 1 を受け入れるように構成する必要があります。これにより、再起動/電源オフが可能になります。

sysrq ビデオを有効にする

Azure portalで SysRq コマンドを使用して再起動を受け入れるように VM を構成するには、カーネル パラメーター kernel.sysrq に値 1 を設定する必要があります

この構成で再起動を保持するには、sysctl.conf ファイルにエントリを追加します。

echo kernel.sysrq = 1 >> /etc/sysctl.conf

カーネル パラメーターを動的に構成するには

sysctl -w kernel.sysrq=1

ルート アクセス権がない場合、または sudo が壊れている場合は、シェル プロンプトから sysrq を構成することはできません。

このシナリオでは、Azure portalを使用して sysrq を有効にすることができます。 sudoers.d/waagent ファイルが壊れているか、削除されている場合、このメソッドは便利です。

Azure portal操作 -> コマンドの実行 -> RunShellScript 機能を使用すると、waagent プロセスが正常である必要があります。このコマンドを挿入して sysrq を有効にすることができます

sysctl -w kernel.sysrq=1 ; echo kernel.sysrq = 1 >> /etc/sysctl.conf

次に示すように、

コマンドを挿入するときの RunShellScript ウィンドウのスクリーンショット。

完了したら、 sysrq へのアクセスを試みることができ、再起動が可能であることがわかります。

ボタン バーのキーボード アイコンの下にある [SysRq コマンドの送信] オプションのスクリーンショット。

[再起動] と [SysRq コマンドの送信] を選択します

[SysRq コマンドをゲストに送信] ダイアログの [再起動] オプションのスクリーンショット。

システムは、次のようなリセット メッセージをログに記録する必要があります。

コマンド ライン インターフェイスのリセット メッセージ ログのスクリーンショット。

Ubuntu GRUB の構成

既定では、VM の起動中に Esc キーを押して GRUB にアクセスできます。GRUB メニューが表示されない場合は、これらのオプションのいずれかを使用して、Azure シリアル コンソールで GRUB メニューを強制的に表示し、画面に残すことができます。

オプション 1 - GRUB を画面に表示する

ファイル /etc/default/grub.d/50-cloudimg-settings.cfg を更新して、指定された TIMEOUT の GRUB メニューを画面に保持します。 GRUB はすぐに表示されるため、 Esc キーを押す必要はありません。

GRUB_TIMEOUT=5
GRUB_TIMEOUT_STYLE=menu

オプション 2 - 起動前に Esc キーを押すことができます

同様の動作は、/etc/default/grub ファイルに変更を加え、Esc にヒットする 3 秒のタイムアウトを観察することで発生する可能性があります

次の 2 行をコメントアウトします。

#GRUB_HIDDEN_TIMEOUT=0
#GRUB_HIDDEN_TIMEOUT_QUIET=true

次の行を追加します。

GRUB_TIMEOUT_STYLE=countdown

Ubuntu 12.04

Ubuntu 12.04 ではシリアル コンソールへのアクセスが許可されますが、対話する機能は提供されません。 ログイン: プロンプトが表示されない

12.04 でログインを取得する場合: プロンプト:

  1. 次のテキストを含む /etc/init/ttyS0.conf という名前のファイルを作成します。

    # ttyS0 - getty
    #
    # This service maintains a getty on ttyS0 from the point the system is
    # started until it is shut down again.
    start on stopped rc RUNLEVEL=[12345]
    stop on runlevel [!12345]
    
    respawn
    exec /sbin/getty -L 115200 ttyS0 vt102
    
  2. getty の開始を開始するように依頼する

    sudo start ttyS0
    

Ubuntu バージョンのシリアル コンソールを構成するために必要な設定については、こちらを参照してください

Ubuntu 回復モード

GRUB を介して Ubuntu では追加の回復とクリーンオプションを使用できますが、これらの設定には、カーネル パラメーターを適切に構成した場合にのみアクセスできます。 このカーネル ブート パラメーターを構成しないと、[回復] メニューが Azure シリアル コンソールではなくAzure Diagnosticsに強制的に送信されます。 次の手順に従って、Ubuntu 回復メニューにアクセスできます。

BOOT プロセスを中断して GRUB メニューにアクセスする

Ubuntu の [詳細オプション] を選択し、Enter キーを押します

Ubuntu の詳細オプションが選択されたシリアル コンソールを示すスクリーンショット。

表示されている行を選択 します (回復モード) Enter キーを押すのではなく、"e" を押します

回復モード バージョンが選択されたシリアル コンソールを示すスクリーンショット。

カーネルを読み込む行を見つけ、最後のパラメーター nomodesetconsole=ttyS0 として宛先に置き換えます

linux /boot/vmlinuz-4.15.0-1023-azure root=UUID=21b294f1-25bd-4265-9c4e-d6e4aeb57e97 ro recovery nomodeset

change to

linux /boot/vmlinuz-4.15.0-1023-azure root=UUID=21b294f1-25bd-4265-9c4e-d6e4aeb57e97 ro recovery console=ttyS0

変更された値を持つシリアル コンソールを示すスクリーンショット。

Ctrl キーを押しながら x キーを押してカーネルを起動して読み込みます。 すべてがうまくいく場合は、他の回復オプションを実行するのに役立つこれらの追加のオプションが表示されます

追加の回復オプションを提供する [回復] メニューのシリアル コンソールを示すスクリーンショット。

Red Hat GRUB の構成

Red Hat 7.4 以降の GRUB 構成

これらのバージョンの既定の /etc/default/grub 構成が適切に構成されている

GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL="serial console"
GRUB_SERIAL_COMMAND="serial"
GRUB_CMDLINE_LINUX="console=tty1 console=ttyS0 earlyprintk=ttyS0"
GRUB_DISABLE_RECOVERY="true"

SysRq キーを有効にする

sysctl -w kernel.sysrq=1;echo kernel.sysrq = 1 >> /etc/sysctl.conf;sysctl -a | grep -i sysrq

Red Hat 7.2 および 7.3 GRUB 構成

変更するファイルは /etc/default/grub です。既定の構成は次の例のようになります。

GRUB_TIMEOUT=1
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="console=tty1 console=ttyS0 earlyprintk=ttyS0"
GRUB_DISABLE_RECOVERY="true"

/etc/default/grub で次の行を変更する

GRUB_TIMEOUT=1 

to

GRUB_TIMEOUT=5
GRUB_TERMINAL_OUTPUT="console"

to

GRUB_TERMINAL="serial console"

次の行も追加します。

GRUB_SERIAL_COMMAND="serial –speed=115200 –unit=0 –word=8 –parity=no –stop=1″

/etc/default/grub は次の例のようになります。

GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL="serial console"
GRUB_CMDLINE_LINUX="console=tty1 console=ttyS0 earlyprintk=ttyS0"
GRUB_DISABLE_RECOVERY="true"

を使用して grub 構成を完了して更新する

grub2-mkconfig -o /boot/grub2/grub.cfg

SysRq カーネル パラメーターを設定します。

sysctl -w kernel.sysrq = 1;echo kernel.sysrq = 1 >> /etc/sysctl.conf;sysctl -a | grep -i sysrq

または、シェル内または実行コマンドを使用して、単一行を使用して GRUB と SysRq を構成することもできます。 このコマンドを実行する前にファイルをバックアップします。

cp /etc/default/grub /etc/default/grub.bak; sed -i 's/GRUB_TIMEOUT=1/GRUB_TIMEOUT=5/g' /etc/default/grub; sed -i 's/GRUB_TERMINAL_OUTPUT="console"/GRUB_TERMINAL="serial console"/g' /etc/default/grub; echo "GRUB_SERIAL_COMMAND=\"serial --speed=115200 --unit=0 --word=8 --parity=no --stop=1\"" >> /etc/default/grub;grub2-mkconfig -o /boot/grub2/grub.cfg;sysctl -w kernel.sysrq=1;echo kernel.sysrq = 1 /etc/sysctl.conf;sysctl -a | grep -i sysrq

Red Hat 6.x GRUB 構成

変更するファイルは /boot/grub/grub.conf です。 この値は timeout 、GRUB の表示期間を決定します。

#boot=/dev/vda
default=0
timeout=15
splashimage=(hd0,0)/grub/splash.xpm.gz
#hiddenmenu
serial --unit=0 --speed=9600
terminal serial
terminal --timeout=5 serial console

最後の行 ターミナル –-timeout=5 シリアル コンソール は、5 秒のプロンプトを追加して GRUB タイムアウトをさらに増やします。続行 するには、任意のキーを押します。

出力を含むコンソールを示すスクリーンショット。

構成された timeout=15 の画面に GRUB メニューが表示され、Esc キーを押す必要はありません。ブラウザーでコンソールをクリックしてメニューをアクティブにし、必要なカーネルを選択してください。

2 つの Linux オプションを持つコンソールを示すスクリーンショット。

Suse

SLES 12 sp1

公式のドキュメントに従って YaST ブートローダーを使用します

または、/etc/default/grub に次のパラメーターを追加/変更します。

GRUB_TERMINAL=serial
GRUB_TIMEOUT=5
GRUB_SERIAL_COMMAND="serial --unit=0 --speed=9600 --parity=no"

```console
Verify that ttys0 is used in the GRUB_CMDLINE_LINUX or GRUB_CMDLINE_LINUX_DEFAULT

```console
GRUB_CMDLINE_LINUX_DEFAULT="console=ttyS0,9600n"

grub.cfg を再作成する

grub2-mkconfig -o /boot/grub2/grub.cfg

SLES 11 SP4

シリアル コンソールが表示され、ブート メッセージが表示されますが、 ログイン: プロンプトは表示されません。

VM への ssh セッションを開き、次の行のコメントを解除して ファイル /etc/inittab を更新します。

#S0:12345:respawn:/sbin/agetty -L 9600 ttyS0 vt102

次にコマンドを実行します

telinit q

GRUB を有効にするには、/boot/grub/menu.lst に次の変更を加える必要があります。

timeout 5
serial --unit=0 --speed=9600 --parity=no
terminal --timeout=5 serial console

root (hd0,0)
kernel /boot/vmlinuz-3.0.101-108.74-default root=/dev/disk/by-uuid/ab6b62bb--
1a8c-45eb-96b1-1fbc535b9265 disk=/dev/sda  USE_BY_UUID_DEVICE_NAMES=1 earlyprinttk=ttyS0 console=ttyS0 showopts vga=0x314

この構成により、メッセージ Press any key to continue to the console for 5 seconds

その後、GRUB メニューがさらに 5 秒間表示されます。下矢印を押すと、カウンターが中断され、起動するカーネルが選択され、ルート パスワードを設定する必要があるシングル ユーザー モードに対して キーワード (keyword) シングルが追加されます。

コマンド init=/bin/bash を追加するとカーネルが読み込まれますが、init プログラムが bash シェルに置き換えられます。

パスワードを入力しなくてもシェルにアクセスできます。 その後、Linux アカウントのパスワードの更新や、その他の構成の変更に進むことができます。

カーネルを bash プロンプトに強制する

GRUB にアクセスすると、初期化プロセスを中断できます。この操作は、多くの復旧手順に役立ちます。 ルート パスワードがない場合、シングル ユーザーがルート パスワードを持っている必要がある場合は、init プログラムを bash プロンプトに置き換えてカーネルを起動できます。この割り込みは、カーネルブートラインに init=/bin/bash を追加することで実現できます

更新されたブートラインを含むコンソールを示すスクリーンショット。

コマンドを使用して/ (ルート) ファイル システム RW を再マウントします

mount -o remount,rw /

再マウント アクションを含むコンソールを示すスクリーンショット。

これで、ルート パスワードの変更やその他の多くの Linux 構成の変更を実行できるようになりました

ルート パスワードやその他の構成を変更できるコンソールを示すスクリーンショット。

を使用して VM を再起動します

/sbin/reboot -f

シングル ユーザー モード

または、単一ユーザーまたは緊急モードで VM にアクセスする必要がある場合があります。 起動または方向キーを使用して中断するカーネルを選択します。 カーネル ブートラインに キーワード (keyword) シングルまたは 1 を追加して、目的のモードに入ります。 RHEL システムでは、 rd.break を追加することもできます。

シングル ユーザー モードにアクセスする方法の詳細については、こちらのドキュメントを参照してください。

GRUB で選択した OS 画面のブートでの *Ubuntu エントリのスクリーンショット。

次の手順

Azure シリアル コンソールの詳細

お問い合わせはこちらから

質問がある場合やヘルプが必要な場合は、サポート要求を作成するか、Azure コミュニティ サポートにお問い合わせください。 Azure フィードバック コミュニティに製品フィードバックを送信することもできます。