本の虫

著者:江添亮
ブログ: http://cpplover.blogspot.jp/
メール: boostcpp@gmail.com
Twitter: https://twitter.com/EzoeRyou
GitHub: https://github.com/EzoeRyou

アマゾンの江添のほしい物リストを著者に送るとブログ記事のネタになる

筆者にブログのネタになる品物を直接送りたい場合、住所をメールで質問してください。

Ubuntuのカーネルをアップデートしたらカーネルパニックが起きた時の解決方法

昨日、何気なくUbuntuのアップデートをしたら、カーネルが4.2.0-19-genericから4.2.0-21-genericにアップデートされた。いや、正確にはアップデートする途中でdpkgがエラーを出しているようだ。何やら脳裏に不安がよぎる。

リブートすると、"kernel panic not syncing unable to mount root fs on unkonown-block(0,0)"と表示されて止まってしまう。

仕方がないので、ブート時にShiftを押し続けてgrub2のメニューを出し、アップデート前のカーネルである4.2.0-19を選んでブートした。Ubuntuは、少なくとも一つ前のカーネルは残すので、カーネルをアップデートして、何らかの理由でそのカーネルに不具合がある時は、以前のカーネルを使うことができる。

さて、どうするのか。毎回これでは不便なのでとりあえず問題のある新しいカーネルを消してみることにした。

sudo apt-get purge linux-image-4.2.0-21-generic

ただしこれはlinux-genericのような仮想パッケージも消してしまうらしい。apt-get upgradeしても、新しいカーネルが依存関係にないのでインストールされなくなった。

再びlinux-genericをインストールしてみる。

sudo apt-get install linux_generic

結果、linux-headers-generic, linux-image-genericなどのパッケージがすべて入る。

依存関係を解決するために、言われるままに以下のようにする。

sudo apt-get -f install

その結果、linuxカーネルの4.2.0.21をインストールしようとするが、やはりdpkgが途中で止まって、ブートできない。

エラーメッセージをよく見てみると、どうやら、dpkgがlinux-image-extra-4.2.0-21-genericの.debファイルを展開する際にエラーになっているようだ。カーネルに問題があるのではなく、ダウンロード済みのパッケージファイルが何らかの理由で破損しているのだろうか。

ダウンロード済みのパッケージファイルを削除するには、apt-get cleanを使えばよい。

sudo apt-get clean

この結果、パッケージファイルを再びダウンロードし、今度は正しく動いているようだ。年のためにリブートして確認してみる。リブートできた。

~$ uname -r
4.2.0-21-generic

やれやれ。