Ubuntuのサーバーを使っていて更新したらカーネルパニックで起動しなくなって、復旧したときのメモ。
カーネルパニックからの復旧方法
やったことは、不具合の原因になっているカーネルを削除すること。
まずはカーネルバージョンを調べる。以下のコマンドで今のバージョンを見る。
uname -r
次にインストールされているカーネル一覧を出す。
dpkg -l | grep linux-image
問題のカーネルを削除する。
sudo apt-get autoremove --purge linux-image-4.4.0-81-generic
上記は基本的にこのページを参考にしました。
http://www.stockdog.work/entry/2017/07/09/023637
はまったところ
上のコマンドを実行したところ、以下のようなエラーになってカーネルを削除できなかった。
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
パッケージ 'linux-image-extra-4.4.0-97-generic' はインストールされていないため削除もされません
以下の追加パッケージがインストールされます:
apport
以下のパッケージはアップグレードされます:
apport
アップグレード: 1 個、新規インストール: 0 個、削除: 0 個、保留: 154 個。
(中略)
Traceback (most recent call last):
File "/usr/bin/pycompile", line 35, in
from debpython.version import SUPPORTED, debsorted, vrepr,
File "/usr/share/python/debpython/version.py", line 24, in >
from ConfigParser import SafeConfigParser
ImportError: No module named 'ConfigParser'
dpkg: クリーンアップ中にエラーが発生しました:
サブプロセス インストール済みの post-installation スクリプト はエラー終了ステータス 1 を返しました
処理中にエラーが発生しました:
/var/cache/apt/archives/apport_2.20.1-0ubuntu2.10_all.deb
E: Sub-process /usr/bin/dpkg returned an error code (1)
エラーをよくよく見るとPythonのエラー(ImportError: No module named 'ConfigParser')になってるので、これを調べていくと、どうやらPython2系と3系の違いらしい。2系ではConfigParserだが3系ではconfigparser。
/usr/bin/pythonで使っているPythonバージョンを調べると3.5.2だったので、2系で動くようにシンボリックリンクを一時的に変えてみた。
ln -s Python2系のpath /usr/bin/python
で、再度カーネルを削除するコマンドを実行したら、無事に動作
sudo apt-get autoremove --purge linux-image-4.4.0-81-generic
これで復旧完了