デベロッパー:Linux How-To 2005年10月07日 01:02 更新
icon GRUBを理解する

 GRUBを最も効率的に理解するためには,Red Hat Linux 7.2の標準設定状態における設定ファイルを解読していくのがいちばんだろう。

 Red Hat Linux 7.2の場合,GRUB関連のファイルは/boot/grubディレクトリに格納されている。/boot/grubディレクトリ内のファイルの中で,menu.lstファイルがGRUB起動時に表示されるメニュー項目の設定ファイルだ。

One Point!menu.lstファイルは,実際には/book/grub/grub.confファイルへのシンボリックリンクとして設定されている。

 標準のmenu.lstファイル内容は,インストールした環境にもよるが,おおむねList 1のようになっている。ちなみにList 1は,次のような構成である場合のものだ。

デバイス名 マウントポイント
/dev/sda1 /boot
/dev/sda2 /

 ここでは,List 1を見ながら各種解説をしていこう。

 なお今回は記事の都合もあり,GRUBの全オプションを紹介することはできなかった。ここでは主立ったものを説明するに留める。全オプションについては,GRUBのオンラインマニュアルなどを参照してほしい。

List 1■menu.lstファイル

# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE: You have a /boot partition. This means that
# all kernel and initrd paths are relative to /boot/, eg.
# root (hd0,0)
# kernel /vmlinuz-version ro root=/dev/sda2
# initrd /initrd-version.img
#boot=/dev/sda
default=0
timeout=10
splashimage=(hd0,0)/grub/splash.xpm.gz
title Red Hat Linux (2.4.7-10)
root (hd0,0)
kernel /vmlinuz-2.4.7-10 ro root=/dev/sda2
initrd /initrd-2.4.7-10.img

項目の構成

 menu.lstファイルの構成は,全般設定と個々の項目設定とに分かれる。個々の項目設定はtitleで始まる行だ。List 1の場合,次の部分がメニュー項目に相当する。

title Red Hat Linux (2.4.7-10)
root (hd0,0)
kernel /vmlinuz-2.4.7-10 ro root=/dev/sda2
initrd /initrd-2.4.7-10.img

 List 1では,メニュー項目が上記の1つしか用意されていないが,必要であれば複数個のtitleで始まる行を用意すればよい。その場合には,ブート時にGRUBによって複数の起動メニューが読み込まれ,表示されたメニューから1つを選んでOS起動させることができる。

 title以外の部分である下記の箇所は,GRUBの全般設定である。

default=0
timeout=10
splashimage=(hd0,0)/grub/splash.xpm.gz

 ちなみに,各行の先頭が#で始まる行はコメント行であり動作に影響しない。

全般設定

 全般設定では,ユーザーが何も選択しなかった場合であっても,時限で自動選択されるメニュー項目の設定や背景画面などを指定することができる。

項目名 意 味
default
timeoutで設定されている時間だけ経過しても,メニュー項目を選ばなかった場合には,ここで指定した番号のメニュー項目が自動的に選ばれる。メニュー項目の番号は,menu.lstファイル中のtitle項目の登場順に先頭から,0,1,…となる
timeout
ユーザーがメニューを選択するまでの秒数を選択する(単位は秒)。この時間内にメニュー項目が選択されなければ,default項目で指定してあるメニュー項目が選択されたものとみなされる
splash
背景画面の画像ファイルを指定する

個々の項目

 個々の項目では,ユーザーが対象メニューを選択した際,どのディレクトリににあるブートイメージファイルを読み込んで実行するのかを指定する。OSごとに依存したブートイメージの読み込み方法や,それぞれの実行方法なども指定できる。

項目名 意 味
root 起動するデバイスを指定する
kernel カーネルのファイル名を指定する
initrd Linuxのカーネルイメージを読み取る際,利用するRAMディスクを提供するイメージファイルを設定する(起動するOSがLinuxの場合のみ)

GRUBから見えるドライブ構成

 すでにお気づきだと思うが,List 1を見ると分かるようにGRUBではドライブの見え方がLinux上とは異なっている。GRUBでは,次の書式でドライブおよびパーティションを記述する。

(デバイス名,パーティション番号)

デバイス名 パーティション番号
デバイスの番号を指定する。フロッピーディスクの場合,fd0,fd1,…。ハードディスクの場合には,hd0,hd1,…という名称になる パーティション番号を指定する。先頭から0,1,…。ただし,BSDファイルシステムなどスライスを使うものについては,a,b,…のように指定する場合もある

One Point!デバイス名パーティション番号を区切るカンマの前後に空白を入れると,正しく認識されないので注意したい。

 ハードディスクの場合,デバイス名はIDEやSCSIの区別はない。起動時にBIOSが認識した順序で,hd0,hd1,…と割り当てられる。List 1の例では,次のようにして起動する場所を(hd0, 0)としている。

root (hd0,0)

 後続の行では,次のように起動するカーネルのブートイメージを指定している。

kernel /vmlinuz-2.4.7-10 ro root=/dev/sda2

 ここでの例では,1台目のハードディスクの1番目のパーティション(Linuxから見える/dev/hda1/dev/sda1に相当)から起動し,そのパーティション内にある/vmlinuz-2.4.7-10というファイルを読み込んで実行するという意味になる。

 なおカーネルファイル名の後ろに続く,「ro root=/dev/sda2」という記述内容はカーネルに渡すオプションだ。必要があれば,この部分にカーネルに渡したい任意のオプションを指定できる。

2/5 NEXT