Linux の 101 試験対策: ブート・マネージャー

GRUB と LILO の紹介

Linux® システムのブート・マネージャーを選択する方法、そして選択したブート・マネージャーを構成する方法を学んでください。この記事の内容は、Linux のシステム管理者として認定するための LPI 101 試験に備えるためにも、自ら活用するために学ぶ上でも役立ちます。

Ian Shields, Senior Programmer, IBM

Ian ShieldsIan Shields は、developerWorks Linux ゾーンの様々な Linux プロジェクトに関わっています。彼はノースキャロライナ州 Research Triangle Park にある IBM のシニア・プログラマーです。1973年にオーストラリアのキャンベラでシステム・エンジニアとして IBM に入社して以来、カナダのモントリオールやノースキャロライナ州 Research Triangle Park で、コミュニケーション・システムやパーベイシブ・コンピューティングに携わってきました。彼はいくつかの特許を保持しています。Australian National University にて純粋数学および哲学で学位を取得し、また North Carolina State University にてコンピューター・サイエンスで修士号と博士号を取得しています。Ian について詳しく知るには、My developerWorks で彼のプロフィールを見てください。


developerWorks 貢献著者レベル

2010年 4月 13日

この連載について

この連載は Linux システム管理タスクの学習に役立つだけでなく、LPIC-1 (Linux Professional Institute Certification レベル 1) 試験に備えるための教材にもなります。

連載の各記事についての説明とリンクについては、developerWorks の LPIC-1 ロードマップを参照してください。現在進行中のこのロードマップは、LPIC-1 試験の最新の目標 (2009年 4月) を反映しています。完成した記事はその都度ロードマップに追加されていきますが、当面は developerWorks の LPI 認定試験対策チュートリアルで同様の教材の以前のバージョンを調べてください。これらのバージョンは、2009年 4月より前の LPIC-1 目標に対応しています。

概要

この記事では、Linux システムのブート・マネージャーを選択する方法、そしてブート・マネージャーをインストールして構成する方法を学びます。この記事で説明する内容は以下のとおりです。

  • 複数のブート・ロケーションを構成し、ブートの選択肢をバックアップする方法
  • GRUB や LILO などのブート・ローダーをインストールして構成する方法
  • ブート・パラメーターを追加する方法、またはブート時にブート・ローダー・コマンドを実行する方法
  • よくあるブート関連の問題からリカバリーする方法
  • GRUB Legacy を使用して GRUB 2 システムをブートする方法

PC のブート・プロセス、そして Linux で使用されている 2 つの主要なブート・ローダー、LILO と GRUB について説明するこの記事は、Linux Professional Institute の Junior Level Administration (LPIC-1) 101 試験の主題 102 の 102.2 の試験対策に役立ちます。また、現在のところは試験対象とはなっていませんが、GRUB 2 についても紹介します。この記事が対象としている試験の目標は、重要度が 2 に設定されています。

前提条件

この連載の記事を最大限に活用するには、Linux の基礎知識と、記事に記載されたコマンドを演習できる実際の Linux システムが必要です。また、記事「Linux の 101 試験対策: ハード・ディスクのレイアウト」で説明しているハード・ディスク・ドライブのレイアウトについて、十分に理解している必要もあります。プログラムのバージョンによって出力のフォーマットに違いが出てくる場合もあるため、コマンドの実行結果は必ずしもここに記載するリストや図とまったく同じであるとは限りません。

注: この記事に記載する画像は、ブート・プロセスの初期段階で撮ったスクリーン・キャプチャーです。スクリーン・リーダーを使ってこの記事を読んでいる場合は、対応する構成ファイルを参照用に準備しておくと役立ちます。参照用の構成ファイルは、記事の終わりの「ダウンロード」セクションからダウンロードすることができます。


ブート・プロセスの概要

Ian とつながるには

Ian は developerWorks で人気の高いお馴染みの著者の 1 人です。Ian が書いたすべての developerWorks 記事を閲覧してみてください。また、My developerWorks では、Ian のプロフィールを調べることや、彼やその他の著者、そして他の読者とつながることができます。

LILO と GRUB の詳細に入る前に、PC が起動 (つまり、ブート) する仕組みを復習しておきましょう。ROM、EEPROM、あるいはフラッシュ・メモリーなどの不揮発性メモリーには、BIOS (Basic Input Output Service) と呼ばれるコードが格納されています。このコードは、PCの電源を入れたとき、あるいは PC をリブートすると実行されます。通常、BIOS は電源投入時自己診断テスト (Power-On Self Test、略称 POST) を行ってマシンをチェックします。そして最後に、ブート・ドライブ上のマスター・ブート・レコード (Master Boot Record、略称 MBR) から 1 番目のセクターをロードします。

記事「Linux の 101 試験対策: ハード・ディスクのレイアウト」で説明したように、MBR にはパーティション・テーブルも含まれているため、MBR 内に格納される実行可能コードのサイズは 512 バイト未満と、それほど大きくありません。すべてのディスク (フロッピー・ディスクも含む) の実行可能コードは MBR に格納されることに注意してください。実行可能コードが「Non-bootable disk in drive A: (ドライブ A のディスクはブート可能なディスクではありません)」のようなメッセージを出力することしかできないほどのサイズであっても、このことに変わりはありません。BIOS が 1 番目のセクターからロードするこのコードは、「第 1 ステージ・ブート・ローダー」、あるいは「ステージ 1 ブート・ローダー」と呼ばれます。

MS-DOS、PC DOS、そして Windows® オペレーティング・システムが使用する標準的なハード・ディスクの MBR は、パーティション・テーブルを調べて、アクティブとしてマークが付けられたブート・ドライブのプライマリー・パーティションを見つけます。そしてそのパーティションから最初のセクターをロードし、ロードしたコードの先頭に制御を渡します。この新しいコードは、「パーティション・ブート・レコード」としても知られています。パーティション・ブート・レコードは、実際にはもう 1 つのステージ 1 ブート・ローダーですが、これにはパーティションからブロック一式をロードするだけのインテリジェンスしかありません。この新しいブロック一式に格納されているコードは、「ステージ 2 ブート・ローダー」と呼ばれます。ステージ 2 ブート・ローダーは MS-DOS および PC DOS で使用されることから、そのまま直接、オペレーティング・システムの残りの部分をロードします。これが、オペレーティング・システムが自ら起動して、稼働状態になる仕組みです。

上記のプロセスは、オペレーティング・システムが 1 つしかないシステムには問題なく上手くいきますが、複数のオペレーティング・システムを使用するとしたらどうなるでしょうか。例えば、OS/2、Windows XP、そして 3 つの異なる Linux ディストリビューションを使用する場合を考えてみてください。この場合、何らかのプログラム (DOS FDISK プログラムなど) を使用してアクティブ・パーティションを変更し、リブートするという方法もありますが、それでは厄介です。さらに、ディスク上に作成できるプライマリー・パーティションは 4 つまでです。その上、標準的な MBR が管理できるアクティブなプライマリー・パーティションは 1 つだけで、論理パーティションからのブートには対応することができません。けれども、この仮説の例で引用しているオペレーティング・システムは 5 つあり、そのそれぞれにパーティションが必要です。

この問題を解決するには、特殊なコードを使用して、ブート対象のオペレーティング・システムをユーザーが選択できるようにします。特殊なコードとは、例えば以下のプログラムのことです。

Loadlin
実行中の DOS システムから Linux パーティションをブートするために呼び出される DOS 実行可能プログラム。マルチブート・システムのセットアップが複雑で危険なプロセスであった頃に、よく使われていました。
OS/2 Boot Manager
小さなサイズの専用パーティションにインストールするプログラム。このプログラムがインストールされたパーティションにはアクティブのマークが付けられ、標準的な MBR ブート・プロセスが OS/2 Boot Manager を起動すると、ブートするオペレーティング・システムを選択できるメニューが表示されます。
スマート・ブート・ローダー
オペレーティング・システムのパーティションに常駐可能なプログラムで、アクティブ・パーティションのパーティション・ブート・レコード、またはマスター・ブート・レコードのいずれかから呼び出されます。スマート・ブート・ローダーの例には以下のものがあります。
  • BootMagic: Norton PartitionMagic に含まれています
  • LILO (LInux LOader)
  • GRUB (GRand Unified Boot loader): 現在 GRUB Legacy と呼ばれています
  • GRUB 2: 共通ディストリビューションに最近登場するようになった新しいブート・ローダー

システムの制御を 512 バイトより大きなコードのプログラムに渡すことができれば、論理パーティションから、あるいはブート・ドライブ上にはないパーティションからブートするのも不可能な話でないのは明らかです。上記のソリューションはいずれも、そうしたことが可能です。そのような形でのブートが実現可能なのは、これらのソリューションが任意のパーティションからブート・レコードをロードできるため、あるいはブート・プロセスを開始するためにロードするファイルを理解できるためです。

チェーン・ロード

ブート・マネージャーが制御を受け取ったときに、別のブート・マネージャーをロードする可能性もあります。ブート・マネージャーが別のブート・マネージャーをロードすることを、チェーン・ロードと呼びます。チェーン・ロードが最もよく行われるのは、マスター・ブート・レコード (MBR) に位置するブート・マネージャーが、パーティション・ブート・レコードにあるブート・ローダーをロードする場合です。Linux ブート・ローダーが Windows または DOS のパーティションをブートするように指示されると、ほぼ必ずと言っていいほどチェーン・ロードが行われます。また、あるシステムの Linux ブート・ローダーが別のシステムのブート・ローダーをロードするように指示されたときにチェーン・ロードが行われることもあります。例えば、あるパーティションの LILO を使用して、別のパーティションの Linux システムを起動するために、そのパーティションのブート・レコードにある LILO を起動する場合です。

Linux のブート・ローダー

ここからは、ほとんどの Linux ディストリビューションに付属している 2 つのブート・ローダー、LILO と GRUB に話題を絞ります。LILO は以前から使われているブート・ローダーで、GRUB はその後に登場しました。当初の GRUB は現在、GRUB Legacy と呼ばれるようになっています。これは、GRUB 2 の開発が Free Software Foundation の主導の下に進んでいるためです (詳細は「参考文献」を参照)。この記事では GRUB 2 についても簡単に説明します。その主な理由は、GRUB と GRUB 2 との主な違いと、GRUB と GRUB 2 がどのようにして共存できるかを理解してもらうためです。記事では以降、明確に GRUB 2 を意味するコンテキストを除き、GRUB と表記する場合は GRUB Legacy を意味することを前提とします。LILO でもまた、ELILO という新しいバージョンが使用できるようになっています (ELILO は、BIOS ではなく Intel の EFI (Extensible Firmware Interface) を使用するシステムのブート用に設計されています)。GRUB 2 および ELILO についての詳細は、「参考文献」を参照してください。

ディストリビューションのインストール・プロセスでは、どのブート・ローダーをセットアップするかを選択できるはずです。GRUB または LILO は最近のほとんどのディスクで動作しますが、Fedora をはじめ、一部のディストリビューションには LILO が付属しなくなっています。ディスク技術は急速に進歩していることを念頭に置いて、選択するブート・ローダー、選択する Linux ディストリビューション (またはその他のオペレーティング・システム)、さらには使用しているシステム BIOS が最新のディスクで動作することを必ず確認してください。この確認を怠ると、データを失うことになりかねません。同様に、新しいディストリビューションを既存のシステムに追加する場合には、MBR の LILO または GRUB が最新のものであることを確認してください。さらに、LVM または RAID ディスクからブートすることを予定しているとしたら、かなり新しいバージョンの GRUB または LILO が必要です。

LILO と GRUB で使用されているステージ 2 ローダーでは、ロードする対象を複数のオペレーティング・システムまたはバージョンから選択することができます。ただし、LILO と GRUB は、システムに対する変更を行う際の操作に大きな違いがあります。LILO の場合、カーネルのアップグレードなどといったシステムに対する特定の変更を行うときには、常にコマンドを使用して LILO ブート・セットアップを作成し直さなければなりません。一方、GRUB では構成ファイルのテキストを編集することで、システムに対する変更を行います。また、GRUB 2 でもシステムに対する変更を行うには、構成ファイル (通常 /etc に格納されています) を再作成する必要があります。


LILO

LILO (LInux LOader) は、最もよく使われている 2 つの Linux ブート・ローダーのうちの 1 つです。LILO は、ブート可能なハード・ディスクの MBR や、パーティションのパーティション・ブート・レコードにインストールすることができます。あるいはフロッピー・ディスク、CD、USB キーなどのリムーバブル・デバイスにインストールしても構いません。LILO を使い慣れていない場合は、この記事の例と同じように、フロッピー・ディスクや USB キーにインストールするのが得策です。

Linux のインストール時には、LILO または GRUB のどちらかをブート・マネージャーとして指定することになるのが通常です。GRUB を選択すると、LILO はインストールされないので、インストール済みの LILO がなければ、LILO パッケージをインストールしてください。また、lilo-doc パッケージをインストールすると、ドキュメントとサンプル・コードを追加することができます。この後の説明では、LILO パッケージがすでにインストールされていることを前提とします。パッケージ管理についてのヘルプが必要な場合には、連載のロードマップでパッケージ管理に関する記事を調べてください。

LILO を構成するには、通常、構成ファイル /etc/lilo.conf を使用します。liloconfig コマンド (通常は /usr/sbin にあります) によってベースとなる構成ファイルを生成できるので、このファイルを必要に応じて編集するという方法を使えます。リスト 1 に記載する構成ファイルは、この方法で生成されたものです。生成されたファイルには十分な注釈が付けられています。また、lilo および lilo.conf の man ページにはさらに詳しい説明も記載されています。以下のファイルは、Windows と 1 つ以上の Linux システムからなるデュアル・ブート・システムで使われるような典型的な LILO 構成ファイルです。

リスト 1. /etc/lilo.conf の例
# Originally generated by liloconfig - modified by Ian Shields

# This allows booting from any partition on disks with more than 1024
# cylinders.
lba32

# Specifies the boot device (floppy)
boot=/dev/fd0

# Specifies the device that should be mounted as root.
# If the special name CURRENT is used, the root device is set to the
# device on which the root file system is currently mounted. If the root
# has been changed with  -r , the respective device is used. If the
# variable ROOT is omitted, the root device setting contained in the
# kernel image is used. It can be changed with the rdev program.
root=/dev/sda7

# Bitmap configuration for /boot/coffee.bmp
bitmap=/boot/coffee.bmp
bmp-colors=12,,11,15,,8
bmp-table=385p,100p,1,10
bmp-timer=38,2,13,1

# Enables map compaction:
# Tries to merge read requests for adjacent sectors into a single
# read request. This drastically reduces load time and keeps the map
# smaller. Using COMPACT is especially recommended when booting from a
# floppy disk.
compact

# Install the specified file as the new boot sector.
# LILO supports built in boot sectors, you only need
# to specify the type, choose one from 'text', 'menu' or 'bitmap'.
# new: install=bmp      old: install=/boot/boot-bmp.b
# new: install=text     old: install=/boot/boot-text.b
# new: install=menu     old: install=/boot/boot-menu.b or boot.b
# default: 'menu' is default, unless you have a bitmap= line
# Note: install=bmp must be used to see the bitmap menu.
# install=menu
install=bmp

# Specifies the number of _tenths_ of a second LILO should
# wait before booting the first image.  LILO
# doesn't wait if DELAY is omitted or if DELAY is set to zero.
# delay=20

# Prompt to use certain image. If prompt is specified without timeout,
# boot will not take place unless you hit RETURN. Timeout is in tenths of
# a second.
prompt
timeout=200

# Enable large memory mode.
large-memory

# Specifies the location of the map file. If MAP is
# omitted, a file /boot/map is used.
map=/boot/map

# Specifies the VGA text mode that should be selected when
# booting. The following values are recognized (case is ignored):
#   NORMAL  select normal 80x25 text mode.
#   EXTENDED  select 80x50 text mode. The word EXTENDED can be
#     abbreviated to EXT.
#   ASK  stop and ask for user input (at boot time).
#   <number>  use the corresponding text mode. A list of available modes
#     can be obtained by booting with  vga=ask  and pressing [Enter].
vga=normal

# Defines non-standard parameters for the specified disk.
#disk=/dev/sda
#	bios=0x80

# If you are using removable USB drivers (with mass-storage)
# you will need to tell LILO to not use these devices even
# if defined in /etc/fstab and referenced in /proc/partitions.
# Adjust these lines to your devices:
#
# disk=/dev/sda inaccessible
# disk=/dev/sdb inaccessible

# These images were automagically added. You may need to edit something.

image=/boot/vmlinuz-2.6.31-14-generic
	label="Lin 2.6.31-14"
	initrd=/boot/initrd.img-2.6.31-14-generic
	read-only

image=/boot/vmlinuz-2.6.31-20-generic
	label="Lin 2.6.31-20"
	initrd=/boot/initrd.img-2.6.31-20-generic
	read-only

image=/boot/memtest86+.bin
	label="Memory Test+"
	read-only

# If you have another OS on this machine (say DOS),
# you can boot if by uncommenting the following lines
# (Of course, change /dev/sda1 to wherever your DOS partition is.)
other=/dev/sda6
        label="Fedora 8"

 other=/dev/sda1
   label="Windows XP"

構成をテストする方法としては、ブート用フロッピーを作成します。ファイルの先頭近くに boot=/dev/fd0 と指定してあるのはそのためです。また、プロンプトのタイムアウトを 20 秒に延長し (10分の1 秒×200)、チェーン・ロードによって Fedora 8 パーティション (/dev/sda6) 上のブート・ローダーを呼び出せるように 2 つ目のエントリー「other」を追加しました。LILO では構成ファイルに 1 つの root コマンドしか設定できないため、ルート・パーティションから複数のイメージをブートすることができますが、異なるシステム (この例では Fedora 8 (/dev/sda6) や Windows XP (/dev/sda1)) のイメージをブートするには、チェーン・ロードによって別のブート・ローダーを呼びださなければなりません。

lilo コマンド (/sbin/lilo に配置) を使用してステージ 1 のブート・レコードを書き込み、上記の例にあるような構成情報 (通常は /etc/lilo.conf の中に記述されています) を使ってマップ・ファイル (/boot/map) を作成します。この他の補助コマンドの使用方法については、後で説明します。

これで、ext2 などの Linux ファイルシステムでフロッピー・ディスクをフォーマットすれば、lilo コマンド (/sbin/lilo) を実行することによってブート可能なフロッピー・ディスクを作成することができます。リスト 2 にこのコマンドの出力を記載します。lilo コマンドには、5 つの冗長レベルがあることに注意してください。レベルごとに、-v を追加して指定します。この出力例は、lilo -v -v を使用して作成しました。

リスト 2. lilo によるブート可能なフロッピー・ディスクの作成
LILO version 22.8, Copyright (C) 1992-1998 Werner Almesberger
Development beyond version 21 Copyright (C) 1999-2006 John Coffman
Released 19-Feb-2007, and compiled at 10:52:38 on Aug 25 2009
Running Linux kernel 2.6.31-14-generic on i686
Ubuntu

raid_setup returns offset = 00000000  ndisk = 0
 BIOS   VolumeID   Device
Reading boot sector from /dev/fd0
pf_hard_disk_scan: ndevs=1
  0800  54085408  /dev/sda
device codes (user assigned pf) = 0
device codes (user assigned) = 0
device codes (BIOS assigned) = 1
device codes (canonical) = 1
mode = 0x03,  columns = 80,  rows = 25,  page = 0
Using BITMAP secondary loader
Calling map_insert_data
Secondary loader: 19 sectors (0x3800 dataend).
Warning: The boot sector and map file are on different disks.
bios_boot = 0x00  bios_map = 0x80  map==boot = 0  map S/N: 54085408
Mapping bitmap file /boot/coffee.bmp
Calling map_insert_file
Compaction removed 592 BIOS calls.
Bitmap: 603 sectors.
BIOS data check was okay on the last boot

Boot image: /boot/vmlinuz-2.6.31-14-generic
Setup length is 26 sectors.
Compaction removed 7452 BIOS calls.
Mapped 7601 sectors.
Mapping RAM disk /boot/initrd.img-2.6.31-14-generic
Compaction removed 14696 BIOS calls.
RAM disk: 14930 sectors.
Added Lin_2.6.31-14 *

Boot image: /boot/vmlinuz-2.6.31-20-generic
Setup length is 26 sectors.
Compaction removed 7468 BIOS calls.
Mapped 7617 sectors.
Mapping RAM disk /boot/initrd.img-2.6.31-20-generic
Compaction removed 14704 BIOS calls.
RAM disk: 14938 sectors.
Added Lin_2.6.31-20

Boot image: /boot/memtest86+.bin
Setup length is 4 sectors.
Compaction removed 243 BIOS calls.
Mapped 254 sectors.
Added Memory_Test+

Boot other: /dev/sda6, loader CHAIN
Pseudo partition start: 43198848
Compaction removed 0 BIOS calls.
Mapped 6 (4+1+1) sectors.
Added Fedora_8

Boot other: /dev/sda1, on /dev/sda, loader CHAIN
Compaction removed 0 BIOS calls.
Mapped 6 (4+1+1) sectors.
Added Windows_XP

 BIOS   VolumeID   Device
  80    54085408    0800
Writing boot sector.
/boot/boot.0200 exists - no boot sector backup copy made.
Map file size: 336896 bytes.
RAID device mask 0x0000
One warning was issued.

これで、ブート可能な LILO フロッピー・ディスクが用意できました。LILO がエラーを検出した場合には、エラー・メッセージが表示され、ブート・セクターは書き込まれません。何を修正する必要があるかは、メッセージを読むとわかります。

上記で作成したフロッピーを使ってマシンをリブートすると、図 1 に示すようなプロンプトが表示されます。画面最上部に示されているカウントダウン・タイマーに注目してください。これは、20 秒 (10分の1 秒×200) からカウントダウンしていきます。20 秒以内に項目が選択されないと、強調表示された選択項目 (先頭に記載されている項目。この例の場合は Lin_2.6.31-14) が自動的にブートされます。

図 1. LILO ブート画面
LILO ブート画面のスクリーン・キャプチャー。最初の選択項目が強調表示され、カウントダウン・タイマーの値が残り 14 秒となっています。

選択項目リストでは、矢印キーを使って、強調表示される項目を上下に移動させることで、ブート対象を選択します。図 2 に、最初の選択項目よりも新しい、上から 2 番目に表示されている Lin_2.6.31-20 カーネルを選択する様子を示します。この図では、タイマーの値が表示されていないことに注意してください。Enter キーを押すと、選択したカーネルがブートされます。

図 2. LILO での別のブート・ターゲットの選択
LILO ブート画面のスクリーン・キャプチャー。この画面では別のブート・ターゲットが選択されていて (2 番目のエントリーが強調表示されています)、カウントダウン・タイマーは表示されていません。

ブート用フロッピーのテストが終わったら、lilo.conf ファイルで boot=/dev/fd0 エントリーを変更して、MBR またはパーティション・ブート・レコードに LILO をインストールしてください。例えばエントリーを boot=/dev/sda に変更すると、LILO は 1 番目のハード・ディスクのマスター・ブート・レコードにインストールされます。

LILO とその構成ファイルについての基本をおさえたところで、lilo コマンドラインから構成オプションを変更してみてください。詳細については、コマンド man lilo、または man lilo.conf を使って lilo man ページを参照するか、または lilo または lilo-doc パッケージと一緒にインストールされる PostScript ユーザー・ガイドのより包括的な情報を調べてください。このガイドはドキュメンテーション・ディレクトリーにインストールされますが、正確な配置場所はシステムによって異なります。このファイルが置かれている場所を検索するには、grep でパッケージ・リストをフィルタリングするという方法があります。リスト 3 に、この検索方法を示します。ここでの検索対象は、この例で使用してきた Debian ベースの Ubuntu 9.10 システムです。

リスト 3. dpkg による LILO ユーザー・ガイドの検索
ian@pinguino:~$ dpkg -L lilo-doc | grep "ps"
/usr/share/doc/lilo-doc/user.ps.gz
/usr/share/doc/lilo-doc/tech.ps.gz

Fedora などの RPM ベースのシステムを検索する場合、上記に対応するコマンドは rpm -ql lilo-doc | grep "ps" となります。

LILO の補助コマンド

LILO では以下の補助コマンドを使用することができます。

lilo -q
マップ・ファイルからの情報を表示します。
lilo -R
次回のリブート時にのみ、指定されたシステムを自動的にブートするように lilo を設定します。これは、リモート・システムを自動的にリブートする場合にとても便利です。
lilo -I
カーネルのパスに関する情報を表示します。
lilo -u
lilo をアンインストールして、前のブート・レコードを復元します。

LILO が Linux システムをブートする際には、ブート時の追加パラメーターを指定することもできます。例えば、グラフィカル・スタートアップが機能していないとします。この場合、リカバリーのためにモード 3 またはシングル・ユーザー・モードでブートするという方法を使えます。エントリーを選択してから TAB キーを押すと、選択したラベル名がすでに入力されたターミナル・ウィンドウが表示されます (図 3 を参照)。ラベル名の後に続けてテキストを入力すると、そのテキストがカーネルに渡されます。この例で、例えば最新の Ubuntu システムを選択するには、1 行下に移動して TAB キーを押すだけでよいのです。ただし、最初に名前を選択しなければ、ラベルに指定したとおりの完全な名前を入力しなければならなくなります。このことからわかるように、ラベルはこの例で使用しているラベルよりも簡潔にしたほうが得策です。この例の場合、Lin_2.6.31.20 と入力することになりますが、それでは手間がかかります。

図 3. LILO でのカーネル・パラメーターの追加
LILO でカーネル・パラメーターに「single」を追加した様子を示すターミナル・ウィンドウ

図 3 では、ブート・パラメーターに「single」を追加しています。これは、何らかのシステム・リカバリーを行うためにシングル・ユーザー・モードでブートすることを意味します。ブート・パラメーターの使い方についての詳細は、「リカバリー」のセクションを参照してください。

もう 1 つ注意する点として、LILO で構成ファイル (/etc/lilo.conf) を更新する場合には、必ずlilo コマンドを実行しなければなりません。また、パーティションを追加、移動、削除するなど、生成されたブート・ローダーを無効にする可能性がある変更を行った場合にも、lilo コマンドを実行する必要があります。


GRUB

最もよく使われているもう 1 つの Linux ブート・ローダーは、GRUB (GRand Unified Boot loader) です。GRUB をインストールできるのは、LILO の場合と同じく、ブート可能なハード・ディスクの MBR やパーティションのパーティション・ブート・レコード、あるいはフロッピー・ディスク、CD、USB キーなどのリムーバブル・デバイスです。GRUB を使い慣れていない場合は、この記事の例と同じように、フロッピー・ディスクや USB キーにインストールするのが得策です。

GRUB (別名 GNU GRUB) は Free Software Foundation の主導の下に開発されています。現在、新しいバージョンとして開発中の GRUB 2 が Linux ディストリビューションと一緒に配布されるようになってきていることから、元の GRUB 0.9x バージョンは、Grub Legacy と呼ばれています。

Linux のインストール時には、通常、LILO または GRUB のどちらかをブート・マネージャーとして指定することになります。LILO を選択した場合には、GRUB はインストールされません。GRUB がインストールされていない場合には、GRUB のパッケージをインストールしてください。この後の説明では、GRUB パッケージがすでにインストールされていることを前提とします。パッケージ管理についてのヘルプが必要な場合には、連載のロードマップでパッケージ管理に関する記事を調べてください。

通常、GRUB (Legacy) の構成ファイルは /boot/grub/grub.conf です。ファイルシステムがシンボリック・リンクをサポートしている場合 (ほとんどの Linux ファイルシステムではサポートしています)、/boot/grub/grub.conf へのシンボリック・リンクとして、/boot/grub/menu.lst が使われているはずです。

grub コマンド (/sbin/grub に配置。システムによっては /usr/sbin/grub に配置されている場合もあります) は小さなコードですが、GRUB のインストール、システムのブート、構成ファイルの検索および表示などといったタスクを行う複数のコマンドをサポートする強力なシェルです。このシェルの大部分のコードは第 2 ステージの GRUB ブート・ローダーのコードと共通するため、このシェルから、第 2 ステージの GRUB 環境をブートすることなく GRUB について学ぶことができて便利です。GRUB のステージ 2 はメニュー・モードまたはコマンド・モードで実行します。メニュー・モードではユーザーがメニューからオペレーティング・システムを選択できる一方、コマンド・モードでは個々のコマンドを指定してシステムをロードします。その他のコマンドとしては、grub シェルを使用して GRUB のインストールなどのタスクを自動化できるようにする grub-install などがあります。

リスト 4 に、GRUB 構成ファイルの一部を抜粋します。このコードに目を通す際には、重要な 1 つの注意事項があります。それは、GRUBは (少なくとも GRUB Legacy は)、ドライブやパーティションなど、カウントする必要のあるものを 1 からではなく 0 からカウントすることです。また、以下のリストについて注意する点として、最初のカーネルの行はかなり長いので、見やすくするためにバックスラッシュ (\) の箇所で行を分割して記載しています。

リスト 4. GRUB 構成ファイル /boot/grub/menu.lst の例
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE:  You do not have a /boot partition.  This means that
#          all kernel and initrd paths are relative to /, eg.
#          root (hd0,5)
#          kernel /boot/vmlinuz-version ro root=/dev/sda6
#          initrd /boot/initrd-version.img
#boot=/dev/sda6
default=1
timeout=10
splashimage=(hd0,5)/boot/grub/splash.xpm.gz
#hiddenmenu
password --md5 $1$RW1VW/$4XGAklxB7/GJk0uO47Srx1
title Upgrade to Fedora 11 (Leonidas)
	kernel /boot/upgrade/vmlinuz preupgrade \ 
      repo=hd::/var/cache/yum/preupgrade stage2=\
      hd:UUID=8b4c62e7-2022-4288-8995-5eda92cd149b:/boot/upgrade/install.img \
      ks=hd:UUID=8b4c62e7-2022-4288-8995-5eda92cd149b:/boot/upgrade/ks.cfg
	initrd /boot/upgrade/initrd.img
title Fedora (2.6.26.8-57.fc8)
	root (hd0,5)
	kernel /boot/vmlinuz-2.6.26.8-57.fc8 ro root=LABEL=FEDORA8 rhgb quiet
	initrd /boot/initrd-2.6.26.8-57.fc8.img
title Fedora (2.6.26.6-49.fc8)
	root (hd0,5)
	kernel /boot/vmlinuz-2.6.26.6-49.fc8 ro root=LABEL=FEDORA8 rhgb quiet
	initrd /boot/initrd-2.6.26.6-49.fc8.img
title GRUB Menu
	rootnoverify (hd0,1)
	chainloader +1
title Windows
	rootnoverify (hd0,0)
	chainloader +1

LILO 構成ファイルと同じく、GRUB の動作を制御するのは、上記に示されている最初のオプションのセットです。GRUB では、これらのオプションはメニュー・コマンドと呼ばれ、他のコマンドより前に置かれていなければなりません。残りのセクションにあるのは、GRUB でブートできるようにしたいオペレーティング・システムのイメージごとのオプションです。注意する点として、「title」はメニュー・コマンドと見なされます。title の各インスタンスの後には、1 つ以上の一般コマンドまたはメニュー・エントリー・コマンドが続きます。前のセクションで記載した LILO 構成ファイルの例は、Windows と 2 つの Linux システムで構成されるデュアル・ブート・システムの典型的な基本例でした。上記の例も、これと同じシステムを使用しています。実際、これは LILO メニューの「Fedora 8」エントリーからチェーン・ロードされるブート・メニューです。LILO 構成ファイルと GRUB 構成ファイルを見ると、この 2 つのファイルには同じような要素が数多くあることがわかります。そこで、前に記載した LILO の例に、上記の例に記載されているオペレーティング・システムを追加するとしたら、何を変更しなければならないかを考えてみるとよいでしょう。

上記の例で他のすべてのセクションに適用されるメニュー・コマンドは以下のとおりです。

#
# で始まる行はコメントなので、GRUB はこの行を無視します。上記の構成ファイルは、元々 Red Hat インストーラーの anaconda によって生成されました。Linux のインストール時に GRUB をインストールすると、GRUB 構成ファイルにコメントが追加されるはずです。これらのコメントは多くの場合、システム・アップグレード・プログラムの助けとなり、アップグレードされたカーネルで GRUB 構成を最新状態に維持するのに役立ちます。構成ファイルを自分で編集する際には、この目的で残されているマーカーに注意してください。
default
タイムアウトになるまでにユーザーが選択を行わなかった場合にロードするシステムを指定します。上記の例では、default=2 を指定すると 3 番目のエントリーがロードされます。前述したように、GRUB は 1 からではなく、0 からカウントするためです。値を指定しない場合、デフォルトで最初のエントリー (エントリー番号 0) がブートされます。
timeout
デフォルト・エントリーをブートするまでのタイムアウトの秒数を指定します。LILO ではタイムアウトの単位として 10分の1 秒を使用しますが、GRUB では 1 秒単位でタイムアウトを指定することに注意してください。
splashimage
ブート・メニューで表示される背景 (スプラッシュ) 画像を指定します。GRUB Legacy は 1 番目のハード・ディスクを (hd0) として参照し、そのドライブの 1 番目のパーティションを (hd0,0) として参照します。したがって、例えば splashimage=(hd0,6)/boot/grub/splash.xpm.gz と指定すると、1 番目のハード・ディスクのパーティション 7 にある /boot/grub/splash.xpm.gz ファイルが使用されます。カウントは 0 から始まること、そしてイメージは gzip で圧縮された XPM ファイルであることに注意してください。splashimage のサポートはパッチであり、ディストリビューションに組み込まれている場合もあれば、組み込まれていない場合もあります。
password
ユーザーがメニューのロックを解除するために入力しなければならないパスワードを指定し、このパスワードを入力しなければ、ユーザーが構成行を編集したり、GRUB コマンドを入力したりできないようにします。LILO の場合と同じく、パスワードは平文にすることができますが、GRUB の場合には、この例で行っているように、パスワードを MD5 ダイジェストとして保管することもできます。パスワードを設定したほうがセキュアであるため、ほとんどの管理者はパスワードを設定します。パスワードを設定しない場合、ユーザーは GRUB コマンドラインにフル・アクセスできることになります。

上記の例には、2 つの Fedora 8 カーネルと Fedora 11 へのアップグレード・オプションに加え、Windows XP、そしてチェーン・ロードされた「GRUB Menu」のオプションが示されています。これらのセクションで使用されているコマンドには、以下のものがあります。

title
GRUB のブート時にメニュー項目として表示される説明的なタイトルです。タイトル・リストを上下に移動するには矢印キーを使用し、特定のエントリーを選択するには Enter キーを押します。
root
ブートするパーティションを指定します。splashimage の場合と同じく、カウントは 0 から始まるため、ルートとして指定された最初の Red Hat システム (hd0,6) は、実際には 1 番目のハード・ディスクのパーティション 7 (この例では /dev/hda7) に位置し、ルートとして指定された最初の Ubuntu システム (hd1,10) は 2 番目のハード・ディスク (/dev/hdb11) に位置します。GRUB はこの指定されたパーティションをマウントしてチェックし、場合によっては、ブートされたオペレーティング・システムに値を提供します。
kernel
ロードするカーネル・イメージと、必要なカーネル・パラメーターを指定します。これは、LILO イメージと追加コマンドの組み合わせに似ています。この例には、2 つの異なる Fedora 8 カーネルに加え、アップグレード・カーネルがあります。
initrd
初期 RAM ディスクの名前です。ここに、ファイルシステムがマウントされる前にカーネルに必要となるモジュールが含まれています。
savedefault
上記の例では使用されていませんが、メニュー・コマンド default=saved が指定されていて、オペレーティング・システムに savedefault コマンドが指定されている場合、そのオペレーティング・システムをブートすると、savedefault が指定された別のオペレーティング・システムがブートされるまで、そのオペレーティング・システムがデフォルトとなります。この例では default=2 の指定が、保存されたデフォルトをすべて上書きします。
boot
GRUB に対し、選択したオペレーティング・システムをブートするように指示するオプション・パラメーターです。オペレーティング・システムのブートは、選択項目に対するコマンドがすべて処理された時点でのデフォルト・アクションです。
lock
上記の例では使用されていませんが、このコマンドを使用すると、パスワードが入力されるまでは指定されたエントリーがブートされません。このコマンドを使用する場合には、初期オプションにパスワードを指定してください。パスワードを指定しないと、ユーザーがロック・オプションを編集してシステムをブートしたり、別のエントリーのいずれかに「single」を追加したりする可能性があります。必要であれば、個々のエントリーに異なるパスワードを指定することもできます。
rootnoverify
root と同様ですが、このコマンドの場合、GRUB はファイルシステムのマウントを試行しません。また、ファイルシステムのパラメーターを検証することもしません。このコマンドは通常、GRUB でサポートされていないファイルシステム (NTFS など) に使用されます。また、例えば異なる構成ファイルにアクセスしたり、前のブート・ローダーをリロードしたりするために、GRUB にハード・ディスク上のマスター・ブート・レコードをロードさせたい場合にも、このコマンドを使用することがあります。
chainloader
ステージ 1 のファイルとしてロードする別のファイルを指定します。値「+1」は「0+1」に相当します。これは、セクター 0 から、1 つのセクターをロードすることを意味します。つまり、root または rootnoverify で指定されたデバイスから 1 番目のセクターをロードするということです。

これで、典型的な /boot/grub/grub.conf (または /boot/grub/menu.lst) ファイルの内容について理解できたはずです。上記の他にも、GRUB にはブート・プロセスを詳細に制御するコマンドや、GRUB のインストールや他のタスクを支援するコマンドが多数あります。これらのコマンドについての詳細を学ぶには、GRUB マニュアルを参照してください。このマニュアルをシステムで開くには、info grub コマンドを使用します。

GRUB 構成ファイルが用意できたところで、この構成ファイルをテストするためにブート用フロッピーを作成します。それには grub-install コマンドを使用するのが最も簡単な方法です (リスト 5 を参照)。GRUB をフロッピーまたはパーティションにインストールする場合には、まず初めにデバイスをアンマウントしてください。GRUB をハード・ディスクの MBR にインストールするとしたら、その必要はありません。この場合、パーティション (/dev/sda1、/dev/sda2 など) だけをマウントするのであって、ハード・ディスクごと (/dev/sda) をマウントするわけではないからです。

リスト 5. フロッピーへの GRUB のインストール
[root@pinguino ~]# grub-install /dev/fd0
Installation finished. No error reported.
This is the contents of the device map /boot/grub/device.map.
Check if this is correct or not. If any of the lines is incorrect,
fix it and re-run the script `grub-install'.

(fd0)	/dev/fd0
(hd0)	/dev/sda

: /dev/fd0 の代わりに GRUB デバイス名 (fd0) を使用することもできますが、デバイス名を使用する場合には、シェルが括弧を解釈しないように、名前を引用符で囲む必要があります (例: grub-install '(fd0)')。

GRUB がディスク (fd0、hd0、hd1) の内部ビューをどのように Linux ビュー (/dev/fd0、/dev/sda、/dev/sdb) に対応させているのかは、デバイス・マップを見るとわかります。1 つか 2 つの IDE ハード・ディスク、さらに場合によってはフロッピー・ディスクで構成されたシステムでは、このマッピングは多分正しいはずですが、デバイス・マップがすでに存在する場合には、GRUB は詳細な探査を行わずに既存のデバイス・マップを再度利用します。単純に新しいドライブを追加しただけの場合、新しいデバイス・マップを強制的に生成させるには、grub-install コマンドに --recheck オプションを追加してください。リスト 6 に示すようなメッセージが表示されることもありますが、この場合も同じく --recheck オプションを grub コマンドに追加して、使用可能なデバイスを GRUB に探査させ、デバイス・マップを再編させます。

リスト 6. フロッピーへの GRUB のインストール
[root@pinguino ~]# grub-install /dev/fd0
/dev/fd0 does not have any corresponding BIOS drive.

空のフロッピーから始めた場合、そのフロッピーをマウントしても、フロッピーは相変わらず空の状態として表示されます。その理由は、GRUB はカスタマイズされたステージ 1 ローダーをディスクの 1 番目のセクターに書き込みましたが、この操作の結果はファイルシステムには現れないためです。このステージ 1 ローダーが、ハード・ディスクからステージ 2 ローダーと構成ファイルをロードすることになります。フロッピーからブートしてみると、ほんのわずかな IO アクティビティーが行われてからメニューが表示されるはずです。LILOの場合と同じく、異なるブート・ターゲットを選択するには上矢印と下矢印を使用します。

図 4. GRUB を使用したブート
異なるブート・ターゲットが示されたターミナル・ウィンドウ

ブート用フロッピーのテストが完了したら、ハード・ディスクの MBR に GRUB をインストールする準備は万端です。最初の IDE ハード・ディスクに対しては、以下のコマンドを使ってインストールします。
grub-install /dev/sda
または
grub-install '(hd0)'

パーティション 11 のパーティション・ブート・レコードにインストールするには、以下のコマンドを使用します。
grub-install /dev/sda11
または
grub-install '(hd0,10)'

GRUB は 0 からカウントすることを思い出してください。

LILO と同じく、ブート・パラメーターを追加することもできます。実際、GRUB 構成にあるコマンドはいずれも編集可能です。さらに、ブート時に別の構成ファイルをロードすることさえできます。パスワードを指定した場合には、p コマンドを入力してからパスワードを入力してください。その後、エントリーを選択し、e コマンドを入力して編集に取り掛かります。編集する行を選択したら、もう一度 e コマンドを入力します。そして新しい文字を入力するか、既存の文字を消去して行を編集した後、Enter キーを押し メニューに戻ります。変更後の値でシステムをブートするには、b コマンドを入力します。図 5 に示しているのは、以上のプロセスのうち、コマンドを編集する段階です。ここでは、シングル・ユーザー・モードでブートするために、「single」パラメーターをカーネル・ステートメントに追加しています。

図 5. GRUB によるシングル・ユーザー・モードでのブート
コマンドの編集段階を示すターミナル・ウィンドウ

システムの更新

ほとんどのディストリビューションには、システムを更新するためのツールが用意されています。これらのツールは通常、使用中のブート・ローダーを認識します。さらに、構成ファイルを自動的に更新することも珍しくありません。そのため、独自のカスタム・カーネルをビルドする場合、あるいは構成ファイルを標準以外の名前またはロケーションで使用する場合には、構成ファイルを自分で更新しなければならないこともあります。

  • LILO を使用する場合、構成ファイルの更新や、あるいはハード・ディスクの追加やパーティションの削除などの変更を行う際には必ずlilo コマンドを実行しなければなりません。
  • 一方、GRUB では、/boot/grub/grub.conf ファイルを編集することで、構成を変更することができます。変更後にリブートすると、GRUB のステージ 2 ローダーがこの構成ファイルを読み取ります。新しいカーネルを追加したという理由だけで、GRUB を再インストールしなければならないことは通常ありませんが、パーティションを移動した場合、またはドライブを追加した場合には、GRUB の再インストールが必要です。前述したように、ステージ 1 ローダーは非常に小さく、ステージ 2 ローダーのブロック・アドレスのリストしかありません。パーティションを移動したり、アドレスを変更したりすると、ステージ 1 はステージ 2 を検出することができなくなります。次のセクションではリカバリー戦略を取り上げるとともに、GRUB のステージ 1.5 ローダーについて説明します。
  • 複数の Linux システムを異なるパーティションで実行している場合には、以下に説明するブート・パーティションの使用を検討してください。

リカバリー

ここからは、慎重に準備したブート・セットアップでも起こり得る問題について検討します。特に、複数のオペレーティング・システムをインストールしてブートするときには問題が起こりがちです。第一に念頭に置くべき点として、問題が起こっても、すぐにパニックに陥らないでください。通常、わずかなステップ数を踏むだけでリカバリーすることができます。ここで説明する戦略は、さまざまなタイプの難局を切り抜けるのに役立つはずです。

マシンに物理アクセスできることは、とても強力です。同様に、GRUB コマンドラインにアクセスできるということは、実行中のシステムが指定する所有権やその他のセキュリティー設定とは関係なく、システム上のファイルにアクセスできるということです。ブート・ローダーを選択するときには、以上の点を覚えておいてください。LILO と GRUB のどちらを選択するかは、主に個人の好みの問題なので、特定のニーズと作業スタイルに最適なローダーを選択してください。

別のインストールによって MBR が使用できなくなった場合

別のオペレーティング・システムをインストールしたことによって、誤って MBR を上書きしてしまうことがあります。DOS や Windows など、一部のシステムは常に固有の MBR をインストールします。通常、この問題からリカバリーするのは非常に簡単です。lilo を実行するたびに、または GRUB を再インストールするたびにブート用フロッピーを作成することが習慣になっていれば、間違いなくリカバリーすることができます。その場合、フロッピーから Linux システムにブートして、lilo または grub-install を再実行するだけでよいのです。

ブート用フロッピーはあいにく手元にないけれども、ほとんどすべての Linux ディストリビューションがまだ使用できる状態であれば、通常はリカバリー・モードで Linux インストール・メディアをブートすることができます。この場合、ハード・ディスク上のルート・ファイルシステムは通常とは異なるリカバリー・ポイントにマウントされるか、あるいはまったくマウントされないかのいずれかです。この臨時のマウント・ポイントをルート (/) ディレクトリーにするには、chroot コマンドを使用します。その後、lilo または grub-install を実行して、新しいブート用フロッピーを作成するか、MBR を再インストールしてください。私としては、フロッピーを作成してそのフロッピーで実際にブートし、すべてが正常であることを確認した上で MBR の再作成に取り掛かるという方法を選びますが、それほど慎重になる必要はないと思ったら、CD または DVD をレスキュー・モードでブートするのでも構いません。その場合には、選択項目がメニューとして表示されるか、あるいは単純にシングル・ユーザー・モードに移行して root 権限が与えられます。LILO の例で使用した Ubuntu 9.10 システムをシングル・ユーザー・モードにブートしようとすると、図 6 のようなメニューが表示されます。強調表示された選択肢を選択すると、ネットワークが利用できる状態でルート・シェルに移行します。

図 6. Ubuntu 9.10 のリカバリー・メニュー
GRUB でシングル・ユーザー・モードにブートする際のメニューが表示されたターミナル・ウィンドウ

上記のようなメニューは、レスキュー・メディアでは一般的な選択項目です。このレスキュー・モードの例では CD を使用していませんが、LILO に関するセクションで説明した方法で Ubuntu 9.19 システムをシングル・ユーザー・モードでブートしています。その後、別のシステム (この例では、/dev/sda6 にある Fedora 8 システム) のブート用フロッピーを作成するために必要な通常のステップに従います。レスキュー CD からブートするにしても、同じシステム上の別の OS からブートするにしても、従うステップは同様です。ただし、一部のステップ (レスキューするイメージをマウントするステップなど) は、すでに自動的に行われていることもあります。

最終的にルート・プロンプトが表示されたら、リスト 7 に記載されているコマンドのいくつか、あるいはすべてを実行することができます。この例では、マウント・ポイント (/mnt/sysimage) を作成して /dev/sda6 をマウントし、(変更予定の) 新しいルートに特殊なファイルシステムをマウントします。その後、chroot を実行して、マウントしたシステムをルートに変更します。cat /etc/issue コマンドで chroot コマンドの実行結果を表示すると、ターゲット・ディレクトリーがファイルシステムの新規ルートとなっていることがわかります。このディレクトリーは少なくとも、Ctrl-d を押すか、exit を実行して chroot の実行環境を終了するまで、ルートのままになります。

リスト 7 の例では、前のセクションで説明した構成例と同じ環境を使用しています。これは、root としてログインしたターミナル・ウィンドウだと思ってください。つまり、ハード・ディスクに書き込む内容には十分注意しなければなりません。

リスト 7. レスキュー・システムおよび chroot の使用
root@pinguino:~# mkdir /mnt/sysimage
root@pinguino:~# mount /dev/sda6 /mnt/sysimage
root@pinguino:~# cd /mnt/sysimage
root@pinguino:~# mount -t proc none proc/
root@pinguino:~# mount -t sysfs none sys/
root@pinguino:~# mount -o bind /dev dev/
root@pinguino:~# cat /etc/issue
Ubuntu 9.10 \n \l

root@pinguino:~# chroot /mnt/sysimage
root@pinguino:~# 
sh-3.00# chroot /mnt/sysimage
[root@oinguine /]# cat /etc/issue
Fedora release 8 (Werewolf)
Kernel \r on an \m

[root@oinguine /]# grub-install /dev/fd0
Installation finished. No error reported.
This is the contents of the device map /boot/grub/device.map.
Check if this is correct or not. If any of the lines is incorrect,
fix it and re-run the script `grub-install'.

(fd0)   /dev/fd0
(hd0)   /dev/sda
[root@oinguine /]#

ブート用フロッピーが用意できたら、Ctrl-d を押して chroot の実行環境を終了し、システムをリブートします。インストール CD やリカバリー・メディアを使用していた場合には、リブートする前に忘れずにすべて削除してください。インストール CD または DVD が手元にないとしても、オンラインで入手できるリカバリー CD およびライブ LINUX CD は数多くあり、フロッピー・ディスクまたは USB メモリー・キーのリカバリー・メディアもいくつかあります。詳細は「参考文献」を参照してください。

この記事では説明しませんが、参考として、MBR に Windows 2000 や Windows XP システムをブートさせて、パーティション・ブート・レコードに LILO または GRUB をインストールすることもできます。ntldr ブート・プログラムでも他のブート・セクターをチェーン・ロードすることは可能ですが、セットアップは少し厄介で、ブート・セクターを Windows パーティションにコピーして (通常は dd コマンドを使用)、隠しファイル boot.ini を変更するという作業が必要になります。

パーティションを移動した場合

パーティションを移動する際にブート・セットアップのことを忘れてしまうと、一時的な問題が発生し、LILO または GRUB が概してロードを拒否します。LILO は、ステージ 1 がロードされたことを示す「L」を出力した後に停止し、GRUB の場合はエラー・メッセージを出力します。何が起こったのかと言うと、ステージ 1 ローダーにはステージ 2 ローダーに至るためにロードするセクターのリストがあり、そのアドレスからセクターをロードすることはできるはずですが、ロードしたセクターにはもはやステージ 2 のシグニチャーがないという事態です。前に概説した方法でブート用フロッピーを作成したときのことを思い出すと、このとき lilo または grub-install がフロッピーに書き込んだのは単一のブート・セクターだけです。したがって、このブート用フロッピーでは役に立ちそうもありません。この問題に対して考えられる解決策は、前の例と同じように、ある種のレスキュー環境をブートして、ブート用フロッピーを LILO または GRUB で作成し直すことです。その上でリブートし、システムをチェックしてブート・ローダーを MBR に再インストールします。

お気付きかもしれませんが、この記事に記載した構成例では、パーティションにラベルと UUID (Universally Unique ID) を使用しています。以下に例を挙げます。
kernel /boot/vmlinuz-2.6.26.8-57.fc8 ro root=LABEL=FEDORA8 rhgb quiet
または
kernel /boot/upgrade/vmlinuz preupgrade repo=hd::/var/cache/yum/preupgrade stage2=\
hd:UUID=8b4c62e7-2022-4288-8995-5eda92cd149b:/boot/upgrade/install.img \
ks=hd:UUID=8b4c62e7-2022-4288-8995-5eda92cd149b:/boot/upgrade/ks.cfg

私はパーティションを移動するときにはよく、このようなラベル UUID を使用して問題が起こらないようにしています。GRUB または LILO 構成ファイルを更新して lilo を再度実行しなければならないことに変わりはありませんが、/etc/fstab を更新する必要はありません。この方法が特に役立つのは、あるシステムでパーティション・イメージを作成し、そのイメージを別のシステムの異なるロケーションで復元する場合です。また、常に同じ場所に接続されるわけではないドライブ (USB ドライブなど) からブートする場合にも重宝します。

ブート・パーティションを使用する

別のリカバリー手法、あるいはリカバリーの必要を回避するための手法として、ブート専用のパーティションを使用するという方法もあります。この方法が特に役立つのは、頻繁に再ビルドすることになる、複数のディストリビューションを使用したテスト・システムです。テスト・システムの場合、それほど大きなブート・パーティションは必要ありません。サイズは 100MB もあれば十分です。このパーティションを、移動される可能性が低く、かつ、別のパーティションを追加または削除してもパーティション番号が変わらないような場所に配置します。Windows と Linux が混在する環境では大抵、/dev/sda2 (またはディスクのラベル付けの方法によっては、/dev/hda2) がブート・パーティションの場所として適しています。リスト 8 に、この小さなブート・パーティション (/dev/sda2) のエントリーを記載します。これまで例として使用してきたシステムでは、このパーティションがマスター・ブート・レコードによって実際にロードされます。

リスト 8. GRUB での小さなブート・パーティションの使用
# menu.lst - See: grub(8), info grub, update-grub(8)
#            grub-install(8), grub-floppy(8),
#            grub-md5-crypt, /usr/share/doc/grub
#            and /usr/share/doc/grub-doc/.

## default num
# Set the default entry to the entry number NUM. Numbering starts from 0, and
# the entry number 0 is the default if the command is not used.
#
# You can specify 'saved' instead of a number. In this case, the default entry
# is the entry saved with the command 'savedefault'.           
default		0

## timeout sec
# Set a timeout, in SEC seconds, before automatically booting the default entry
# (normally the first entry defined).
timeout		10

## password ['--md5'] passwd
# If used in the first section of a menu file, disable all interactive editing
# control (menu entry editor and command-line)  and entries protected by the
# command 'lock'
# e.g. password topsecret
#      password --md5 $1$gLhU0/$aW78kHK1QfV3P2b2znUoe/
# password topsecret

title           Fedora 8 (sda6) Grub menu
root            (hd0,5)
chainloader     +1
boot

# Ubuntu 9.10 uses GRUB 2, so use kernel to drive GRUB 2 menu.
title           Ubuntu 9.10 (sda7)
root            (hd0,6)
kernel          /boot/grub/core.img

# This is a divider, added to separate the menu items below from the Debian
# ones.
title		Other operating systems:
root

# Windows XP
title		Windows NT/XP
root		(hd0,0)
savedefault
chainloader	+1

ブート・パーティションを使用するとよいケースには、ルート・パーティションで使用しているファイルシステムをブート・ローダーがサポートしていない場合も該当します。例えば、ルート・パーティション (/) が GRUB Legacy でサポートされていない LVM を使用するときには、/boot パーティションを ext2 または ext3 でフォーマットするのがかなり一般的です。

システム上に複数のディストリビューションがある場合に、ディストリビューション間で /boot パーティションを共有してはいけません。後で /boot としてマウントされるパーティションから LILO または GRUB がブートするようにセットアップしてください。また、ディストリビューションの更新プログラムは、一般にそのディストリビューションがインストールされているシステムに合わせて GRUB または LILO 構成を更新するということも覚えておいてください。複数のシステムを使用した環境では、専用の /boot パーティションを持つシステムをメイン・システムとして維持し、いずれかのシステムを更新する際に構成ファイルの更新が必要になった都度、その構成ファイルを手動で更新するという方法もあります。さらに別の方法として、各システムがそれぞれに固有のパーティション・ブート・レコードにブート・ローダーをインストールするようにします。そして、メイン・システムには個々のシステムのパーティション・ブート・レコードをチェーン・ロードさせるだけにすれば、2 段階のメニュー・プロセスになります。

自己完結型のブート用フロッピーまたは CD-ROM を作成する

最後に、GRUB のセットアップをさらに詳しく検討し、ハード・ディスクに何が起ころうとも GRUB プロンプトを表示できるようにする、スタンドアロンのフロッピーまたは CD を作成する方法を説明します。

記事「Linux の 101 試験対策: ハード・ディスクのレイアウト」で説明したハード・ディスクのレイアウトをよく理解していれば、ハード・ディスクのシリンダーに関するすべての知識は備わっているはずです。最近のドライブでは、シリンダーは架空のもののように思えるかもしれませんが、シリンダーは相変わらず、ファイルシステムのさまざまな側面に関わっています。具体的には、パーティションはシリンダーの境界に揃えられ、シリンダー単位の整数を使って表されます。パーティション内に含まれる多数のファイルシステムにしても、シリンダー単位でスペースを管理します。UNIX® および Linux システムの多くでは、ファイルシステムのレイアウトはスーパーブロックに格納されます。スーパーブロックとは、ファイルシステムでの最初の割り当て単位のことです。ext2 や ext3 などのファイルシステムや、容量がかなり大きいハード・ディスクの場合、スペースは複数のセクションに分割され、各セクションの先頭部分にスーパーブロックのコピーが保存されます。このコピーが、fdisk のようなプログラムによって誤ってパーティションの境界を崩してしまった場合のリカバリーに役立ちます。

シリンダーを基準としたレイアウトには、MBR のすぐ後に続くディスクの先頭にスペースがあるという利点もあります。GRUB はこの点を利用し、可能であれば、このスペースや他の用途では使用されないパーティション上のスペースにステージ 1.5 ブート・ローダーを組み込みます。ステージ 1.5 ブート・ローダーは、ステージ 2 が含まれるパーティション上のファイルシステムを認識することから、ファイルの移動関連の問題に対する保護がいくぶん強化されます。

ファイルの移動については問題ないとしても、問題がブート可能なフロッピーに関係する場合はどうでしょうか。フロッピーには十分なスペースも、シリンダーの概念もありません。そのため、GRUB のステージ 1 とステージ 2 をフロッピーからブートする必要がある場合には、ステージ 1 をインストールしてから、ブート・セクター直後のセクターにステージ 2 をコピーしなければなりません。リスト 9 に、この方法の一例を記載します。このプロセスはデータを壊すことになるので、空のフロッピー・ディスクを使用してください。/boot/grub/stage2 はハード・ディスクのパーティションを操作するために変更されているので、/boot/grub ディレクトリーにあるファイルではなく、GRUB ディストリビューションで提供されたファイルをコピーする必要があります。ディストリビューションのオリジナルの stage1 ファイルおよび stage2 ファイルは、/usr/share/grub のサブディレクトリーにあります。以下の例で、この 2 つのファイルが置かれている場所は /usr/share/grub/i386-redhat です。

リスト 9. GRUB ブート用フロッピーの作成
[root@pinguino ~]# ls /usr/share/grub/
i386-redhat
[root@pinguino ~]# cd /usr/share/grub/i386-redhat/
[root@pinguino i386-redhat]# ls -l st*
-rw-r--r-- 1 root root    512 2008-05-28 12:05 stage1
-rw-r--r-- 1 root root 109212 2008-05-28 12:05 stage2
-rw-r--r-- 1 root root 109212 2008-05-28 12:05 stage2_eltorito
[root@pinguino i386-redhat]# dd if=stage1 of=/dev/fd0 bs=512 count=1
1+0 records in
1+0 records out
512 bytes (512 B) copied, 0.29007 s, 1.8 kB/s
[root@pinguino i386-redhat]# dd if=stage2 of=/dev/fd0 bs=512 seek=1
213+1 records in
213+1 records out
109212 bytes (109 kB) copied, 7.4094 s, 14.7 kB/s


[root@lyrebird root]# ls /usr/share/grub
i386-redhat
[root@lyrebird root]# cd /usr/share/grub/i386-redhat
[root@lyrebird i386-redhat]# ls -l st*
-rw-r--r--    1 root     root          512 Aug  3  2004 stage1
-rw-r--r--    1 root     root       104092 Aug  3  2004 stage2
[root@lyrebird i386-redhat]# dd if=stage1 of=/dev/fd0 bs=512 count=1
1+0 records in
1+0 records out
[root@lyrebird i386-redhat]# dd if=stage2 of=/dev/fd0 bs=512 seek=1

203+1 records in
203+1 records out

上記のプロセスを行う以前に、フロッピーが MS-DOS でフォーマットされている場合、mount コマンドでフロッピーをマウントしようとするとエラーが返されます。これは、stage2 をフロッピーのブート・セクター (seek=1) の直後にコピーしたことによって、フロッピー上のファイルシステムが破棄されたためです。

ブート可能な GRUB CD を作成するプロセスも上記と同様ですが、この場合は CD イメージをハード・ディスクに作成します。それには、例えば grubcd という一時ディレクトリーと、boot および boot/grub というサブディレクトリーが必要です。これらのディレクトリーとサブディレクトリーを作成した後、GRUB ディストリビューション・ファイルに含まれる stage2_eltorito ファイルを grub サブディレクトリーにコピーします。次に、genisoimage を使用してブート可能な .iso イメージ・ファイルを作成します。作成したこのイメージ・ファイルは、任意の CD 書き込みツールを使って CD に書き込むことができます。リスト 10 に、CD イメージを grubcd.iso として作成する方法を示します。

リスト 10. GRUB ブート可能な CD イメージの作成
[ian@pinguino ~]$ mkdir -p grubcd/boot/grub
[ian@pinguino ~]$ cp /usr/share/grub/i386-redhat/stage2_eltorito grubcd/boot/grub
[ian@pinguino ~]$ genisoimage -R -b boot/grub/stage2_eltorito -no-emul-boot \
> -boot-load-size 4 -boot-info-table -o grubcd.iso grubcd
I: -input-charset not specified, using utf-8 (detected in locale settings)
Size of boot image is 4 sectors -> No emulation
Total translation table size: 2048
Total rockridge attributes bytes: 760
Total directory bytes: 4576
Path table size(bytes): 34
Max brk space used 0
233 extents written (0 MB)

この CD またはフロッピーは、任意の PC でブートすることができます。Linux システムがインストールされた PC である必要はありません。フロッピーからブートすると、ステージ 2 をフロッピーからロードする際に遅延があることに気付くはずです。同様に、CD からブートすると、GRUB シェルが CD からロードされます。どちらをブートする場合でも、GRUB ブート・プロンプトが出されます。Tab キーを押して、使用できるコマンドのリストを確認してください。例えば commandname というコマンドに関するヘルプを表示するには、help commandname と入力します。リスト 11 に、GRUB コマンドラインの具体例を記載します。

リスト 11. GRUB コマンドライン
    GNU GRUB  version 0.97  (640K lower / 3072K upper memory)

 [ Minimal BASH-like line editing is supported.  For the first word, TAB
   lists possible command completions.  Anywhere else TAB lists the possible
   completions of a device/filename.]

grub> 
 Possible commands are: blocklist boot cat chainloader clear cmp color configfile 
 debug device displayapm displaymem dump embed find fstest geometry halt help
 hide impsprobe initrd install ioprobe kernel lock makeactive map md5crypt 
 module modulenounzip pager partnew parttype password pause quit read reboot 
 root rootnoverify savedefault serial setkey setup terminal terminfo testload testvbe
 unhide uppermem vbeprobe

grub> help rootnoverify
rootnoverify: rootnoverify [DEVICE [HDBIAS]]
    Similar to `root', but don't attempt to mount the partition. This
    is useful for when an OS is outside of the area of the disk that
    GRUB can read, but setting the correct root device is still
    desired. Note that the items mentioned in `root' which derived
    from attempting the mount will NOT work correctly.

grub> find /boot/grub/grub.conf
 (hd0,1)
 (hd0,5)

grub>

上記の例でわかったのは、GRUB 構成ファイルが 1 番目のハード・ディスクの 2 つのパーティションにあることです。GRUB メニューは、この 2 つのパーティションのいずれから、configfile コマンドを使用してロードすることができます (例: configfile (hd0,1)/boot/grub/grub.conf)。

このコマンドを実行すると構成ファイルのメニューがロードされ、このポイントからシステムをブートすることができます。grub コマンドについて調べるには、GRUB マニュアルを参照してください。Linux ターミナル・ウィンドウで info grub と入力すると、このマニュアルが開きます。

GRUB の話題を終える前に、もう 1 つ重要な点を説明しておきます。ステージ 2 の GRUB ファイルはフロッピー上のファイルシステムを破棄しました。フロッピーの構成ファイルを含めた GRUB ファイルをロードするブート可能な GRUB リカバリー・フロッピーが必要な場合には、以下のステップに従ってください。

  1. mkdosfs コマンドを使用してフロッピー・ディスク上に DOS FAT ファイルシステムを作成し、-R オプションを使用してステージ 2 ファイルに十分なセクターを確保しておきます。
  2. フロッピー・ディスクをマウントします。
  3. マウントしたフロッピー上に /boot/grub ディレクトリーを作成します。
  4. GRUB の stage1 ファイル、stage2 ファイル、および grub.conf ファイルを、フロッピーの boot/grub ディレクトリーにコピーします。スプラッシュ・イメージ・ファイルが必要な場合には、そのファイルもコピーします。
  5. フロッピー上の grub.conf ファイルを編集し、この構成ファイルがフロッピー上のスプラッシュ・ファイルを参照するようにします。
  6. フロッピー・ディスクをアンマウントします。
  7. grub コマンド・シェルを使用し、GRUB の root および setup コマンドを使ってフロッピーの GRUB をセットアップします。

この一連のステップをリスト 12 に記載します。

リスト 12. ファイルシステムを使用した、フロッピーへの GRUB のインストール
[root@pinguino ~]# mkdosfs -R 220 /dev/fd0
mkdosfs 2.11 (12 Mar 2005)
[root@pinguino ~]# mkdir /mnt/floppy
[root@pinguino ~]# mount /dev/fd0 /mnt/floppy
[root@pinguino ~]# mkdir -p /mnt/floppy/boot/grub
[root@pinguino ~]# cp /boot/grub/stage1 /mnt/floppy/boot/grub
[root@pinguino ~]# cp /boot/grub/stage2 /mnt/floppy/boot/grub
[root@pinguino ~]# cp /boot/grub/splash* /mnt/floppy/boot/grub
[root@pinguino ~]# cp /boot/grub/grub.conf /mnt/floppy/boot/grub
[root@pinguino ~]# umount /dev/fd0
[root@pinguino ~]# grub
Probing devices to guess BIOS drives. This may take a long time.

    GNU GRUB  version 0.97  (640K lower / 3072K upper memory)

 [ Minimal BASH-like line editing is supported.  For the first word, TAB
   lists possible command completions.  Anywhere else TAB lists the possible
   completions of a device/filename.]

grub> root (fd0)
 Filesystem type is fat, using whole disk

grub> setup (fd0)
 Checking if "/boot/grub/stage1" exists... yes
 Checking if "/boot/grub/stage2" exists... yes
 Checking if "/boot/grub/fat_stage1_5" exists... no
 Running "install /boot/grub/stage1 (fd0) /boot/grub/stage2 p /boot/grub/grub.c
onf "... succeeded
Done.

この最後の例には、Linux シェルで grub コマンドを実行できるという事実も示されています。これは、マシンをのべつ幕なしにリブートしなくても GRUB を学ぶことができる素晴らしい方法です。root 権限で grub を実行すれば、システムを実際にリブートするという操作を除き、GRUB で実行可能なほとんどの操作を行うことができます。


GRUB 2

GRUB 2 は、モジュール性と可搬性を大幅に向上させるために一から作り直されました。さまざまなアーキテクチャーとブート・メソッドをターゲットとする GRUB 2 には、多くの新しい機能が追加されています。詳細については、「参考文献」に記載されているリンクにアクセスしてください。GRUB に慣れているユーザーが GRUB 2 を使い始めてみると、GRUB 2 は GRUB とはまったく異なることがわかり、数々の驚きがあることでしょう。

GRUB 2 でまず初めに気付くことは、GRUB 2 はパーティション・ブート・ローダーとしてはインストールされないことです。記事の最初のほうでは、Ubuntu インストーラーに対し、Ubuntu 9.10 をインストールしたパーティション (/dev/sda7) に GRUB をインストールするように指示しましたが、このパーティションはチェーン・ロードを使用してブートすることができません。このセクションの残りでは、GRUB 2 について簡単に紹介します。ここで提供する情報さえあれば、GRUB 2 を単独で、あるいは GRUB Legacy と併せて使用できるようになるはずです。

PC 用のGRUB 2 は、grub-pc パッケージで配布されます。grub-pc パッケージには、通常は .usr/bin または /usr/sbin に、リスト 13 に示す複数のプログラムが含まれています。この記事を執筆している時点で、これらのプログラムの man ページには最小限の説明しか記載されていません。詳細を調べるには、--help オプションを指定してプログラムを実行するか、インターネットでヘルプ情報を検索してください。

リスト 13. /usr/bin および /usr/sbin に置かれた GRUB 2 の実行可能プログラム
ian@pinguino:~$ dpkg -L grub-pc|grep "bin/"
/usr/bin/grub-mkimage
/usr/bin/grub-mkrescue
/usr/sbin/grub-setup
/usr/sbin/update-grub2
/usr/sbin/update-grub
/usr/sbin/grub-install
/usr/sbin/upgrade-from-grub-legacy
/usr/sbin/grub-set-default
/usr/sbin/grub-reboot

GRUB 2 の中核となるのは、マルチブート・カーネル (/boot/grub/core.img) と構成ファイル (/boot/grub/grub.cfg) です。この 2 つを生成するには、grub-install を実行して、ターゲットを MBR として設定します (例: grub-install /dev/sda)。リスト 14 に示すように、grub-install --help を実行すると、このプログラムを呼び出すことで行える全作業の概要がわかります。GRUB Legacy と似ている部分もありますが、--modules--grub-setup--grub-mkimage をはじめ、GRUB 2 には多くの新しい項目が追加されています。

リスト 14. grub-install の GRUB 2 ヘルプ
ian@pinguino:~$ grub-install --help
Usage: grub-install [OPTION] install_device
Install GRUB on your drive.

  -h, --help              print this message and exit
  -v, --version           print the version information and exit
  --modules=MODULES       pre-load specified modules MODULES
  --root-directory=DIR    install GRUB images under the directory DIR
                          instead of the root directory
  --grub-setup=FILE       use FILE as grub-setup
  --grub-mkimage=FILE     use FILE as grub-mkimage
  --grub-mkdevicemap=FILE use FILE as grub-mkdevicemap
  --grub-probe=FILE       use FILE as grub-probe
  --no-floppy             do not probe any floppy drive
  --recheck               probe a device map even if it already exists
  --force                 install even if problems are detected
  --disk-module=MODULE    disk module to use

INSTALL_DEVICE can be a GRUB device name or a system device filename.

grub-install copies GRUB images into the DIR/boot directory specified by
--root-directory, and uses grub-setup to install grub into the boot
sector.

Report bugs to <bug-grub@gnu.org>.

例えば grub-install /dev/sda を実行すると、このプロセスはコア・イメージ・ファイルを自動的に作成し、構成ファイルを作成して GRUB 2 を MBR にインストールします。セットアップに GRUB2 だけを使うまでの心の準備ができていないのであれば、コア・イメージ・ファイルと構成ファイルを自分で作成して、GRUB 2 コア・イメージを GRUB Legacy または LILO からブートするという方法を使えます。

GRUB 2 コア・イメージを作成する

新しいコア・イメージ・ファイルを作成するのに最も簡単な方法は、--grub-setup=/bin/true オプションを指定して grub-install を実行することです。このコマンドにより、本物の GRUB 2 セットアップ・プログラムの代わりに /bin/true が実行されます (リスト 15 を参照)。以下の例では、最初に既存の core.img を削除して、確かにコア・イメージ・ファイルが生成されることを示しています。

リスト 15. grub-install の GRUB 2 ヘルプ
ian@pinguino:~$ sudo rm /boot/grub/core.img 
ian@pinguino:~$ sudo grub-install --grub-setup=/bin/true /dev/sda
Installation finished. No error reported.
This is the contents of the device map /boot/grub/device.map.
Check if this is correct or not. If any of the lines is incorrect,
fix it and re-run the script `grub-install'.

(hd0)	/dev/sda
ian@pinguino:~$ ls -l /boot/grub/core.img
-rw-r--r-- 1 root root 25105 2010-04-08 12:10 /boot/grub/core.img

GRUB 2 構成ファイルを作成する

GRUB 2 構成ファイルは通常、/boot/grub/grub.cfg です。GRUB Legacy とは異なり、通常、この構成ファイルを自分で編集することはしません。編集する代わりに、grub-mkconfig または update-grub コマンドのいずれかを使用して構成ファイルを作成します。grub-mkconfig のフロントエンドとなっているこの 2 つのコマンドは、/etc/default/grub で一般的な設定 (背景、タイムアウトなど) を検索してから、/etc/grub.d/ の実行可能ファイルを実行することで、ヘッダーや現行の Linux ディストリビューションのセクション、他のオペレーティング・システムのセクション、そして独自にカスタムで追加した部分など、構成ファイルに含まれるさまざまな部分を作成します。GRUB 2 メニューをカスタマイズする必要がある場合は、/etc/grub.d/ にある 40_custom などのファイルに変更内容を追加するか、独自のファイルを追加してください。ここで注意しなければならない点として、追加するファイルは実行可能ファイルでなければなりません。最後に update-grub を実行し、新しい /boot/grub/grub.cfg ファイルを生成します (リスト 16 を参照)。

リスト 16. update-grub による GRUB 2 構成ファイルの作成
ian@pinguino:~$ sudo update-grub
Generating grub.cfg ...
Found linux image: /boot/vmlinuz-2.6.31-20-generic
Found initrd image: /boot/initrd.img-2.6.31-20-generic
Found linux image: /boot/vmlinuz-2.6.31-14-generic
Found initrd image: /boot/initrd.img-2.6.31-14-generic
Found memtest86+ image: /boot/memtest86+.bin
Found GRUB boot loader on /dev/sda1
Found Fedora release 8 (Werewolf) on /dev/sda6
done

リスト 17 に、作成された構成ファイルから、いくつかのエントリーを抜粋して記載します。このリストでは長い行を見やすくするために分割し、分割した箇所を末尾のバックスラッシュ (\) で示しています。menuentry スタンザは通常のコマンドというよりも、GRUB Legacy のロジックを省略したシェル・スクリプトのように見えることに注目してください。その他の GRUB Legacy との重要な違いは、パーティションの番号が 1 から始まっていることです。ただし、ディスクの番号は同じく 0 から始まっています。したがって、/dev/sda7 は、GRUB 2 では (hd0,7) を指し、GRUB Legacy では (hd0,6) を指します。

リスト 17. GRUB 2 構成ファイルからの抜粋
### BEGIN /etc/grub.d/05_debian_theme ###                               
set menu_color_normal=white/black
set menu_color_highlight=black/white
### END /etc/grub.d/05_debian_theme ###                                 

### BEGIN /etc/grub.d/10_linux ###                                      
menuentry "Ubuntu, Linux 2.6.31-20-generic" {
        recordfail=1
        if [ -n ${have_grubenv} ]; then save_env recordfail; fi
        set quiet=1
        insmod ext2
        set root=(hd0,7)
        search --no-floppy --fs-uuid --set 8954fa66-e11f-42dc-91f0-b4aa480fa103
        linux   /boot/vmlinuz-2.6.31-20-generic \
          root=UUID=8954fa66-e11f-42dc-91f0-b4aa480fa103 ro   quiet splash
        initrd  /boot/initrd.img-2.6.31-20-generic
}
menuentry "Ubuntu, Linux 2.6.31-20-generic (recovery mode)" {
        recordfail=1
        if [ -n ${have_grubenv} ]; then save_env recordfail; fi
        insmod ext2
        set root=(hd0,7)
        search --no-floppy --fs-uuid --set 8954fa66-e11f-42dc-91f0-b4aa480fa103
        linux   /boot/vmlinuz-2.6.31-20-generic 
         root=UUID=8954fa66-e11f-42dc-91f0-b4aa480fa103 ro single
        initrd  /boot/initrd.img-2.6.31-20-generic
}

GRUB 2 を Grub Legacy からブートする

前述のとおり、GRUB 2 をパーティション・ブート・レコードからチェーン・ロードすることはできません。けれどもコア・イメージと構成ファイルを作成した後は、エントリーを GRUB Legacy の grub.conf または menu.lst ファイルに追加することで、GRUB 2 コア・イメージをブートして、作成した GRUB 2 メニューを表示することができます。リスト 18 に記載するエントリーは、リスト 8 ですでに使用したものです。この構成ファイルは GRUB Legacy 用なので、ルート・エントリーが指定する (hd0,6) は /dev/sda7 を指します。

リスト 18. GRUB 2 コア・イメージをブートするための Grub Legacy 構成エントリー
# Ubuntu 9.10 uses GRUB 2, so use kernel to drive GRUB 2 menu.          
title           Ubuntu 9.10 (sda7)
root            (hd0,6)
kernel          /boot/grub/core.img

このエントリーを GRUB Legacy メニューから選択すると、図 7 に示すようなメニューが表示されます。この図で、リスト 17 に記載した 2 つのエントリーに該当するのは、強調表示された最初のエントリーとその下に表示されているエントリーです。

図 7. GRUB 2 メニューの例
GRUB 2 メニューの例

GRUB 2 をパーティション・ブート・レコードにインストールしてみようと思うかもしれませんが、そうすると、リスト 19 のような出力が表示されるはずです。

リスト 19. GRUB 2 をパーティション・ブート・レコードにインストールしようとした場合
ian@pinguino:~$ sudo grub-install /dev/sda7
grub-setup: warn: Attempting to install GRUB to a partition instead of the MBR.  
This is a BAD idea.
grub-setup: warn: Embedding is not possible.  GRUB can only be installed in 
this setup by using blocklists.  However, blocklists are UNRELIABLE and its 
use is discouraged.
Installation finished. No error reported.
This is the contents of the device map /boot/grub/device.map.
Check if this is correct or not. If any of the lines is incorrect,
fix it and re-run the script `grub-install'.

(hd0)	/dev/sda

上記の出力に、Ubuntu 9.10 がインストールされている場合に GRUB 2 を /dev/sda7 パーティションにインストールしようとしても失敗する理由が説明されています。Ubuntu のこのリリースは GRUB 2 を新しいシステムとしてインストールするものの、既存の Ubuntu システムをアップグレードしている場合には既存のブート・マネージャーが引き続き使われることになる点に注意する必要があります。

GRUB 2 のレスキュー媒体

GRUB 2 には、レスキュー用フロッピーまたは CD イメージの作成に役立つ grub-mkrescue コマンドが用意されています。詳細については、ヘルプまたは man ページを参照してください。


まとめ

この記事では、従来の Linux システムで主に使用されている 2 つのブート・ローダーについて、エラーやブート問題からリカバリーする方法を含めて説明しました。また、GRUB 2 についても紹介しました。GRUB 2 は現在のところ LPI の目標には含まれていませんが、主要な Linux ディストリビューションに登場するようになってきています。


ダウンロード

内容ファイル名サイズ
Configuration files used in this articlel-lpic1-v3-102-2-samples.zip8KB

参考文献

学ぶために

  • 2009年4月時点での目標に基づく LPIC-1 認定に備えるために必要な developerWorks の記事を見つけるには、developerWorks の LPIC-1 ロードマップを利用してください。
  • LPIC Program サイトで、Linux Professional Institute の 3 つの Linux システム管理資格認定レベルについて、詳しい目標、タスクのリスト、そして出題例を調べてください。特に、2009年4月時点での LPI 101 試験および LPI 102 試験の目標は要チェックです。最新の目標については、必ず LPIC Program サイトを参照してください。
  • developerWorks の連載「LPI exam prep」をすべて読んで、Linux の基礎を学び、2009年4月以前の LPI 試験の目標に基づくシステム管理者認定試験に備えてください。
  • GNU GRUB ホーム・ページでGRUB Legacy と GRUB 2 について学んでください。GNU GRUB は、GRUB (GRand Unified Bootloader) から派生したマルチブート用ブート・ローダーです。
  • インターフェースのマルチブート仕様に準拠したブート・ローダーは、この仕様に準拠したあらゆるオペレーティング・システムをブートできます。
  • Basic tasks for new Linux developers」(developerWorks、2005年3月) を読んで、ターミナル・ウィンドウやシェル・プロンプトの開き方をはじめ、さまざまなタスクを行う方法を学んでください。
  • The Linux Documentation Project には、HOWTO 文書をはじめ、各種の有益な文書が豊富に揃っています。
  • developerWorks Linux ゾーンで、Linux 開発者および管理者向けのハウツー記事とチュートリアル、そしてダウンロード、ディスカッション、フォーラムなど、豊富に揃った資料を探してください。
  • さまざまな IBM 製品および IT 業界についての話題に絞った developerWorks の Technical events and webcasts で時代の流れをキャッチしてください。
  • 無料の developerWorks Live! briefing に参加して、IBM 製品およびツール、そして IT 業界の傾向を素早く学んでください。
  • developerWorks の on-demand demos で、初心者向けの製品のインストールおよびセットアップから熟練開発者向けの高度な機能に至るまで、さまざまに揃ったデモを見てください。
  • Twitter で developerWorks をフォローするか、developerWorks で Linux に関するツイートのフィードに登録してください。

製品や技術を入手するために

  • SystemRescueCd CD-ROM をダウンロードしてください。これはオンラインで入手できる数多くのツールの 1 つで、システム・クラッシュ後のリカバリーを支援します。
  • ご自分に最適な方法で IBM 製品を評価してください。評価の方法としては、製品の試用版をダウンロードすることも、オンラインで製品を試してみることも、クラウド環境で製品を使用することもできます。また、SOA Sandbox では、数時間でサービス指向アーキテクチャーの実装方法を効率的に学ぶことができます。

議論するために

コメント

developerWorks: サイン・イン

必須フィールドは(*)で示されます。


IBM ID が必要ですか?
IBM IDをお忘れですか?


パスワードをお忘れですか?
パスワードの変更

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


お客様が developerWorks に初めてサインインすると、お客様のプロフィールが作成されます。プロフィールで選択した情報(名前、国/地域や会社名)は公開され、投稿するコンテンツと一緒に表示されますが、いつでもこれらの情報を更新できます。

送信されたすべての情報は安全です。

ディスプレイ・ネームを選択してください



developerWorks に初めてサインインするとプロフィールが作成されますので、その際にディスプレイ・ネームを選択する必要があります。ディスプレイ・ネームは、お客様が developerWorks に投稿するコンテンツと一緒に表示されます。

ディスプレイ・ネームは、3文字から31文字の範囲で指定し、かつ developerWorks コミュニティーでユニークである必要があります。また、プライバシー上の理由でお客様の電子メール・アドレスは使用しないでください。

必須フィールドは(*)で示されます。

3文字から31文字の範囲で指定し

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


送信されたすべての情報は安全です。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=Linux
ArticleID=503065
ArticleTitle=Linux の 101 試験対策: ブート・マネージャー
publish-date=04132010