Ubuntuで間違えてカーネルすべて消してしまうことがたまに起こります。
カーネルを消してしまえば、grubからも起動できません。
そこで、Ubuntuのインストールディスクの機能を使って、カーネルを再インストールします。
環境
今回試す環境はVirtualBox上のUbuntu Server 14.04.3で、apt-getからlinux-imageと名前のつくパッケージすべてを削除した状態です。
また、今回はインストール先のパーティションはlvmになっているので、通常の物理パーテーションのみとは少しだけ違います。
この状態で起動すると、grub上からはMemory testしか、選択できない状態になっています。
Rescue a broken system
OSが動かない状態では、カーネルを再インストールすることは出来ません。
そこで、Ubuntu Serverのインストールディスクを使用します。
Ubuntu Serverのインストールディスクをブートさせ、言語選択をEnglishにした時、下のような画面になります。
この画面から、"Rescue a broken system"を選択します。
その後、言語や地域、キーボードのレイアウト、OSの名前などシステムの設定を要求されますので適当に設定します。
ある程度まで設定すると、下のような画面になります。
この画面は、修復したいOSのパーテーションの選択です。今回の環境ではlvmでパーテーションを区切っているので、"/dev/ubuntu-vg/root"を選択します。
選択後に"Mount separate /boot partition?"と聞かれるのでYesを選択。
次に下のような画面が表示されます。
ここで、"Excute a shell in /dev/ubuntu-vg/root"を選択します。
これでOSを動かせる状態になります。
OSの操作
OSを動かせる状態ではありますが、まだカーネルはインストールされていません。
なので、カーネルのパッケージをインストールします。
まず、カーネルをインストールする前にしなければいけないことがあります。
この状態だと、DNSによる名前解決ができません。名前解決が出来ないと、パッケージのインストールは出来ません。
どうやら、/run以下のファイルが生成されていないため、/etc/resolv.confのシンボリックリンク先の/run/resolvconf/resolv.confが存在しない状態になっており、ネームサーバの設定が読み込まれない状態みたいです。
なので、以下のコマンドを打ちます。
$ mkdir /run/resolvconf/
$ echo nameserver 8.8.8.8 > /run/resolvconf/resolv.conf
こうしたことで、名前解決ができるようになりました。
次に、カーネルとlvmのパッケージのインストールをします。
以下のコマンドを打ちます。
$ apt-get update
$ apt-get install linux-image-generic lvm2
以上で、カーネルは見事に復活しました。あとは再起動するだけです。