ConoHa VPSを使用しており、突然kernel panicが発生した。
解決方法を教えて欲しい。
こんなお悩みを解決します。
今回は、下記の記事が前提となります。前提を把握する上で、適宜参照してください。
【解説】VPS+VPN(WireGuard)による自宅サーバの公開方法を分かりやすく解説!(VPS契約編)
続きを見る
一通り設定後、ConoHa VPS(Ubuntu 22.04)でシステムのアップデートを実施し、VPSを再起動しました。
ところが、OS起動時にkernel panicが発生し、サーバが起動しなくなってしまいました。
一時的にOSが起動しなくなりましたが、試行錯誤の末、解決できましたので、備忘録を作成しておきます。
必要な設定を順番に解説していきますので、興味がある方はぜひ最後までご覧ください。
状況確認
kernel panicが発生していることを確認するため、ConoHa VPSの管理画面からコンソールを起動します。
kernel panicが発生していると、以下のような画面が表示されていると思います。
対処時の手順
下記の手順でkernel panicの問題に対処していきます。
- ConoHa VPSの管理画面からコンソールを起動する。
- ConoHa VPSで構築したサーバを再起動する。
- コンソール右上の「再読み込み」を押下し、grub画面が表示されるのを待つ。
- grub画面からコマンドラインにアクセスする。
- ファイルシステムがインストールされているパーティションを探す。
- カーネルをロードする。
- initrdイメージを読み込む。
- bootコマンドによりUbuntuを起動する。
- 問題が生じているカーネルを削除する。
- grubメニューを更新する。
専門用語ばかりですが、実行時のコマンドと確認観点を示しつつ解説していくので、自分の環境と照らし合わせながら対応してみてください。
コンソールの起動
ConoHa VPSの管理画面にログインし、コンソールを起動します。
先ほど確認したkernel panicが発生していることを改めて確認しておいてください。
サーバの再起動
コンソールを起動した状態で、サーバを再起動します。
サーバの再起動は、ConoHa VPSの管理画面から行えます。
この時、普段の再起動よりも時間がかかります。(2分~3分位)
grub画面が表示されることの確認
再起動中に、コンソール右上の「再読み込み」を何度か押下します。
上手く再読み込みされると、下記のような画面(grub画面)が表示されるます。
画面が表示された段階で、矢印キーの「↑」や「↓」を押下し、画面下側に表示されているカウンターを止めます。
grubのコマンドラインにアクセス
grub画面で「c」を押下し、下記のようなコマンドラインにアクセスできていることを確認します。
以降では、コマンドを操作を行っていきます。
慣れていない方は画面に表示されている内容と本投稿の内容を確認しつつ、作業を進めてください。
ファイルシステムがインストールされているパーティションの探索
grubのコマンドライン上で下記のコマンドを実行します。
ls
結果は実行環境に依存しますが、私の環境の場合、下記のような結果が出力されました。
(hd0,gpt0), (hd0,gpt2), (hd0,gpt4)
この結果に対し、末尾にスラッシュ(/
)を付けたものをls
コマンドの引数として実行します。私の環境の場合、以下の3パターンを試すことになります。
# パターン1
ls (hd0,gpt0)/
# パターン2
ls (hd0,gpt2)/
# パターン3
ls (hd0,gpt4)/
上記を実行すると、いずれかの実行結果にファイルシステムの出力結果が含まれていると思います。
私の場合は、ls (hd0,gpt2)/
を実行した際に、以下のような結果が得られました。
ファイルシステムがインストールされているパーティションを見つけられた後は、そのパーティションのUUIDを調べておきます。
UUIDは、先ほど試したコマンドのうち、末尾のスラッシュ(/
)を削除したコマンドを実行することで得られます。
私の環境の場合、ls (hd0,gpt2)
となります。
この実行結果を確認し、UUIDと表示されている以降の文字列をメモしておきます。環境によって変わるため、必ずメモしてください。
カーネルのロード
以降から、さらに作業が複雑になっていくので、順を追って説明していきます。
rootの設定
作業簡略化のための対応となります。
先ほど、ファイルシステムがインストールされているパーティションを調べましたので、その先頭をrootとして指定します。
私の環境の場合、(hd0,gpt2)
にファイルシステムがインストールされていたので、以下を実行してrootを設定します。
set root=(hd0,gpt2)
カーネルの探索
/boot
以下を確認し、vmlinuz
から始まる文字列を探します。
私の環境の場合、以下のようになりました。※該当する部分だけを表示しています。
# 実行コマンド
ls /boot
# 出力結果(一部)
vmlinuz
vmlinuz.old
vmlinuz-5.15.0-25-generic
vmlinuz-5.15.0-50-generic
このうち、以前正常起動していたものはvmlinuz.old
と考えられるので、vmlinuz.old
をロード対象のカーネルとします。
カーネルのロード
以下の実行例を参考に、カーネルをロードします。
ここで、UUIDは先ほど調べた値を入力してください。
# 私の環境の場合の実行例(UUIDは「ac18dbf1-caac-41c7-ab98-7715cf6bef84」)
linux /boot/vmlinuz.old root=UUID=ac18dbf1-caac-41c7-ab98-7715cf6bef84
initrdイメージの読み込み
カーネルをロード後、初期RAMディスク(initrd)というものをメモリに展開し、initrdに含まれるinitというプログラムを実行することで、他のサービス等が起動する仕組みとなっています。
ここでは、initrdを読み込む際の方法について説明します。
initrdはimgファイルとしてまとめられているため、該当するものを探し出した上で、読み込み処理を行えばOKです。
initrdイメージの探索
initrdイメージも/boot
以下に格納されています。
先ほどと同様に、initrdから始まる文字列を探します。
私の環境の場合、以下のようになりました。※該当する部分だけを表示しています。
# 実行コマンド
ls /boot
# 出力結果(一部)
initrd.img
initrd.img.old
initrd.img-5.15.0-25-generic
initrd.img-5.15.0-50-generic
このうち、以前正常起動していたものはinitrd.img.oldと考えられるので、initrd.img.old
を読み込む対象のイメージとします。
イメージの読み込み
以下の実行例を参考に、イメージを読み込みます。
# 私の環境の場合の実行例
initrd /boot/initrd.img.old
ubuntuの起動
最後に、以下のコマンドを実行し、ubuntuを起動します。
boot
下記のように正常に起動できれば成功です。
ubuntu起動後にログインし、/boot
以下を確認したところ、「*-5.15.0-50-generic」に問題がある可能性が高いと推測しました。
以降では、問題があるカーネルを削除し、カーネル削除に伴いgrubメニューのアップデートを行っていきます。
問題があるカーネルの削除
ubuntu起動後に、以下のコマンドを実行します。
sudo dpkg --get-selections | grep linux-
様々な出力結果が得られると思います。このうち、今回は「5.15.0-50-generic」を対象に削除していきます。
まずは、出力結果を確認するため、以下のコマンドを実行し、実行結果のみを確認します。
sudo apt --dry-run autoremove --purge linux-{headers,image,modules,modules-extra}-5.15.0-50-generic
出力結果に問題がないことを確認した上で、--dry-run
を削除した以下のコマンドを実行します。
sudo apt autoremove --purge linux-{headers,image,modules,modules-extra}-5.15.0-50-generic
grubメニューの更新
最後に、下記のコマンドを実行し、grubメニューを更新します。
sudo update-grub
これで一通りの作業は完了となります。
まとめ
下記の順に対応し、古いカーネルを用いてubuntuを起動後にgrubメニューを更新します。
- ConoHa VPSの管理画面からコンソールを起動する。
- ConoHa VPSで構築したサーバを再起動する。
- コンソール右上の「再読み込み」を押下し、grub画面が表示されるのを待つ。
- grub画面からコマンドラインにアクセスする。
- ファイルシステムがインストールされているパーティションを探す。
- カーネルをロードする。
- initrdイメージを読み込む。
- bootコマンドによりUbuntuを起動する。
- 問題が生じているカーネルを削除する。
- grubメニューを更新する。