Product SiteDocumentation Site

8.8. ブートローダの設定

ブートローダは既に機能しているかもしれませんが、ブートローダがマスターブートレコードから消えてしまった状況に備えて、ブートローダの設定方法とイントール方法を知っておくのは常に良い考えです。この状況は Windows などの他のオペレーティングシステムをインストールした後に起こる場合があります。以下の情報はブートローダ設定の変更が必要になった際にそれを変更するための助けになるでしょう。

8.8.1. ディスクの識別

ブートローダを設定するには、必ずさまざまなハードドライブとそのパーティションを識別しなければいけません。Linux はこの目的のために /dev/ ディレクトリ内で「ブロック」スペシャルファイルを使います。Debian Squeeze 以降、ハードドライブの命名規則は Linux カーネルによって統一化されました。現在、すべてのハードドライブ (IDE/PATA、SATA、SCSI、USB、IEEE 1394) は /dev/sd* と表されます。
それぞれのパーティションは自分が存在するディスク上の番号で表されます。たとえば、/dev/sda1 は 1 台目のディスクの最初のパーティションで、/dev/sdb3 は 2 台目のディスクの 3 番目のパーティションです。
PC アーキテクチャ (つまり「i386」およびその年下のいとこである「amd64」) では、長い間「MS-DOS」パーティションテーブルフォーマットを使うよう制限を受けていました。このフォーマットはディスク 1 台当たりに作れる「プライマリ」パーティションの数を 4 つに制限していました。この制限を乗り越えるためには、プライマリパーティションの 1 つを「拡張」パーティションとして作成します。拡張パーティションには追加的な「セカンダリ」パーティションを含めることが可能です。このようなセカンダリパーティションには 5 以上の番号が割り振られます。従って、最初のセカンダリパーティションは /dev/sda5、2 番目は /dev/sda6 などのように割り振られるでしょう。
MS-DOS パーティションテーブルフォーマットのもう一つの制限は、2 TiB を超えるサイズのディスクを取り扱うことができないという点です。近年のディスクではこの制限が現実的な問題になりつつあります。
GPT と呼ばれる新しいパーティションテーブルフォーマットを使うことで上に挙げた制限が緩和されます。GPT では、パーティション数は最大で 128 個に制限され (標準的な設定を使った場合)、ディスクサイズは最大で 8 ZiB (80 億テラバイト以上) に制限されます。1 台のディスクに多くの物理パーティションを作成する場合、ディスクのパーティショニングを行う際に必ず GPT フォーマットでパーティションテーブルを作成するよう注意してください。
どのディスクがどの SATA コントローラに (たとえば SCSI チェーンの 3 番目に) 接続されているかを記憶するのは常に簡単というわけではありません。なぜなら、特にホットプラグ対応のハードドライブ (これには多くの SATA ディスクや外部ディスクが含まれます) の名前は起動の度に変わるからです。幸いなことに、udev/dev/sd* に加えて、固有名のシンボリックリンクを作成します。曖昧でない方法でハードドライブを識別したい場合にはこのシンボリックリンクを使うことが可能です。これらのシンボリックリンクは /dev/disk/by-id に保存されています。たとえば 2 台の物理ディスクを備えるマシンでは以下のようなシンボリックリンクが見つかります。
mirexpress:/dev/disk/by-id# ls -l
合計 0
lrwxrwxrwx 1 root root  9  7月 23 08:58 ata-STM3500418AS_9VM3L3KP -> ../../sda
lrwxrwxrwx 1 root root 10  7月 23 08:58 ata-STM3500418AS_9VM3L3KP-part1 -> ../../sda1
lrwxrwxrwx 1 root root 10  7月 23 08:58 ata-STM3500418AS_9VM3L3KP-part2 -> ../../sda2
[...]
lrwxrwxrwx 1 root root  9  7月 23 08:58 ata-WDC_WD5001AALS-00L3B2_WD-WCAT00241697 -> ../../sdb
lrwxrwxrwx 1 root root 10  7月 23 08:58 ata-WDC_WD5001AALS-00L3B2_WD-WCAT00241697-part1 -> ../../sdb1
lrwxrwxrwx 1 root root 10  7月 23 08:58 ata-WDC_WD5001AALS-00L3B2_WD-WCAT00241697-part2 -> ../../sdb2
[...]
lrwxrwxrwx 1 root root  9  7月 23 08:58 scsi-SATA_STM3500418AS_9VM3L3KP -> ../../sda
lrwxrwxrwx 1 root root 10  7月 23 08:58 scsi-SATA_STM3500418AS_9VM3L3KP-part1 -> ../../sda1
lrwxrwxrwx 1 root root 10  7月 23 08:58 scsi-SATA_STM3500418AS_9VM3L3KP-part2 -> ../../sda2
[...]
lrwxrwxrwx 1 root root  9  7月 23 08:58 scsi-SATA_WDC_WD5001AALS-_WD-WCAT00241697 -> ../../sdb
lrwxrwxrwx 1 root root 10  7月 23 08:58 scsi-SATA_WDC_WD5001AALS-_WD-WCAT00241697-part1 -> ../../sdb1
lrwxrwxrwx 1 root root 10  7月 23 08:58 scsi-SATA_WDC_WD5001AALS-_WD-WCAT00241697-part2 -> ../../sdb2
[...]
lrwxrwxrwx 1 root root  9  7月 23 16:48 usb-LaCie_iamaKey_3ed00e26ccc11a-0:0 -> ../../sdc
lrwxrwxrwx 1 root root 10  7月 23 16:48 usb-LaCie_iamaKey_3ed00e26ccc11a-0:0-part1 -> ../../sdc1
lrwxrwxrwx 1 root root 10  7月 23 16:48 usb-LaCie_iamaKey_3ed00e26ccc11a-0:0-part2 -> ../../sdc2
[...]
lrwxrwxrwx 1 root root  9  7月 23 08:58 wwn-0x5000c50015c4842f -> ../../sda
lrwxrwxrwx 1 root root 10  7月 23 08:58 wwn-0x5000c50015c4842f-part1 -> ../../sda1
[...]
mirexpress:/dev/disk/by-id# 
いくつかのディスクは複数回リストされています (なぜなら、それらは ATA ディスクであり同時に SCSI ディスクとしても振る舞うからです)。しかしながら、ディスクに固有の情報は主にディスクの製品番号とシリアル番号であるという点に注意してください。ここから、目的の周辺機器のシンボリックリンクを見つけることが可能です。
以降の節で挙げる設定ファイルの例はこれと同じディスク構成のマシンに対する設定です。具体的に言えば、1 台の SATA ディスクがあり、最初のパーティションに古い Windows がインストールされており、2 番目のパーティションに Debian GNU/Linux がインストールされている状態です。

8.8.2. LILO の設定

LILO (LInux LOader) は最も古い (実直だが素朴な) ブートローダです。LILO は MBR に起動するカーネルの物理アドレスを書くため、LILO および LILO の設定ファイルを更新した際にはその後に必ず lilo コマンドを使わなければいけません。このルールを忘れて、古いカーネルを削除したり、置き換えた新しいカーネルを古いカーネルがあった場所と同じディスクの場所に置かなかったりすると、システムが起動できないと表示されます。
LILO の設定ファイルは /etc/lilo.conf です。標準的な設定を行う単純なファイルは以下の例のように書けます。

例 8.3 LILO の設定ファイル

# このディスクに LILO をインストールします。
# ここではパーティションではなくディスクを指定してください。
# LILO は MBR にインストールされます。
boot=/dev/sda
# Debian がインストールされているパーティション
root=/dev/sda2
# デフォルトで起動させるアイテム
default=Linux

# 最新のカーネルイメージ
image=/vmlinuz
  label=Linux
  initrd=/initrd.img
  read-only

# 古いカーネル (最新のカーネルが起動しなかった際に使います)
image=/vmlinuz.old
  label=LinuxOLD
  initrd=/initrd.img.old
  read-only
  optional

# Linux と Windows のデュアルブート用
other=/dev/sda1
  label=Windows

8.8.3. GRUB 2 の設定

GRUB (GRand Unified Bootloader) はより新しいブートローダです。カーネル更新の後に GRUB を実行する必要はありません。それどころか GRUB はファイルシステムを読む方法とディスクからカーネルを探し出す方法を知っています。GRUB を最初のディスクの MBR にインストールするためには、grub-install /dev/sda を実行してください。
GRUB 2 の設定は /boot/grub/grub.cfg に保存されていますが、このファイルは (Debian の場合) 別のファイルから生成されます。/boot/grub/grub.cfg を直接変更しないでください。なぜなら、update-grub が実行されたら (さまざまなパッケージの更新時に実行されることがあります) そのようなその場限りの変更は失われるからです。/boot/grub/grub.cfg ファイルに対して最も一般的な変更を加える (たとえば、カーネルに渡すコマンドラインパラメータを追加したり、メニューの表示される時間を変える) には /etc/default/grub に含まれる変数を使います。メニューにエントリを追加するには /boot/grub/custom.cfg ファイルを作成するか、/etc/grub.d/50_custom ファイルを変更してください。より複雑な設定をするには /etc/grub.d にある他のファイルを変更するか、このディレクトリにファイルを追加してください。/etc/grub.d ディレクトリに含まれるスクリプトは設定スニペットを返すスクリプトであり、場合によっては外部プログラムを使用するかもしれません。これらのスクリプトは起動したいカーネルのリストを更新するためのものです。すなわち 10_linux はインストール済み Linux カーネルをリストアップします。そして 20_linux_xen は Xen 仮想システムをリストアップし、30_os-prober は他のオペレーティングシステム (Windows、OS X、Hurd) をリストアップします。

8.8.4. Macintosh コンピュータ (PowerPC) の場合、Yaboot の設定

Yaboot は PowerPC プロセッサを搭載する古い Macintosh コンピュータ用のブートローダです。古い Macintosh コンピュータは PC のように起動せず、「bootstrap」パーティションを使って起動します。「bootstrap」パーティションには、BIOS (または OpenFirmware) が実行する Yaboot が含まれ、さらに ybin プログラムがインストールする yaboot と設定ファイルも含まれています。設定ファイル /etc/yaboot.conf (このファイルは bootstrap パーティションにコピーされ、yaboot がディスク上からカーネルのパーティションを見つける方法を指定するファイルです) を変更したら、ybin コマンドをもう一度実行する必要があります。
ybin を実行する前に、適切な /etc/yaboot.conf を作らなければいけません。以下は最低限の設定例です。

例 8.4 Yaboot の設定ファイル

# bootstrap パーティション
boot=/dev/sda2
# ディスク
device=hd:
# Linux パーティション
partition=3
root=/dev/sda3
# 3 秒間何もしなければ起動します
# (timeout は 10 倍の値を設定してください)
timeout=30

install=/usr/lib/yaboot/yaboot
magicboot=/usr/lib/yaboot/ofboot
enablecdboot

# 最近インストールされたカーネル
image=/vmlinux
        label=linux
        initrd=/initrd.img
        read-only

# 古いカーネル
image=/vmlinux.old
        label=old
        initrd=/initrd.img.old
        read-only

# Linux と Mac OSX のデュアルブート用
macosx=/dev/sda5

# bsd=/dev/sdaX および macos=/dev/sdaX
# の可能性もあります