デュアル・ブートで Windows 起動不能

以前買ったノート PC は、最初からインストール済みの Windows® と Linux のデュアル・ブートにしている事は、以前チラッと書いた。そこで今日で久しぶりに両 OS をアップデートしたところ、問題発生。

今回、ノート PC ということもあり、Linux のディストリビューションは、Ubuntu Linux を選択していた。そしてアップデートを試みると、新しいカーネル 2.6.24-19 が出ているので、そちらもアップデート。すると、メッセージをちゃんと見ていなかったのも悪いのですが、カーネルだけでなく Ubuntu も 8.04→8.04.1 にマイナー・ヴァージョン・アップしている。

ここまでは別に構わないが、カーネルをヴァージョン・アップしているので、再起動すると、Windows が GRUB のメニューに出てこない。つまりこのままだと、Windows で起動できない。困った。デュアル・ブートなので、当然パーティションを分けてあり、Windows の領域を破壊していることは無いだろうけど、やはりあせる。

しかも、以前 GRUB の設定ファイル (Ubuntu の場合、/boot/grub/menu.lst) を編集したとき、「設定ファイルを編集するときは、バックアップを取って置く」という大原則を守っていなかった。「バックアップを取っていないと問題が発生し、とっていれば問題はおきない」という類のマーフィーの法則は事実である(;_;)

仕方が無いので、root で /boot/grub/menu.lst を開いてみると、例として

# title Windows 95/98/NT/2000
# root (hd0,0)
# makeactive
# chainloader +1

とある (実際には、一部の空白はタブ文字)。これを参考に編集して事なきを得る。

さて何でこんな問題がおきたのか?

  1. Ubuntu のヴァージョン・アップで、Linux 以外の OS が有るデュアル・ブート環境を考慮しておらず、Linux のメニューだけ /boot/grub/menu.lst に書き込む
  2. カーネルをヴァージョン・アップする時に、同じく /boot/grub/menu.lst を編集するが、この動作に問題がある
  3. 以前 /boot/grub/menu.lst を手動で編集した時、私が Ubuntu におけるお約束を破っていた

のどれかだろう。しかも A, B なら、すぐに開発チームが気づくだろうし、インストーラでは Windows Vista® を認識し、メニューに加えられていた。ということは結局、私の編集がまずかったのだろう。

以前の編集では、Windows をデフォルト OS にする為に、Widnwos の起動メニューを Linux のそれより前に持ってきた。その時

# Put static boot stanzas before and/or after AUTOMAGIC KERNEL LIST

### BEGIN AUTOMAGIC KERNELS LIST
## lines between the AUTOMAGIC KERNELS LIST markers will be modified

より前に持ってこれば良かったのかも知れないが、Linux の直前に持ってきたのが良くなかったのか。

デフォルトを変えたいだけなら、

default 0

を変えるべきといわれそうだけど、この方法では、カーネルをアップデートした時に、古いの環境でも起動できるように、メニューに表示される OS の種類が増える分、順番が変わるので、メニューの順番自体を変えたんだけど。

正しい方法は? 一度ちゃんと調べる必要がありそう。

更に Windows とのデュアル・ブートの問題とは別に、Ubuntu が 8.04.1 にヴァージョン・アップした関係で、アップデートの検索場所 (Ubuntu では APT の設定ファイル /etc/apt/sources.list に記載) が変わっている気がする。

これも調べないと。

2008/10/09 追記

/etc/apt/sources.list は変更の必要がなかったけれど、/boot/grub/menu.lst の記載は、都合よく変更されないことがある。

全てのディストリビューションではないだろうが、少なくとも Ubuntu や Dibian では、カーネールのアップデートもほぼ他のソフトウェアのアップデートと同じ感覚で行える。このとき、新しいカーネルに不具合があったときのために、古いカーネルは削除されることなく、起動時にブートマネージャで古いカーネルで起動することも可能。

何度か新しいカーネルで起動できているし、大きな問題も報告されていないので、今回古いカーネルを削除。すると /boot/grub/menu.lst の内容が変更され、削除したカーネルがメニューから消えている。なかなか能く出来ている。

ただ少し問題。デュアル・ブートのデフォルト OS は Windows にし、メニュー項目の書き換えは、以前思わぬトラブルを招いた (未だに良い変更方法が解らない) ので

default 5

としていたが、ここが変わっていない。削除した OS は GRUB の 3, 4 番目に表示される Windows より前にかかれた OS なので、ここは

default 3

に書き換わって欲しい。そうしないと、結果的にデフォルトの OS が変わってしまう。