はじめに
OracleCloudのVM.Standard.A1.Flexシェイプを使用したUbuntu20.04インスタンスでカーネル5.13.0-1033-oracleにアップデートしたところカーネルパニックを起こし動作しなくなった場合への対処法
他のインスタンスを使わずCloudShellを使用した解決法です
原因の解明
カーネルパニックを起こしてしまうと当然SSHも繋がらなくなるのでOracleCloudのCloudShellを利用する
インスタンス->リソース->コンソール接続->CloudShellの起動
すると勝手にインスタンスに接続してくれます
ただ、カーネルパニックを起こしているので何も表示されません。
CloudShell開きっぱなしでそのままインスタンスを再起動してみましょう(ハングしているので直ちに電源断でいいと思います)
しばらくするとCloudShellにカーネルログがずらぁ~っと出てくると思います
end Kernel panic - not syncing: Fatal exception in interrupt
で止まったらCtrl+Fでkernel BUG at
と検索してみましょう
kernel BUG at include/linux/fs.h:3104!
が引っかかればこの記事の対象です
因みに原因はDocker絡みで、docker.serviceをdisableさせれば正常起動出来るらしいですが、自分が試した限り、
- ハングしない一瞬のタイミングを狙うのは無理(VM.Standard.A1.Flexの場合)
- 他インスタンスにアタッチしてシンボリックリンクを解除する→解除してもカーネルパニックを起こす
解決法
カーネルを一時的に変更して起動する
CloudShell開きっぱなしで再起動しましょう
シェルの内容がクリアされたタイミングでEscキーを連打
UEFI(?)が表示されたらBootManager->Oracle ~~ Volumeを選択
またEscキー連打
そうするとGrubが表示されるので「Advance Options for Ubuntu」を選択
問題の1033カーネル以外を選択して起動させます
SSHなりシェルなりでログインするときちんとさっき選択したカーネルで起動します
カーネルのアップデート&固定
sudo nano /etc/default/grub
でGrubの設定ファイルを開きます
GRUB_DEFAULT=saved
GRUB_SAVEDEFAULT=true
この2行を追加します(GRUB_DEFAULTはデフォルトで0になってると思います)
sudo update-grub
を実行してパッチ済みカーネルである5.13.0-1034-oracle
を落とします
再起動して、再度「Advance Options for Ubuntu」を開くと5.13.0-1034-oracle
が追加されているのでそれを起動します
これでカーネルパニックを起こすことなく正常に起動することができます
Grubの設定で最後に選択したカーネルを保存して次起動するときもそのカーネルを使用してブートされます
お疲れ様でした。
参考