以前のエントリで、wubiでインストールした9.10を再起動したらwubiに入れなくなってしまったことをチラッと触れたが(もっともこの時は他のトラブルのついでみたいなものだったが)、実はwubiでインストールした9.10で再起動したら起動できなくなってしまうというトラブルは、11月半ばから末にかけて各所で頻発していたらしい。今週初めに妻のマシンでこの問題に遭遇してようやく気がついた。

詳細はよくわからないのだが、どうやらブートローダーのGRUBに自動アップデートが入り、これをアップデートするとGRUBのメニューリストが壊れてしまい、次回の起動時にGRUBのコマンドプロンプト画面より先に進めなくなる、ということだったようだ。ちなみに、もうこの事象は再現できないから、おそらく既に解決済みのことなのだろう。妻のパソコンで起こったことを、日本語のブログや英語のバグ報告などで見かけたから、けっこうこれで困った人は多かったのではないかと思う。

既に解決済みのことなのだからもうかまわないといえばかまわないのだけれど、ここはwubiの弱点ではないかと思う。つまり、通常、パーティションにインストールしたubuntuの場合、うまくブートできなくてもLive CDを利用すればどうにか解決することができる(Live CDの起動画面からHD内のシステムをブートする、Live CDで起動して本体のGRUBの設定ファイルを修正する、最悪、Live CDからデータを救出して再インストールするなど)。けれど、wubiの場合、そういう技が使えない。仮想HDファイルからブートできなければ、手も足も出ない。今回のアップデート事件のようにブートに失敗するようなトラブルが起こった場合、これはけっこうしんどいのではないだろうか。特に、wubiが入門者を想定して推奨されていることを考えたら、この弱点は大きい。

ともかくも、今回のように少なくともGRUBのコンソール画面まで進むことができれば、力技でブートする方法はある。似たようなトラブルが起こったときの備忘に、それを書いておこう。なお、この方法は基本的にはこちらの記述をもとにしている。

GRUBのプロンプト画面になったら、まず

linux /boot/vmlinuz-2.6.31-14-generic root=/dev/sda1 loop=/ubuntu/disks/root.disk ro

と入力して、リターン。ただし、この「sda1」は、ときによっては「sdb1」など、別の名前にもなることがある。これでエラーが出なければ、次に、

initrd /boot/initrd.img-2.6.31-14-generic

と入力してリターン。ここでもエラーが出ないことを確認してから、

boot

と入力してリターン。これで起動するはず。

実は、先日、妻のパソコンでこの問題が発生したとき、解決方法がまるで思い浮かばず、しかたなしに再インストールを勧めた。その後、寝付く前に「GRUBのコマンドで起動できたのではないか」と思いついて悔しい気持ちになったので、後日、サブマシンのVirtual Box上のWindowsにwubiで9.10をインストールし、わざとGRUBのメニューを壊しておいて症状を再現し、いろいろやってみた。ところが、通常の方法(あちこち検索すると出てきます)ではブートできない。

そこで、今度はGRUBの設定ファイルは壊さずに、GRUBのメニューが出たところで「c」を押し、コマンドメニューに入って試してみた。この方法の場合、その前に「e」を押すと設定ファイルに記載されたコマンドが読めるので、それを控えておいて、コマンド画面でその通りに入力。けれど、ブートの途中で進まなくなる。

結局、どういうわけか、アップデート後の最新のカーネルである「2.6.31-15」ではなく、ひとつ古い「2.6.31-14」を明示的に指定しなければブートしないようなのだ。これがわかるまで、けっこう苦労した。

それにしても、GRUBはタブキーを押すことで候補を次々にあげてくれるので、細かなスペリングを間違える心配が小さくなる。最初はこれがわからずにちょっとしたスペルミスが続いたが、これがわかってからは、うまく運ぶようになった。それでも、古いカーネルを指定するということは最後までわからなかった。

何にしてもwubiのレスキュー方法は、もっといい知恵が必要な気がする。仮想HDファイルを外側からいじれるような算段があればいちばんいいのだけれど…