FreeBSDとのデュアルブート

FreeBSDが入っていた計算機に内蔵HDDを一つ追加して、 そこに Ubuntu をインストールしようとしていろいろハマったことの記録です。 デュアルブートを実現するのにもっとスマートな方法があるかも知れませんが、 とりあえず最低限できるようになった、という方法を記しておきます。

注意
デュアルブート化する際には、PCが起動しなくなるなどの危険が伴います。 また下記の文章は、とりあえず情報を集めただけであまり検証してません。 環境に依存することもあります。 実行は自己責任でお願いします。

HDDの設定

ここんところ、実はよくわかっていません。

HDDには、

の4種類の属性を持たせることができます。 これは、ハードディスクにあるピンの位置などを 物理的に変更することで設定できるとか、 マザーボードの差し口によって決まるとか、 よくわかってないのですが、まあそういう種類があるそうです。 購入当初に刺さっている HDDは、おそらく Primary Master でしょう。 ちなみにうちの環境では、買ってきた増設内蔵HDDをそのまま付けると、 とりあえずBIOSは2つのHDDを認識していました。

で、ここからが本題なんですが、 HDDからブートするときにはPrimary Master にブートローダーがないと ダメくさいです。しかし、本当かどうか、回避策があるのかないのか、 それもよくわかっていません。 とりあえず、この稿ではPrimary Master にブートローダーを入れる、 という前提で話を進めます。

Ubuntuのインストール

1つ目のHDDに FreeBSDが入っていて、 2つ目のHDDに Ubuntu をインストールするとします。 Ubuntu インストール CD を CDドライブに入れて起動すると、 インストーラーが立ちあがります。 ここで、1台目のHDDは /dev/sda として、2台目は /dev/sdb として認識されます。 したがって、/dev/sda はいじらないで /dev/sdb へ Ubuntu をインストールするように インストーラを操作します。

このとき、ブートローダーをどこに入れるか、という選択肢もあります。 /dev/sdb に入れてすっきりさせたいところですが、 上に書いた前提(ブートローダーはPrimary Masterにあるべし)が正しければ、 /dev/sda に入れざるを得ません。

FreeBSDが選択できない

こうして HDD から再起動すると、 ブートすべきOSの選択肢はなくUbuntu が自動的に立ちあがります。 どうやら、Grub の設定をしないといけないようです。

/etc/grub.d/40_custom
menuentry "FreeBSD" {
set root=(hd0,1)
chainloader +1

と書いて、sudo update-grub を実行すれば良いそうです。

ここでちょっと解説ですが、計算機では0番から番号を割り振りますので、
set root=(hd0,1) とは、
「hd0(1台目のHDD)の2番目のパーティションからブートしてね」

という設定になります。これをどう設定すればよいかは FreeBSDをインストールしたときに どのパーティションをルートにしたかに依存するかと思います。

通常は最初、つまり ad0s1a などをルート(/)にすると思いますが、 これがなぜ2番目のパーティションなんでしょう? おそらくですが、素では ad0s1a は (hd0,0) だと思います。 Ubuntu のブートローダーを一番先頭(1番目のパーティション)に持ってきたために 順番が一つずつずれて (hd0,1)になっているんじゃないかと思います。 外してたらすみません。

参考: ubuntu9.10でgrub編集+FreeBSDデュアルブート

Shift長押しでGrubを起動

さてこれで Grub も書き直したし、FreeBSD が選択できるかなー、 と期待に満ちて再起動しても、まだ起動時の選択画面がでません。 いろいろと探っていると、
起動時(BIOS画面が去った後)にShift を押しつづけると Grub がロードされる
というルールがあることを発見しました。 これで無事に FreeBSD を選択することができて、 選択するとちゃんとFreeBSDが起動しました。

Shift 長押しをしなくてもGrubがロードされる方法はあると思いますが、 まだ調べはついていません。


Last modified: Tue Jan 24 15:46:52 JST 2012