Ubuntu Weekly Recipe

第97回複数のOSを使う(3)GRUBを使ったデュアルブート、GRUBの設定

前々回前回と、複数のOSを使う方法について説明してきました。今回は、その締めくくりとしてGRUBを使って1つのハードディスクでデュアルブートする方法とGRUBの設定方法を紹介します。

GRUBを使って1つのドライブでデュアルブートする

1つのドライブに複数のOSをインストールしてGRUBを用いてデュアルブートする方法は、一部の環境で、すでにインストールされているWindowsを起動不能にしてしまうというリスクを抱えています。それを避けるために、前回紹介したドライブを増設する方法やWubiを検討してみてください。

また、Windowsが起動しなくなってしまった場合に備えて、バックアップやリカバリディスクの作成を欠かさないでください。

WindowsがプリインストールされているドライブにUbuntuもインストールするには、インストーラの「ディスクの準備」で、⁠それぞれ別のものとしてインストールし、起動時にどれを起動するか選択」を選びます。つぎに画面下部に表示されているスライダを左右に動かして、どれだけの容量をUbuntuに割り当てるか決めます図1⁠。⁠進む」をクリックすると確認画面が表示され、パーティションの変更を実際にディスクに書き込むには「続ける」をクリックします図2⁠。後は通常のインストールと同様に作業を進めれば、インストーラによってGRUBが自動設定され、GRUBを使ったデュアルブートが完成します。

図1 スライダを左右に移動させてUbuntu 9.10に割り当てる容量を決める
図1 スライダを左右に移動させてUbuntu 9.10に割り当てる容量を決める
図2 パーティションの変更を書き込むには「続ける」をクリック
図2 パーティションの変更を書き込むには「続ける」をクリック

GRUB LegacyとGRUB 2

Ubuntu 9.04まで使われていたGRUB Legacyに代わって、Ubuntu 9.10ではGRUB 2が採用されています。さらにUbuntu 9.10のインストーラは、他のOSがインストールされているかどうかを判断して、GRUB 2の設定を変更します。

他のOSが見つからず、Ubuntu 9.10が唯一のOSとなる場合は、起動時にGRUB 2の画面の表示しません。ただし、起動時に「Shift」キーが押し続けられているときだけGRUB 2の画面を表示し、リカバリーモードやメモリテストを選択できる仕組みになっています。

Windowsなどの他のOSが見つかったときは、GRUB 2のOS選択画面を10秒間表示するように設定されます。10秒間操作がなかったときはUbuntuを起動するようになっています。

9.04からアップデートした際にはGRUB Legacyがそのまま使われ、GRUB 2はインストールされません。アップグレードした場合でもGRUB 2を使用したければ、[アプリケーション]-[アクセサリ]-[端末]で、以下のコマンドを実行します。

$ sudo apt-get install grub-pc

すると端末内で設定画面が表示されるので、指示に従って設定していきます図3⁠。なおこの作業では、選択している項目の移動に「Tab」キーを使います。

図3 端末内に設定画面が表示される
図3 端末内に設定画面が表示される

この際、GRUB Legacyのmenu.lstからGRUB 2をチェーンロードするか聞かれるので、必ず「はい」を選択します図4⁠。続いて、⁠Linuxコマンドライン」「Linuxパラメータ」の設定がありますが、どちらもそのまま「了解」を選択してください。

図4 チェーンロードの設定では必ず「はい」を選択
図4 チェーンロードの設定では必ず「はい」を選択

ここまでの作業でGRUB LegacyからGRUB 2が呼び出されるようになります。GRUB LegacyのOS選択画面を見てみると、確かにGRUB 2を呼び出すようになっているのがわかります図5⁠。

図5 GRUB LegacyからGRUB 2を呼び出すようになっているのがわかる
図5 GRUB LegacyからGRUB 2を呼び出すようになっているのがわかる

このように9.04からアップグレードした場合でもGRUB 2を使用できるようになったわけですが、GRUB Legacyもまだ一部分で使われています。おすすめはしませんが、GRUB Legacyを全く使わないように、GRUB Legacyが担当している部分もGRUB 2で置き換えるには、端末で以下のコマンドを実行して、ブートローダのインストール先を指定してください。

$ sudo upgrade-from-grub-legacy

GRUB 2のTips

他のOSが表示されないときは

GRUB Legacyの場合は、他のOSのメニューエントリを追加する場合には、自分でインストールされているパーティションなどを調べて「/boot/grub/menu.lst」に追記するのが一般的でしたが、GRUB 2ではGRUB Legacyのmenu.lstにあたる「/boot/grub/grub.cfg」を自分で編集できないようになっています。⁠/etc/grub.d/」以下のスクリプトによってOSの検出からメニューエントリの追加までを自動で行ってくれます。

GRUB 2のメニューエントリに他のOSが表示されないときは、そのOSがインストールされているドライブを接続した上で順にコマンドを実行していきます。まず、以下のコマンドで前回デバイスマップが作成された時からハードウェア構成が変わっている場合のために、デバイスマップを作成し直します。

$ sudo grub-mkdevicemap

次に、以下のコマンドで、OSの検出からメニューエントリの登録までを自動で行います。

$ sudo update-grub

たったこの2つのステップで、全てのOSがメニューエントリに追加されます。

デフォルトの起動OSを変更したいときは

GRUB 2を利用するときのデフォルトの起動OSはWindowsではなくUbuntuです。これをWindowsに変更してみます。 まず、端末で以下のコマンドを実行します。

$ grep menuentry /boot/grub/grub.cfg

すると以下のような出力を得ます。

menuentry "Ubuntu, Linux 2.6.31-14-generic" {
menuentry "Ubuntu, Linux 2.6.31-14-generic (recovery mode)" {
menuentry "Memory test (memtest86+)" {
menuentry "Memory test (memtest86+, serial console 115200)" {
menuentry "Windows 7 (loader) (on /dev/sda1)" {

このうち、Windowsのメニューエントリの「"Windows 7 (loader) (on /dev/sda1)"」の部分をコピーしておきます。 続いて、端末で以下のコマンドを実行してGRUB 2の設定ファイルを開きます。

$ sudo gedit /etc/default/grub

設定ファイルの中の「GRUB_DEFAULT」を含む行を、先ほどコピーした文字列を使って以下のように変更して保存します。

GRUB_DEFAULT="Windows 7 (loader) (on /dev/sda1)"

または、以下のように変更すれば、前回正常起動したOSを記憶しておき、次回の起動でも同じOSを使用するという設定もできます。

GRUB_DEFAULT=saved

最後に、端末で以下のコマンドを実行して変更を反映させます。

$ sudo update-grub

タイムアウトの秒数を変更する

Ubuntu 9.10以外のOSもインストールされている場合、GRUB 2のOS選択画面が表示されるのはデフォルトで10秒ですが、これを変更するには、先ほどと同じく以下のコマンドでGRUB 2の設定ファイルを開きます。

$ sudo gedit /etc/default/grub

「GRUB_TIMEOUT=10」となっている行を以下のように変更したい秒数に変えて保存します。この値を「-1」としてタイムアウトしないようにも設定できます。

GRUB_TIMEOUT=5

変更を反映させるために以下のコマンドを実行します。

$ sudo update-grub

GRUB 2のOS選択画面を表示しないようにする

他のOSがインストールされていない場合はGRUB 2のOS選択画面は起動時に「Shift」キーを押し続けていない限り表示されません。他のOSがインストールされているときにもこの動作をさせてみましょう。

まず、端末で以下のコマンドを実行します。

$ sudo gedit /etc/grub.d/40_custom

テキストエディタが開かれるので、末尾に以下の内容を追記して保存します。

# set timeout=0 unless shift is pressed
if [ ${timeout} != -1 ]; then
  if keystatus; then
    if keystatus --shift; then
      set timeout=-1
    else
      set timeout=0
    fi
  else
    if sleep --interruptible 3 ; then
      set timeout=0
    fi
  fi
fi

次に変更を反映するために以下のコマンドを実行します。

$ sudo update-grub

Ubuntuがインストールされているドライブに後からWindowsをインストールしてUbuntuが起動できなくなったときは

Ubuntuがインストールされているドライブに、後からWindowsをインストールすると、WindowsのブートローダがGRUBを上書きしてしまい、Ubuntuを起動できなくなります。

その場合は、まずLiveCDでUbuntuを起動します。続いて、端末を開き次のコマンドを実行します。

$ sudo os-prober

すると、以下のようにインストールされているOSの情報が表示されます。

/dev/sda1:Windows 7 (loader):Windows:chain
/dev/sda5:Ubuntu 9.10 (9.10):Ubuntu:linux

このうち、起動したいUbuntuの項目の先頭に表示されている「/dev/sda5」の部分を使って、以下のようにマウントしてください[1]⁠。

$ sudo mount /dev/sda5 /mnt

次に以下のコマンドを実行し、/devを/mnt/devからも利用できるようにします。

$ sudo mount --bind /dev /mnt/dev

以下のコマンドで/mntを特別に/として機能するようにします。

$ sudo chroot /mnt

次にGRUB 2をインストールし直します。ここでは、先ほど使用した「/dev/sda5」から数字を除いて「/dev/sda」のようにして使用してください。

# grub-install --recheck /dev/sda

続いて、以下のコマンドを実行してchrootを解除します。

# exit

マウントしたデバイスをアンマウントしていきます[2]⁠。

$ sudo umount /mnt/dev
$ sudo umount /mnt

以上でGRUB 2の再インストールは完了です。

再起動するとUbuntuがまた起動できるようになっています。ただし、新たにインストールしたWindowsの項目は作成されていないので、⁠他のOSが表示されないときは」での作業を行ってください。

次回は、Ubuntu Japanese Teamリーダーが担当する予定です。お楽しみに。

おすすめ記事

記事・ニュース一覧