Chapter 5. ブート時のパラメタ

PC では、マザーボード上の BIOS と SCSI ホストアダプタの大部分が提供して いる SCSI BIOS とが協調し、SCSI ディスク上にあるブートローダーのイメージを メモリにロード・実行する処理を行っています。こうするには、マザーボード上の BIOS の設定を何かしら変更する必要があるかもしれません。 1 つ以上の SCSI アダプタがある場合には、SCSI BIOS の設定を変更して、ブート イメージがあるディスクがつながっているアダプタを示してやる必要があるかも しれません。 ブートイメージが ATA(IDE)ディスクやブータブルな CD-ROM、フロッピー・ ディスクに存在する場合もあります。

Linux のブートローダーで良く使われるのは、lilogrub です。設定ファイルは、それぞれ /etc/lilo.conf/etc/grub.conf です。 [1] 両者の違いの 1 つは、lilo で設定を変更した後、その設定を有効にするために lilo コマンドを実行する点です(grub ではそのような作業は 不要)。使い方は man ページを見てください。 lilo と Linux のブートシーケンスについては素晴らしい論文があります。 ftp://icaftp.epfl.ch/pub/people/almesber/booting/bootinglinux-0.ps.gz です。 grub については以下を御覧下さい。 www.gnu.org/software/grub

SCSI サブシステムに関連したブート時のパラメタは、下記の通りです。

 
 single         [シングルユーザーモードへ]
 <n>            [ランレベルを <n> {0..6} へ]
 root=/dev/sda6 [*]
 root=/dev/scsi/host0/bus0/target0/lun0/part6 [*]
 root=/dev/sd/c0b0t0u0p6   [*]
 devfs=mount    [CONFIG_DEVFS_MOUNT=n を上書き]
 devfs=nomount  [CONFIG_DEVFS_MOUNT=y を上書き]
 init=<command> [init ではなく、<command> の実行]
 quiet          [ブート時コンソール出力メッセージの抑制]
 debug          [ブート時コンソール出力メッセージの詳細化]
 nmi_watchdog=0 [SMP マシン上での NMI watchdog を停止]
 max_scsi_luns=1  [LUN が 0 に対してのみ SCSI バススキャンを行う]
* devfs を使っている場合、最初にリード・オンリーでルートパーティションを マウントする時は、これまでの /dev/sd<a><n> という表記とともに新しい devfs の表記も使用できます(ここでは両方示してあります)。 「root=/dev/sda6 single」という組み合わせは、ディスクもしくはアダプタ の変更によって、カーネルブート時のロードがおかしくなった時に役に立つでしょう。

「root=」の引数は 16 進数でも指定できます。例えばルートパーティションが /dev/sda3 にあれば、「root=803」が適切な表記となります。 後の 2 桁が以前の節で述べたマイナーデバイス番号です。

「init」パラメタのデフォルトの引数は /sbin/init です(man 8 の init を参照)。/etc/fstab のような ファイルに間違った項目があった場合は、「init=/bin/bash」でシェルに 直接落ちた方が便利でしょう。しかし共有ライブラリのファイルやそのパスが 適切でないと、これも失敗するかもしれません。そういう場合は、「init=/sbin/sash」 としましょう。これは静的にリンクされたシェルで、システムの修復に役立つ様々な コマンドが入っています(man 8 sash を参照)。

Linux は次のようなメッセージを出してブートに失敗することがあります。

  VFS: Cannot open root device 08:02
これは、カーネルが /dev/sda2 デバイスにルート パーティションがあることを期待したのに、そこにはなかったことを意味します。 エラーメッセージ中の数字は、デバイスのメジャー、マイナー番号(16 進数) です(デバイス名のマッピングについてはSection 3.2を参照)。 このような場合は「root」ブート・オプションが便利です(ブートイメージが ルートパーティションを探す場所を変更するには rdev コマンドも使えます)。

lilo の設定ファイル /etc/lilo.conf で「root=」オプション を指定するには 2 つの方法があります。通常は「root=/dev/sda2」という行を入れ ます。 この場合、lilo コマンドを実行した時 のシステムの状態に基づいて、/dev/sda2 はメジャー、 マイナー番号に変換されます。これは特にハードウェア構成を変更する場合には やっかいなことになりかねません。 もう一つの方法は、「append="root=/dev/sda2"」という行を入れる方法です。 この場合、/dev/sda2 はカーネルが次に起動する時に渡され ます。これはカーネルブート時に「root=/dev/sda2」文字列をコマンドライン のプロンプトに渡すのと同じです。 起動時にカーネルが解釈しますので(HBA と HBA に接続しているデバイスが認識されて いれば)、より柔軟に扱えます。

Notes

[1]

grub のちょっとした工夫の 1 つは、/etc/grub.conf/boot/grub/grub.conf へのシンボリックリンクである点 です。これは /boot が別パーティションになっている場合に、 知っておくと便利かもしれません。 【訳註: grub.conf、menu.list の位置や存在は、ディストリビューションによって 変わるようです】