Windows/Linux混在環境での二段階ブートの確立方法

注意!

本ページの内容はOSのブートシーケンスやHDDの書き換えなど非常にデリケートな内容を扱っています。
これらの作業を行う場合はできるだけdisklessfun’s Wiki*さんのページを熟読し、自分が何を行おうとしているのか理解してから実行してください。熟読してもはじめて行う場合は失敗しやすいですのでデータのバックアップを取るなどして環境が破壊されても大丈夫なように十分な対策を行ってください。ここに書かれたことを行っての損害は一切持てませんので自己責任でお願いします。

マルチブートにおける二段階ブートの必要性

WindowsLinux両方を入れてマルチブートするのが普通になってくると、Windowsを再インストールしたときにgrub(OS選択画面)が表示されなくなってWindowsしか起動できなくなるということが割と起こる。本来ならハードディスクのMBR(OSを起動するためのエントリポイント)をgrubへ書き換えてやれば元に戻るのだが、相当面倒な上に気づいたらWindowsをインストールした後だということがほとんどである。
そこでMBMと呼ばれるメタブートローダ(grubwindowsどちらかを起動する)をインストールしてやることで、いちいちLinuxに依存するgrubMBRにインストールせずとも自由にOSを選択できるようになる。

詳しくはこちらを参照。

以下ではLinuxがインストールされておりgrubブートローダMBRへ登録されている状態から、MBMを用いて二段階ブートを確立する手順を述べる。(windowsがインストールされているかは任意)

二段階ブートの確立手順

  1. まずMBMをインストールするためのUSBメモリを作る。
    1. ソースコードからイメージの作成を行う。
      1. さきほどのサイトのMBMについてのページの「USBメモリ・ブートのMBMインストーラを作成する(当サイト独自版、お薦め) 」項目中頃にあるcreate-usb-mbminstall-disk-for-ubuntu-kit.tar.gzをダウンロードし、tar zxvfで解凍する。
      2. 解凍したディレクトリに入り"sudo ./create-usb-mbminstall-disk-for-ubuntu.sh"でMBMインストール用イメージができる。
    2. 次に作成したイメージをUSBメモリへ書き込む。PCへ差されたUSBメモリが/dev/sdgだとすると、書き込みのコマンドは「dd if=usb-mbminstall.img of=/dev/sdg」となる。また、この書き込みはイメージを直接上書するのでUSBメモリ中のデータはすべて削除される。よって中身が空っぽか全消去されてもかまわないUSBメモリを使用すること。
  2. 次にgrubのエントリポイントをMBRからPBRへ変更する。二段階ブート確立後はMBM→grubLinuxの順で起動されるため、grubのエントリポイントはMBMから呼ばれるようにPBRへ変更する必要がある。なにか理由がなければPBRの位置はLinuxのルートが置かれているパーティションでいいだろう。手順の詳細はさきほどのサイトのこの項目に譲るが、簡単に書くと次の様になる。
    1. gpartedやfdiskでルートにマウントしているパーティションがどれかを調べる。
    2. (Linuxのルートパーティションが/dev/sda5の場合)「sudo grub-setup -f /dev/sda5」でgrubのエントリポイントが変更される。
    3. Debconfデータベースの更新?(詳細を理解しておらず)詳しくはTips: grub2とgrub1の扱い方(様々な再セットアップ方法等) - disklessfun’s Wiki*の中段「Debian系でgrub2のgrub-pcパッケージが正しく更新される為に確認しておくべきこと 」項目を参照。
      1. 上のページから「fileupdate_debconf_grub-pc_install_devices.sh」をダウンロードする。
      2. さきほどダウンロードしたスクリプトを「sudo fileupdate_debconf_grub-pc_install_devices.sh」で実行。grubのエントリポイントをルートパーティションに変更したのなら、実行後yesを入力してエンターでOKなはず。それ以外の場合は上のページを参考にしてgrubに設定したPBRを指定する。
  3. 最後にBIOSの設定からUSBメモリのブート優先度を最上位に設定し、USBメモリから起動させてMBMをインストールする。

以上により、MBM+grubの二段階ブート環境の構築は終わりである。

OSを再インストールする場合

Windows OS

Windows系のOSはMBRを強制的に書き換えるものがほとんどなので、いったん普通にインストールする。その後、さきほど作ったUSBメモリからMBMをインストールしてMBRを上書きする。これで元の二段階ブート環境が復元される。

LInux OS

Linux系の場合、インストール時のgrubの場所に最初からルートパーティションを設定しておけば、MBMの再インストールは必要ない。ただ、なにやらubuntu10.04ではgrubのPBRへのインストールはOSインストール時には失敗するようなので、いったんMBRへインストールし、その後上と同じ手順でgrubの場所を替え、MBMでMBRを上書きする必要がある。
2010/06/09追記
Tips: grub2とgrub1の扱い方(様々な再セットアップ方法等) - disklessfun’s Wiki*を参照してもらえばわかるが、ubuntuにおけるPBRまたは拡張パーティションからのブートの問題は、拡張パーティションのフラグがubuntuデフォルトではおかしいことにあるらしい。よって一度

# mount /dev/sda5 /mnt」、# grub-setup -f -r '(hd0,5)' '(hd0,5)

のようにコマンドして、パーティションのフラグをfに変更する必要があるようだ。

まとめ

以上、grubがインストールされている環境から二段階ブートへ変更する手順をできる限り単純に書いた。しかし、簡単に書いたつもりにも関わらず結構な長文になっているように、操作その物が非常に複雑である。そのため断念する人も多いかもしれないが、二段階ブートが確立できればOSの再インストールが非常に柔軟に行えるようになる。普通だとWindows/Linux混在のマルチブート環境では通常Windowsの再インストールは相当手間がかかるものだが、二段階ブートさえ出来れば自由に何度でも再インストールすることができるだろう。これは非常に壊れやすいWindows環境に取って大きなメリットである。もし二段階ブートにチャレンジしようという方は、disklessfun’s Wiki*さんのページを参考にしながらぜひチャレンジしてほしい。