前々回 、前回 と、複数のOSを使う方法について説明してきました。今回は、その締めくくりとしてGRUBを使って1つのハードディスクでデュアルブートする方法とGRUBの設定方法を紹介します。
GRUBを使って1つのドライブでデュアルブートする
1つのドライブに複数のOSをインストールしてGRUBを用いてデュアルブートする方法は、一部の環境で、すでにインストールされているWindowsを起動不能にしてしまうというリスクを抱えています。それを避けるために、前回紹介したドライブを増設する方法やWubiを検討してみてください。
また、Windowsが起動しなくなってしまった場合に備えて、バックアップやリカバリディスクの作成を欠かさないでください。
WindowsがプリインストールされているドライブにUbuntuもインストールするには、インストーラの「ディスクの準備」で、「 それぞれ別のものとしてインストールし、起動時にどれを起動するか選択」を選びます。つぎに画面下部に表示されているスライダを左右に動かして、どれだけの容量をUbuntuに割り当てるか決めます(図1 ) 。「 進む」をクリックすると確認画面が表示され、パーティションの変更を実際にディスクに書き込むには「続ける」をクリックします(図2 ) 。後は通常のインストールと同様に作業を進めれば、インストーラによってGRUBが自動設定され、GRUBを使ったデュアルブートが完成します。
図1 スライダを左右に移動させてUbuntu 9.10に割り当てる容量を決める
図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 端末内に設定画面が表示される
この際、GRUB Legacyのmenu.lstからGRUB 2をチェーンロードするか聞かれるので、必ず「はい」を選択します(図4 ) 。続いて、「 Linuxコマンドライン」と「Linuxパラメータ」の設定がありますが、どちらもそのまま「了解」を選択してください。
図4 チェーンロードの設定では必ず「はい」を選択
ここまでの作業でGRUB LegacyからGRUB 2が呼び出されるようになります。GRUB LegacyのOS選択画面を見てみると、確かにGRUB 2を呼び出すようになっているのがわかります(図5 ) 。
図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リーダーが担当する予定です。お楽しみに。