以前のエントリで、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ファイルを外側からいじれるような算段があればいちばんいいのだけれど…
初めて書き込ませてもらいます。Hayatoと申します。
実は、同じようなトラブルが起き、検索していたところこのサイトに辿りつきました。
そして、このサイトの方法を試してみたのですが、linuxコマンドのrootの指定(?)の部分の/dev/sda1 が見つからず、/dev の中を見てみても他のもので該当するようなものが見つかりません。
あまり詳しくないのでわかりませんが、参考サイトでこの部分の指定はUbuntuをインストールしたパーティションと書いてあったのですが、Wubiでインストールした場合はパーティションやらなにやらの指定はした記憶はないのですが……。
あと、loopの指定のディレクトリも存在しないのですが、それは問題ないのでしょうか?英語の参考サイトのほうに、通常中身は存在しないとの記述は見受けられましたが。。。
何か解決法はありますでしょうか?
Hayatoさん、コメントありがとうございます。
実際のところ、私はこういったコマンド処理はまったく苦手で、的確なアドバイスをすることができません。ただ、私だったら同じような問題に直面した場合、こんなことをするだろうという想像はつきます。
・まず、Windowsから起動して、wubiのファイルを別名に変更してバックアップ。
・wubiを削除し、再インストール。
・新規インストールされたUbuntuが立ち上がるので、その起動コマンドをチェック
(本文にあるようにGRUBの起動メニュー時に”e”を押すか、GRUBの設定ファイルを読みます。なお、9.10からはGRUBの設定ファイルは/boot/grub/grub.cfgにあります)。
・再びWindowsに入り、新規のubuntu仮想ファイルとバックアップしておいたもとの仮想ファイルを入れ替えます。
・再起動してubuntuを選択すると、メニューリストではなく、GRUBコマンドプロンプトになります。ここで、先に控えておいたGRUBの起動コマンドを打ち込みます。ただし、カーネルは古いカーネルを明示的に指定することがポイントです。
たぶん、これで解決できると思います。
なお、/dev/sda1等は、ubuntuの仮想HD内のディレクトリですので、Windows側には存在しません。また、上記の方法でubuntuを立ち上げることができたら、適当なコマンドでGRUBを修復しておきます。修復方法は…、私はまだ調べていません。ひょっとしたら、上記で再インストールしたときにGRUBの設定ファイルをどこかにコピーしておいて、それを使って設定ファイルの修復をするだけで大丈夫かもしれませんが。
より的確なアドバイスは、フォーラムの方でお尋ねになれば詳しい方が対処してくれるのではないかと思います。
Hayatoです。お返事ありがとうございます。
実は現在HDがいっぱいいっぱいでWubi自体もギリギリインストール
できたくらいなので、バックアップをとるスペースがありません。
なので、Wubiを再インストールするスペースもない状況で…。
せっかくアドバイスを頂いたのに活かせず申し訳ありません。m(_ _ )m
あ、ちなみに、/dev/sda1等は仮想HD内部のものだとは分かっていたのですが、lsコマンドで/dev/の配下を見てみたり、ルートディレクトリなどを探索したのですが、それらしきものが見当たらなかったということです。
私事ですが、最近立て込んできてしまったので、また時間があるときに頑張って修復してみることにします。ありがとうございました。
Hayatoさん、お忙しいところコメントありがとうございます。
/dev/ですけれど、ここは記憶装置を認識してからsda等を割り当てていくと思うので、起動時には空になっているのではないでしょうか。ということで、本当はUUIDで指定するべきだとかいう話も聞いたことがあります。wubiの場合は、仮想なのでUUIDではできないのかもしれませんね。