AzureのLinux VMでブート診断とシリアルコンソールを使う方法|SSH接続不能時の緊急アクセスと起動ログ確認の実践

宮崎智広 この記事の監修:宮崎智広(Linux実務・教育歴20年以上・受講者3,100名超)
HOMELinux技術 リナックスマスター.JP(Linuxマスター.JP)Azure > AzureのLinux VMでブート診断とシリアルコンソールを使う方法|SSH接続不能時の緊急アクセスと起動ログ確認の実践
「/etc/fstabを編集して再起動したら、VMが起動しなくなった…」

ディスクのマウント設定を変えた直後に再起動したら、起動プロセスが途中で止まってしまった。SSHで接続しようとしても応答がない。こういう事態はLinuxエンジニアなら誰もが一度は経験するものです。

Azure上のLinux VMでは、こういった起動障害や接続不能状態に対応するために「ブート診断(Boot Diagnostics)」と「シリアルコンソール(Serial Console)」という2つの機能が用意されています。ブート診断は起動中のシリアルログとスクリーンショットを記録し、シリアルコンソールはSSHポートを一切通さずにVM内のターミナルへ直接アクセスできます。

この記事では、azコマンドによるブート診断の有効化から、起動ログの取得、シリアルコンソールでのログインまでを実践的に解説します。fstabミスから実際にVMを回復させる手順も紹介するので、緊急時の対応力を今日のうちに身につけてください。実行環境はRHEL 9.4 / Ubuntu 22.04 LTSで動作確認済みです。

この記事のポイント

・az vm boot-diagnostics enableで起動ログとスクリーンショットを記録できる
・シリアルコンソールはSSHなしでVMのターミナルへ直接アクセスできる
・fstabミスによる起動障害もシリアルコンソール経由で回復できる
・AWS EC2シリアルコンソールとの設計の違いも実例付きで解説する


「このままじゃマズい」と感じていませんか?
参考書を開く気力もない、同年代に取り残される不安——
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
姓・名・メールの3つだけ/30秒/解除は3秒 / 詳細はこちら

ブート診断とシリアルコンソールが必要になる場面

Azure上のLinux VMにアクセスできなくなるケースは大きく2種類あります。「VMは起動しているがSSHが通らない」場合と「VMそのものが起動しない」場合です。

前者はAzure VM Run Commandで対処できますが、後者はVMエージェント(WALinuxAgent)自体が動いていないためRun Commandも使えません。この状況で頼りになるのがブート診断とシリアルコンソールです。

ブート診断(Boot Diagnostics)
VMの起動中にシリアルコンソールへ出力されるテキストログと、画面のスクリーンショットを記録します。「カーネルパニック」「fstabの読み込み失敗」「GRUBで止まっている」といった起動障害の原因を後から確認するのに使います。

シリアルコンソール(Serial Console)
VMの電源が入っており、OS内部でシリアルターミナル(ttyS0)が応答していれば、Azureポータルからブラウザ経由でVMのターミナルへ直接接続できます。SSHポートの状態に関係なく使えるため、ネットワーク設定のミス・fstab障害・emergencyモード起動の場面で特に力を発揮します。

機能 用途 主な使用条件
ブート診断 起動ログ・スクリーンショットの記録と確認 ブート診断が有効化されていること
シリアルコンソール SSH不要のインタラクティブなターミナルアクセス VMが起動済み・ttyS0が応答していること

ブート診断を有効化する方法

ブート診断はVMの作成後でも後から有効化できます。本番VMを作成したら最初に有効化しておく習慣をつけておくことをお勧めします。

1. マネージドストレージで有効化する(推奨)

2022年以降、ストレージアカウントを別途用意しなくてもAzureが管理するマネージドストレージにログを保存できます。追加コストがかからず設定もシンプルなため、こちらを推奨します。

# ブート診断を有効化(マネージドストレージ) az vm boot-diagnostics enable \ --resource-group myRG \ --name myVM # 有効化を確認 az vm show \ --resource-group myRG \ --name myVM \ --query diagnosticsProfile.bootDiagnostics

確認コマンドの出力例:

{ "enabled": true, "storageUri": null }

storageUrinullの場合はマネージドストレージを使用しています。

2. 独自ストレージアカウントを指定する場合

コンプライアンス要件でログの保存場所を指定する必要がある場合は、ストレージアカウントのURIを指定します。

# ストレージアカウントを作成(VMと同じリージョンに) az storage account create \ --resource-group myRG \ --name mystoragebootdiag \ --sku Standard_LRS \ --location japaneast # ストレージアカウントのURIを取得 STORAGE_URI=$(az storage account show \ --resource-group myRG \ --name mystoragebootdiag \ --query primaryEndpoints.blob -o tsv) # ブート診断を有効化 az vm boot-diagnostics enable \ --resource-group myRG \ --name myVM \ --storage "$STORAGE_URI"

起動ログとスクリーンショットを取得する

ブート診断が有効な状態でVMを再起動すると、シリアルログとスクリーンショットが保存されます。

1. シリアルログ(起動ログ)を取得する

# シリアルログを標準出力へ表示 az vm boot-diagnostics get-boot-log \ --resource-group myRG \ --name myVM

fstabミスがある場合のログ出力例:

[ OK ] Started Accounts Service. [FAILED] Failed to mount /data. See 'systemctl status data.mount' for details. [DEPEND] Dependency failed for /data. [DEPEND] Dependency failed for Local File Systems. ... You are in emergency mode. After logging in, type "journalctl -xe" for system journal, "systemctl reboot" to reboot, or "exit" to boot into default mode. Give root password for maintenance (or press Control-D to continue):

このログから、/dataのマウントに失敗してemergencyモードで止まっていることが分かります。起動障害の原因特定に非常に役立ちます。

2. スクリーンショットのURIを取得してダウンロードする

# スクリーンショットのURIを取得 SCREENSHOT_URI=$(az vm boot-diagnostics get-boot-log-uris \ --resource-group myRG \ --name myVM \ --query screenshotBlobUri -o tsv) # curlでスクリーンショット(PNG)をダウンロード curl -s "$SCREENSHOT_URI" -o boot-screenshot.png

スクリーンショットはGRUBメニューが表示されているか、ログイン画面が出ているかなど、起動の「現在地」を視覚的に把握するのに役立ちます。

Azure シリアルコンソールで直接ログインする手順

シリアルコンソールはAzureポータルからのみ利用できます(Azure CLIにはシリアルコンソールの接続コマンドはありません)。

前提条件:
・VMの電源がオンであること(割り当て解除状態では使えない)
・ブート診断が有効化されていること
・VMの管理者ユーザーにパスワードが設定されていること(SSH公開鍵のみの設定では使えないため、あらかじめパスワードを設定しておく)
・実行者に「仮想マシン共同作成者」以上のAzure RBACロールが付与されていること

1. Azure Portalからシリアルコンソールへアクセスする

Azureポータルで対象VMのリソース画面を開き、左メニューの「ヘルプ」セクション内にある「シリアルコンソール」をクリックします。ブラウザ内にターミナルウィンドウが開き、VMのシリアル出力(ttyS0)が表示されます。

Enterキーを1回押すとログインプロンプトが表示されます。

# シリアルコンソールに接続後、Enterを押すとプロンプトが現れる myvm-prod-01 login: azureuser Password: # ログイン後、通常のbashセッションが利用可能 [azureuser@myvm-prod-01 ~]$ whoami azureuser [azureuser@myvm-prod-01 ~]$ sudo -i [root@myvm-prod-01 ~]#

2. パスワードが設定されていない場合の対処

デプロイ時にSSH公開鍵のみで認証設定した場合、シリアルコンソールへのログインにパスワードが必要です。VMが起動している状態であればaz vm run-commandでパスワードを設定できます。

# az run-commandでパスワードを設定(VMが起動中であることが前提) az vm run-command invoke \ --resource-group myRG \ --name myVM \ --command-id RunShellScript \ --scripts "echo 'azureuser:TempPass!2024' | sudo chpasswd"

VMエージェントも動いていない(VMが起動しない)場合は、Azureポータルの「パスワードのリセット」機能(VMメニュー → ヘルプ → パスワードのリセット)を使います。
現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、20年以上の運用経験を持つ現役エンジニアが基礎から教えます。
Azure対応セミナーの詳細を見る >>

実践:fstabミスからVMを回復させる手順

最もよくある起動障害パターン「/etc/fstabの誤記入によるemergencyモード起動」をシリアルコンソールで解決する手順を示します。

1. 起動ログで状況を確認する

まずget-boot-logコマンドで起動ログを確認し、emergencyモードで止まっていることを確かめます。

az vm boot-diagnostics get-boot-log \ --resource-group myRG \ --name myVM 2>&1 | grep -A 3 "FAILED\|emergency"

2. シリアルコンソールへ接続してrootでログインする

Azureポータルのシリアルコンソールへ接続し、rootでログインします。emergencyモードではrootパスワードを入力するよう求められます。

3. fstabを修正して再起動する

# emergencyモードのシェルから実行 # まず現在のfstabを確認 cat /etc/fstab # 誤ったエントリを修正(viで編集) vi /etc/fstab # 修正後にマウントテスト(エラーがなければOK) mount -a # 問題なければ再起動 systemctl reboot

mount -aでエラーが出なければfstabの修正は成功です。

よくある修正パターン:
・存在しないデバイス名(/dev/sdc1など)→ blkidで調べたUUIDに変更
・削除済みのNFSマウント → エントリを削除またはコメントアウト
・誤ったマウントオプション → nofailオプションを追加して障害時に起動を継続させる

AWS EC2シリアルコンソールとの比較

AWSにも「EC2シリアルコンソール」(2021年提供開始)という類似機能があります。両者の設計の違いを理解しておくと、AWS経験者がAzureへ移行する際の混乱を防げます。

比較項目 Azure Serial Console AWS EC2 Serial Console
有効化の単位 サブスクリプション単位でデフォルト有効 AWSアカウント単位で明示的な有効化が必要
アクセス方法 Azureポータル(ブラウザ)のみ マネジメントコンソール・EC2 API・AWS CLI
認証方式 OSのユーザー名/パスワード OSのユーザー名/パスワードまたはEC2 Instance Connect
インスタンス要件 Azure Marketplaceイメージであれば基本対応 Nitroベースのインスタンスタイプのみ対応
同時接続数 制限なし インスタンスあたり1接続のみ
起動ログの記録 ブート診断で別途シリアルログを保存 CloudTrail経由のAPI記録のみ、コンソール出力は記録しない

Azureのシリアルコンソールはサブスクリプションレベルでデフォルト有効になっているため、意識せずに使えるのが特長です。一方AWS EC2シリアルコンソールは事前にアカウント単位での有効化が必要な上、Nitroベースのインスタンスタイプのみ対応という制約があります。また起動ログについては、Azureの方がブート診断によるシリアルログ保存という形で体系化されています。

本記事のまとめ

やりたいこと コマンド・操作
ブート診断を有効化する az vm boot-diagnostics enable --resource-group myRG --name myVM
起動ログ(シリアルログ)を取得する az vm boot-diagnostics get-boot-log --resource-group myRG --name myVM
スクリーンショットのURIを取得する az vm boot-diagnostics get-boot-log-uris --resource-group myRG --name myVM --query screenshotBlobUri -o tsv
シリアルコンソールへ接続する Azureポータル → 対象VM → ヘルプ → シリアルコンソール
パスワードを設定する(シリアルコンソール利用前) az vm run-commandでchpasswdを実行、またはポータルのパスワードリセット
fstabミスからVMを回復する シリアルコンソールからrootでログインしてfstabを修正後に再起動

ブート診断とシリアルコンソールは「いざというとき」のための機能ですが、事前にブート診断を有効化しておかなければ起動障害の瞬間を記録できません。新しいVMを作成したらブート診断を有効化する習慣をつけておくと、いざ障害が起きたときに迷わず対応できます。

Azure環境でのLinuxサーバー運用を体系的に学びたい方は、以下もあわせてご覧ください。
現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、20年以上の運用経験を持つ現役エンジニアが基礎から教えます。
Azure対応セミナーの詳細を見る >>

無料メルマガで学習を続ける

Linuxの実践スキルをメールで毎週お届け。
登録は30秒、解除もいつでも可。

登録無料・いつでも解除できます

暗記不要・1時間後にはサーバーが動く

3,100名以上が実践した「型」を無料で公開中

プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。

姓・名・メールの3つだけ/30秒/解除は3秒 / 詳細はこちら

Linux無料マニュアル(図解60P) 名前とメールで30秒登録
宮崎 智広

この記事を書いた人

宮崎 智広(みやざき ともひろ)

株式会社イーネットマーキュリー代表。現役のLinuxサーバー管理者として20年以上の実務経験を持ち、これまでに累計3,100名以上のエンジニアを指導してきたLinux教育のプロフェッショナル。「現場で本当に使える技術」を体系的に伝えることをモットーに、実践型のLinuxセミナーの開催や無料マニュアルの配布を通じてLinux人材の育成に取り組んでいる。

趣味は、キャンプにカメラ、トラウト釣り。好きな食べ物は、ラーメンにお酒。休肝日が作れない、酒量を減らせないのが悩み。最近、ドラマ「フライトエンジェル」を観て涙腺が崩壊しました。