• お問い合わせ
  • ユーザー登録
Turbolinux関連書籍
トレーニング&資格 パートナー コンサルティング ユーザー登録 Turbolinux関連書籍
turbolinux関連書籍 Turbolinux関連特集&Turbolinux執筆記事 Turbolinux関連教材ほか
Turbolinux関連書籍

ブートローダ GRUB の基本を知ろう!

■はじめに

Linux を起動するためのブートローダーとして一般的に利用されているものには、LILO と GRUB(GRand Unified Bootloader)があります。Turbolinux では、Turbolinux 7 Workstation 以降、標準のブートローダーに GRUB を採用しています。ここでは、GRUB の概要を解説するとともに、GRUB が持つ基本的なコマンドの使用方法についても解説します。GRUB についての詳細は、以下の Web サイトが参考になるでしょう。

http://www.gnu.org/software/grub/


■GRUB の概要

GRUB のメリットは、LILO の欠点を知ることでより明確にすることができます。LILO は、カーネルをブートするためのプログラムをハードディスクの MBR へ書き込む際、カーネルのブートイメージファイルである /boot/vmlinuz の位置情報も含めて書き込みます。このとき LILO は、vmlinuz ファイルの位置情報をディレクトリ構造ではなく、ディスク上のセクタ位置として認識します。そして、LILO はこのセクタ情報をもとにカーネルを起動します。カーネルの再構築や /etc/lilo.conf ファイルを編集した後に /sbin/lilo を実行しなければならないのはこのためです。つまり、カーネル再構築後に /sbin/lilo の実行を忘れたり、/etc/lilo.conf ファイルの編集を間違えたまま /sbin/lilo を実行し、コンピュータを再起動してしまうと、LILO はカーネルの位置を判断できず起動できないというトラブルに遭遇することとなります。再度、設定ファイルを修正したり、MBR へ LILO を書き込みたくても、すでに Linux を起動することはできなくなっています。ブートディスクなどを作成していない場合には、Linux を起動するための手段がなくなってしまいます。しかも、デュアルブート環境を構築し LILO をブートセレクターとして使用している場合は、他の OS を起動することさえできなくなる可能性もあり、システム全体に大きな影響を与えてしまいます。

それに対し GRUB は、ファイルシステムを理解し、ファイルシステム上のディレクトリパスでブートイメージを探し出すことが可能です。GRUB の最も大きな特徴は "ファイルシステムを理解する" という点です。つまり、カーネルの再構築によって /boot/vmlinuz の位置情報が変更されたり、GRUB の設定ファイルである /boot/grub/grub.conf を編集しても GRUB はディレクトリパスでファイルを認識することができるため、LILO のように /sbin/lilo を実行して MBR に反映させるような手順は必要ありません。

このように、LILO は MBR の情報が不適切だと OS をブートできなくなってしまいますが、GRUB を使用すれば、たとえ設定ファイルを間違えていたとしても GRUB が備える強力なコマンドラインコンソールを使用して OS を起動することができ、ブートに関連するトラブルのリスクを少なくすることができます。


■GRUB のよる OS の起動

ここでは、GRUB がカーネルをブートするまでの手順を簡単に解説します。

ハードディスクの MBR にインストールされた GRUB は、PC が起動すると、stage1 → stage1_5 → stage2 と呼ばれるプログラムを順に実行し、最後にカーネルをロードします。Turbolinux では、これらのプログラムは /boot/grug/ ディレクトリに存在します。

# ls /boot/grub/
device.map     grub.conf       reiserfs_stage1_5  stage2
e2fs_stage1_5  jfs_stage1_5    splash.xpm.gz      vstafs_stage1_5
fat_stage1_5   minix_stage1_5  stage1             xfs_stage1_5

stage1_5 プログラムは、先頭にファイルシステムの名称がついています。実際に GRUB をインストールすると、stage1 と stage1_5 のプログラムは MBR に書き込まれます。stage2 は実際のファイルシステム上に存在する /boot/grub/stage2 がブートの段階でロードされます。

コンピュータの電源を入れると、MBR にある stage1 プログラムがロードされ、stage1 プログラムは stage1_5 プログラムをロードします。そして、stage1_5 プログラムはファイルシステムを理解し、実際のファイルシステムに存在する /boot/grub/stage2 ファイルをロードします。そして stage2 がロードされると、以下の見慣れた GRUB の起動画面が表示されます。



この起動画面に表示されているラベルは、/boot/grub/grub.conf ファイルに記述されている設定内容を直接読み込んで表示しています。起動したい OS のラベルを選択し[Enter]キーを押すと、その OS が起動します。ここまでが、MBR にインストールした GRUB がカーネルをロードするまでの基本的な流れです。この後の処理は、カーネルに引き継がれます。

/boot/grub/grub.conf

/boot/grub/grub.conf の基本的な内容は次のようなものになります。# で始まる行はコメントと見なされます。

# This file was converted from /etc/lilo.conf by gilo-0.90-5.
timeout 50
default 0
fallback 1
splashimage (hd0,2)/boot/grub/splash.xpm.gz

title linux
kernel (hd0,2)/boot/vmlinuz root=/dev/hda3
initrd (hd0,2)/boot/initrd

title dos
chainloader (hd0,0)0+1

最初に理解しておきたいのは、GRUB でのハードディスクの指定方法です。フロッピーディスクの場合は fd0、ハードディスクの場合は hd0、hd1... と順番に割り当てられます。IDE と SCSI の区別はありません。ハードディスクの認識された順番に割り当てられます。パーティション番号は先頭から 0、1...と順番に割り当てられます。

例えば、ご使用の PC に 2 台の IDE ハードディスクが搭載されており、それぞれプライマリマスターとセカンダリマスターに 接続されている場合、プライマリマスターのハードディスクは (hd0) と指定し、セカンダリマスターのハードディスクは (hd1) と指定することになります。また、プライマリマスターのハードディスクに作成した 1 つ目のパーティションは (hd0,0)、2 つ目のパーティションは (hd0,1) と指定します。セカンダリマスターのハードディスクに作成した 1 つ目のパーティションであれば (hd1,0) 、2 つ目のパーティションであれば (hd1,1) のようになります。

/boot/grub/grub.conf の設定項目は全般設定と個別設定の大きく 2 つに分かれます。

全般設定の代表的な項目は以下の通りです。

default timeout で設定した時間が経過してもラベルを選択しなかった場合に起動する OS を指定します。ラベルの番号は title の登録順に 0、1...と順番に割り当てられます。
timeout default で指定した OS が起動されるまでの待ち時間を指定します。
fallback default で指定した OS の起動に失敗した場合に起動される OS を指定します。
splashimage 背景の画像ファイルを指定します。

個別設定には、各 OS を起動するための情報が記述されます。title から開始され、次の title までが該当する OS を起動するための設定項目になります。個別設定の代表的な項目は以下の通りです。

title GRUB の起動画面に表示されるラベルを指定します。
kernel カーネルのブートイメージを指定します。
initrd Linux のカーネルイメージをロードするさいに利用される初期 RAM ディスク(SCSI ディスクからの起動などで必要)のイメージファイルを指定します。
chainloader 主にパーティションの先頭セクタにインストールされた Windows のブートローダーを起動する場合に指定します。指定したパーティションの先頭セクターにあるファイルを取り込むには +1 を指定します。

■GRUB の編集モードとコマンドライン

通常、Turbolinux のインストール後に grub.conf を修正することはありません。しかし、異なる OS を追加インストールした場合など、編集が必要になる場合もあるでしょう。そのときに、誤って編集してしまうと OS が起動できなくなってしまう可能性があります。しかし、GRUB は起動画面から OS を起動するための設定を修正したり、GRUB のコマンドラインから直接 OS を起動することができます。また、カーネルパラメータを指定することもできます。

これらの操作を行うには、はじめに GRUB の起動画面で[P]キーを入力し、GRUB のパスワードを入力します(Turbolinux では、root と同じパスワードがデフォルトで設定されます)。認証されると、[E]キーを押して選択しているラベルを編集することができます。[C]キーを押せば、コマンドプロンプトが表示され GRUB のコマンドを実行できるようになります。また、[A]キーを押すとカーネルパラメータを指定することができます。

GRUB を使用することのメリットの 1 つは、このような強力なコマンドラインコンソールを GRUB が備えていることです。OS を起動するための設定が誤っていたり、事前に設定ファイルを編集していなくても、簡単に OS をブートすることができます。しかも、 bash のような補完機能も効くので便利です。


ここでは、GRUB の編集モードや GRUB のコマンドラインから OS を起動する方法について解説します。

●GRUB の編集モード

GRUB 起動画面で[E]キーを押して編集モードに移ると、以下の画面が表示されます。



編集したい行にカーソルを合わせ[E]キーを押します。すると、以下のように編集可能な状態になります。



編集後、[Enter]キーを押すと内容が反映されます。[Esc]キーを押すと編集を取り消すことができます。

[B]キーを押すと修正した内容で OS を起動します。

編集メニューで修正した内容は、/boot/grub/grub.conf に反映されません。必要であれば、Turbolinux が起動した後にファイルの内容を修正する必要があります。

●GRUB のコマンドモード

コマンドラインから直接 OS を起動するには、[C]キーを押してコマンドモードに移ります。なお、[Esc]キーを押すとコマンドモードから抜けることができます。

[C]キーを押すと、以下のようにコマンドプロンプトが表示されます。



ここでは、例として、デュアルブートインストールされた Windows と Turbolinux を GRUB のコマンドを使用して起動する方法を解説します。

Windows は /dev/hda1 にインストールされており、Turbolinux の /boot ディレクトリは /dev/hda3 にあるものとします。/dev/hda1 と /dev/hda3 は、GRUB では (hd0,0) と (hd0,2) と指定します。なお、コマンドを入力する際は、[Tab]キーで入力補完機能が使用できます。


Linux の起動

起動するパーティションを指定します。

grub> root (hd0,2)

起動するカーネルイメージを指定します。

grub> kernel /boot/vmlinuz root=/dev/hda3

/boot パーティションを作成している場合は、kernel /vmlinuz root=/dev/hda3 のように入力します。

root=/dev/hda3 の箇所は、Turbolinux の /(ルート) パーティションを指定しています。他のカーネルパラメータが必要な場合はスペースで区切って指定することができます。

SCSI のハードディスクを使用している場合などは、SCSI 機器のモジュールをロードするために、以下のように /boot/initrd ファイルを読み込む必要があります。

grub> initrd /boot/initrd

最後に、指定したカーネルでシステムを起動します。

grub> boot


Windows の起動

Windows がインストールされたパーティションを指定します。

grub> root (hd0,0)

Windows を起動するためには、chainloader コマンドを使用します。chainloader コマンドは、主にパーティションの先頭セクタにインストールされた Windows のブートローダーを起動する場合に指定します。指定したパーティションの先頭セクターにあるブートローダーを起動するには +1 を指定します。

grub> chainloader +1

最後に、boot コマンドを実行して Windows を起動します。

grub> boot


その他のコマンド

ここでは、GRUB が備える豊富なコマンドの中から基本的なコマンドのいくつかを紹介しましょう。

help

GRUB コマンドのヘルプが表示されます。

cat

ファイルの内容を表示します。例えば、次のように使用します。

grub > cat (hd0,2)/boot/grub/grub.conf

/boot/grub/grub.conf の内容が表示されます。

find

指定したファイルを検索し、存在するパーティションを表示します。例えば、次のように使用します。

grub > find /boot/grub/grub.conf
 (hd0,2)

この例では、/boot/grub/grub.conf が存在するパーティションが (hd0,2) であることを確認できます。


■参考)ブートローダーを GRUB から LILO に変更する

ブートローダーに LILO を使用したいという方もいるでしょう。Turbolinux では、標準のブートローダーとして GRUB がインストールされますが、従来の LILO に変更することも可能です。LILO に変更するには、root ユーザーで次のコマンドを実行します。

# lilo

逆に、LILO から GRUB へ変更するには、Turbolinux 独自のスクリプトである gilo を実行することで簡単にブートローダーを切り替えることができます。このスクリプトは、LILO の設定ファイルである /etc/lilo.conf から GRUB の設定ファイルである /boot/grub/grub.conf を生成し、GRUB をインストールします。

# gilo