デベロッパー:Linux How-To 2005年10月07日 01:02 更新
icon カーネルの再構築とGRUB

 従来までのLILOでは,カーネルを再構築した際,/sbin/liloコマンドを実行するか,構築時にmake bzliloとするなどして,LILOを更新する必要があった。それでは,GRUBの場合にはどのような設定が必要なのだろうか。

 結論をいえば,GRUBの場合にはカーネルの再構築に際し何か特別な操作が必要となることはまったく無い。カーネル再構築時には,make bzImageなどとしてカーネルイメージ(vmlinuzbzImage))のファイルを作成するだけでよい。

One Point!GRUBを使っている場合,make bzliloとして再構築したり/sbin/liloを実行し,LILOをインストールしてはいけない。間違ってLILOをインストールしてしまうと上書きされ、GRUBが無くなってしまう。しかしRed Hat Linux 7.2では,/etc/lilo.confファイルが存在しないので,LILOのインストールに失敗するだろう。よって,実際には誤ってLILOを上書きするケースは無いはずだ。

 GRUB使えば幾つかのカーネルをメニューで切り替えて利用することができる。その場合には,次のように設定すればよい。

1. 現在のカーネルのバックアップをとる

 まずは現在のカーネルをバックアップしておこう。Red Hat Linux 7.2の場合には,/bootディレクトリにあるvmlinuzファイルが該当する。次のようにバックアップすればよい。

# cp /boot/vmlinuz /boot/vmlinuz.old

2. カーネル再構築をする

 /usr/src/linux-2.4ディレクトリに移動し,make menuconfig make xconfigなどを使いカーネルの環境を設定し直す。その後,make bzImageと実行してカーネル再構築をする。

# make dep ; make clean
# make bzImage

 これにより,新しいカーネルイメージがarch/i386/bootディレクトリにbzImageというファイルとして作られた。これを/bootディレクトリにコピーする。ここでは,/bootディレクトリにvmlinuz.newというファイル名でコピーしよう。

# cp arch/i386/boot/bzImage /boot/vmlinuz.new

One Point!上記本文以外にも,make modulesとしてモジュールファイル類を構築し直す必要があるかもしれない。本稿はカーネルの再構築が目的でないためそれらの解説は割愛している。カーネル再構築の詳細については,「カーネル2.4アップグレードガイド」などを参照してほしい。

3. menu.lstファイルを書き換える

 最後に,新しいカーネルと古いカーネルの両方をメニューで切り替えられるようにするためには,GRUBのmenu.lstを編集しよう。例えば,List 2のようになる。

List 2■古いカーネルと新しいカーネルを選択できるようにした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 New Linux Kernel
root (hd0,0)
kernel /vmlinuz.new ro root=/dev/sda2
initrd /initrd-2.4.7-10.img

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

 このようにmenu.lstを変更することで,起動時に[New Linux Kernel]と[Old Linux Kernel]の2つの選択肢が表示される。メニューから選択すれば,新旧どちらのカーネルでも手軽に起動できるわけだ(Fig.7)。

Fig.7■List 2の起動メニューの実行結果
Fig.7

 ここでは古いカーネルを残して切り替えられるよう説明した。そうではなく,新しいカーネルを上書きして古いものはもう使わないといった場合には,GRUBの設定変更は一切必要ない。

icon WindowsXPとのデュアルブート

 次に,LinuxとLinux以外のOSをデュアルブートさせるための方法を説明しておこう。ここでは,LinuxとWindows XPとのデュアルブート環境を考えてみる。

 次のようにハードディスクが2台あり,1台目にWindowsXP,2台目にLinuxがインストールされているとする。

ディスク1(1パーティション)

Windows XP

ディスク2(2パーティション)


Linux ext3
/bootにマウント)
Linux ext3
/にマウント)

 この場合,Windows XPとLinuxとでデュアルブートを実現するmenu.lstファイルはList 3のようになる。

List 3■Windows XPとLinuxのデュアルブート構成にしたmenu.lstファイル

default=0
timeout=10
title Windows
root (hd0,0)
makeactive
chainloader +1

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

 List 3において,WindowsXPのメニュー項目は次の部分だ。

title Windows
root (hd0,0)
makeactive
chainloader +1

 上記にあるように,Windowsの場合には、rootで起動ディスクを指定した後,makeactiteでアクティブ化を行い,最後にchainloader + 1として次のレコードから起動するという形式になっている。

 List 3のようにmenu.lstファイルを直接ハードディスクに書き込む手段もあるが,複数のOSが起動する環境(デュアルブート)であれば十分に慎重な行いをしたほうがよいだろう。そこでまずは,起動フロッピーディスク内にmenu.lstファイルを作成するのが賢明だ。

 起動フロッピーディスクの/boot/grubディレクトリ下に作成すればよい。しかし,GRUBのマニュアルではmenu.lstというファイル名で作成すればよいと記載されているのに対し,実際にはgrub.confというファイル名でないと動作しないため注意しよう。そこで,grub.confというファイル名でコピーする。このためには,Linuxを起動して起動用フロッピーディスクを適当な場所にマウントし,Linux上から書き換えればよい。

 次のような手順になる。

# mount -t ext2 /dev/fd0 /mnt/floppy
# cp menu.lst /mnt/floppy/boot/grub/grub.conf

 作成した起動用フロッピーディスクでブートすれば,grub.confmenu.lstファイル)で設定されたメニュー項目が表示される(Fig.8)。

One Point!起動用フロッピーディスクでブートしたGRUBコマンドプロンプトから上記のコマンドを入力する以外にも,Linux上から/sbin/grubコマンドを実行するという手段もある。/sbin/grubコマンドは,GRUBコマンドプロンプトを提供するLinux上で動作するツールだ。起動すると,GRUBコマンドプロンプトが表示されるので,そこから各種GRUBコマンドを実行することができ,ブート時のメンテナンスに便利だ。

Fig.8■起動用フロッピーディスクにgrub.confmenu.lst)ファイルを置いてブートさせたところ
Fig.8

 実際,このメニュー項目は正しく動作しWindows XPとLinuxの起動を切り替えることができる。

 今回は説明しないが,メニュー項目の書き方次第でWindows以外にもFreeBSDなどのOSとデュアルブート環境にすることもできる。詳細についてはGRUBのオンラインマニュアルを参照してほしい。

4/5 NEXT