デベロッパー:Linux How-To | 2005年10月07日 01:02 更新 |
カーネルの再構築とGRUB |
従来までのLILOでは,カーネルを再構築した際,/sbin/liloコマンドを実行するか,構築時にmake bzliloとするなどして,LILOを更新する必要があった。それでは,GRUBの場合にはどのような設定が必要なのだろうか。
結論をいえば,GRUBの場合にはカーネルの再構築に際し何か特別な操作が必要となることはまったく無い。カーネル再構築時には,make bzImageなどとしてカーネルイメージ(vmlinuz(bzImage))のファイルを作成するだけでよい。
|
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 |
|
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の起動メニューの実行結果
ここでは古いカーネルを残して切り替えられるよう説明した。そうではなく,新しいカーネルを上書きして古いものはもう使わないといった場合には,GRUBの設定変更は一切必要ない。
WindowsXPとのデュアルブート |
次に,LinuxとLinux以外のOSをデュアルブートさせるための方法を説明しておこう。ここでは,LinuxとWindows XPとのデュアルブート環境を考えてみる。
次のようにハードディスクが2台あり,1台目にWindowsXP,2台目にLinuxがインストールされているとする。
|
この場合,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.conf(menu.lstファイル)で設定されたメニュー項目が表示される(Fig.8)。
|
Fig.8■起動用フロッピーディスクにgrub.conf(menu.lst)ファイルを置いてブートさせたところ
実際,このメニュー項目は正しく動作しWindows XPとLinuxの起動を切り替えることができる。
今回は説明しないが,メニュー項目の書き方次第でWindows以外にもFreeBSDなどのOSとデュアルブート環境にすることもできる。詳細についてはGRUBのオンラインマニュアルを参照してほしい。
4/5 |