Q. boot/root ディスクからブートさせたのですが,何も起こりません.どう すればよいでしょう?
本文書の トラブルシューティングの章を ご覧ください.
Q. Slackware や Debian, RedHat のブートディスクはどのようにして動 いているのですか?
プロが使う方法の章をご覧ください.
Q. XYZ ドライバが入ったブートディスクを作るには?
最も簡単な方法は Slackware のカーネルを最寄りの Slackware のミラーサイ トから取ってくることです. Slackware のカーネルは可能な限りたくさんの ドライバを詰め込んだ汎用のカーネルですから, SCSI か IDE のコントローラ がすでに存在するなら,そのドライバが Slackware のカーネルに含まれている 可能性は高いでしょう.
手持ちのコントローラに合うように a1
ディレクトリから IDE または
SCSI のカーネルを選びます. xxxxkern.cfg ファイルを見て,選んだカーネ
ルに必要なドライバが含まれているかどうか確認してください.もし必要なデ
バイスがリストにあればそのカーネルであなたのコンピュータをブートできる
はずです. xxxxkern.tgz をダウンロードし,ブートディスクの作成方法の章
で説明したやり方でディスクにコピーしてください.
次に以下の rdev コマンドを実行してカーネルのルートデバイスを確認してく ださい:
rdev zImage
rdev
は現在のカーネルに設定されているルートデバイスを表示します.
もし希望するデバイスと異なる場合は再び rdev
を使って変更します.
例えば私が試したカーネルでは /dev/sda2 が設定されていまし
たが,私のルートになる SCSI パーティションは /dev/sda8 で
す. root ディスクを使うには,以下のコマンドを実行する必要があるでしょ
う.
rdev zImage /dev/fd0
Slackware の root と同じようなディスクを作りたい,という質問はこの HOWTO の範囲を越えています. Linux Install Guide を見るか,実際に Slackware のパッケージを手に入れてください.入手方法はこの HOWTO の参 考文献の章に書いてあります.
Q. カーネルを新しくしたらブートフロッピーはどのように変更すればよいでしょう?
新しいカーネルをブートさせるディスクにコピーするだけです.ブートディス クの場合は dd コマンドを, ブート/ルートディスクの場合は cp コマンドを 使います. ブートディスクの作成に関しては,``Boot'' の章を参照してくだ さい.ここに書いてある方法はブートディスクのカーネルを更新する場合にも 使えます.
訳注: ブート/ルートディスクの場合は LILO を実行しておく必要があります.
Q. どうすればルートディスクのファイルを新しくできるでしょう?
最も楽な方法は,ファイルシステムをルートディスクから自分が使っているデ バイスにコピーすることです(前述の ファイルシステムの作成 の節を参照し てください).次にファイルシステムをマウントし,変更を行います.このと き,ルートファイルシステムが始まる位置と使用するブロック数はメモしてお きましょう.
dd if=/dev/fd0 bs=1k skip=ROOTBEGIN count=BLOCKS | gunzip > DEVICE mount -t ext2 DEVICE /mnt
変更が終わったら,前述( 仕上げ の節)の手 順でルートファイルシステムをディスクに書き戻します.新しいルートファイ ルシステムの開始位置を変更しない限り,カーネルの転送し直しや,ramdisk 変数の再計算の必要はありません.
Q. DOS をブートさせるために LILO を削除したいのですが.
本当はブートディスクとは関係ない話なんですが,非常によく聞かれる質問で す.Linux では次のコマンドを実行してください:
/sbin/lilo -u
LILO が保存したバックアップを dd
コマンドを使ってブートセクタにコ
ピーすることもできます.この方法については LILO の文書を参照してください.
DOS や Windows では次のコマンドを使います:
FDISK /MBR
MBR は Master Boot Record の略です.このコマンドによってブートセクタが DOS のものに置き変わります.このときパーティションテーブルは変わりませ ん.この方法に反対するコチコチの Linux 教徒もいますが, LILO の作者で ある Werner Almesberger は賛成派です.簡単ですし,ちゃんと機能します.
Q. カーネルもブートディスクもまとめて無くしてしまいました.どうしましょう?
ブートディスクを用意していなかった場合には,おそらく Slackware のカー ネルを利用するのが一番簡単でしょう.お使いのディスクコントローラのタイ プ(IDE か SCSI)に合う方を使ってください.内容に関しては「XYZ ドライバが 入ったブートディスクを作るには?」のQ&Aに書いてあります.このカーネ ルでコンピュータがブートできたら障害を直してください.
取ってきたカーネルでは,ルートデバイスが希望のディスクやパーティション になっていないかもしれません.例えば Slackware の SCSI カーネルではルー トのデバイスは /dev/sda2 になっています.しかし例えば私の Linux パーティションは /dev/sda8 です.このような場合には カーネルのルートデバイス設定を変更しなければなりません.
Linux のシステムがなくても,カーネルのルートデバイスや RAM ディスクの 設定は変更することができます. DOS などの OS があれば OK です.
rdev
はカーネルファイルの決まったオフセットアドレスの部分の値を書
き換えています.ですから,どんなシステム上のものでもバイナリエディタさ
えあれば同じことができます.例えば DOS なら,ノートンユーティリティの
ディスクエディタなどが使えます.カーネルの以下のオフセットアドレスの値
を調べて,必要に応じて変更します:
16進 10進 説明
0x01F8 504 ramdisk 変数の下位バイト
0x01F9 505 ramdisk 変数の上位バイト
0x01FC 508 ルートデバイスのマイナー番号 -- 以下で説明します
0X01FD 509 ルートデバイスのメジャー番号 -- 以下で説明します
ramdisk 変数の意味は ramdisk 変数の設定 の節で既に説明しています.
メジャー番号とマイナー番号はルートファイルシステムをマウントするデバイ スの番号にセットします.良く使われる番号を以下に挙げておきます:
デバイス メジャー マイナー
/dev/fd0 2 0 最初のフロッピードライブ
/dev/hda1 3 1 最初の IDE ドライブのパーティション1
/dev/sda1 8 1 最初の SCSI ドライブのパーティション1
/dev/sda8 8 8 最初の SCSI ドライブのパーティション8
これらの値を設定したら,カーネルファイルをフロッピーに書き込みます.ノー
トンユーティリティのディスクエディタや, rawrite.exe
と呼ばれる
DOS コマンドが使えます.このプログラムはほとんどのディストリビューショ
ンに入っています.ディスクを raw デバイスとみなしてブートセクタからファ
イルを書き込みます.ファイルシステムとしては扱いません.ノートンユーティ
リティを使う場合にはファイルを物理ディスクの先頭から書き込む必要があり
ます.
Q. ブート/ルートディスクをコピーする方法を教えてください.
磁気メディアは経時劣化しますから,オリジナルが壊れたときのために予備の レスキューディスクを何枚か欲しいところです.
ブートディスクやユーティリティのフロッピーをコピーする最も簡単な方法は,
dd
コマンドを使ってオリジナルのフロッピーの内容をハードディスクの
ファイルにコピーし,それをまた dd
コマンドで別のフロッピーに書き
戻すやり方です. dd
コマンドは raw デバイスへの書き込みができます
からフロッピーをマウントする必要はありません(逆にマウントしてはいけま
せん).
オリジナルをコピーするには次のコマンドを用います:
dd if=DEVICENAME of=FILENAME
ここで DEVICENAME はディスクドライブのデバイス名であり,
FILENAME は(ハードディスク上の)出力ファイル名です
このように count
パラメータを省略すると,ディスク全体である2880
ブロック(高密度フロッピーの場合)がコピーされます.
一時ファイルを新しいフロッピーに書き戻すには,新しいフロッピーを入れて 次のコマンドを実行します:
dd if=FILENAME of=DEVICENAME
ここまで述べてきた内容はフロッピードライブがひとつしかない場合です.も し同じドライブが 2 つある場合には,次のようなコマンドを使えば直接フロッ ピー間でコピーができます:
dd if=/dev/fd0 of=/dev/fd1
Q. ブートのたびに "ahaxxxx=nn,nn,nn" と打ち込むのは面倒です.
例えば SCSI デバイスが自動的に検出されないような場合には,カーネルに以 下のようなパラメータ文字列を与えてやる必要があります:
aha152x=0x340,11,3,1
LILO を用いてこのパラメータ文字列をカーネルに渡すにはいくつかの方法が
あります:
lock
'' キーワードを用いて,コマンドラインから打ち
込んだパラメータをデフォルトにする.次からのブートでは LILO は毎回同じ
オプションを使うようになります.
append=
宣言を使う.パラメータ文字列
は引用符で囲む必要があることに注意してください.コマンドラインからパラメータ文字列を打ち込む場合は以下のようになるでしょ う:
zImage aha152x=0x340,11,3,1 root=/dev/sda1 lock
これはデバイスのパラメータ文字列を渡し,カーネルにルートデバイスを /dev/sda1 にするよう指示し,さらにこのコマンドライン全体 を保存して次からのブートで再び用いるようにしています.
APPEND 宣言の例を以下に示します:
APPEND = "aha152x=0x340,11,3,1"
コマンドラインではパラメータ文字列は引用符で囲ってはいけません.逆に APPEND 宣言では引用符で囲わなければいけません.間違えないように.
パラメータ文字列を機能させるにはカーネルにドライバが含まれていなければ なりません.含まれていなければそもそもパラメータを受け取るものがないの ですから,必要なドライバを含んだカーネルを再構築する必要があります.カー ネル再構築の詳細については /usr/src/linux ディレクトリの README や, Linux FAQ, Installation HOWTO などをお読みください.また は必要なドライバを含んだ汎用のカーネルを手に入れ,それを使ってください.
LILO をインストールする前に LILO の付属文書を読んでおくことを強くお薦
めします.不用意に BOOT
宣言を使うと,パーティションを壊すことも
ありえます.
Q. ブート時に A: cannot execute B といったエラーが出ます.
あるユーティリティが他のプログラムを起動する場合,そのプログラムの名前
がユーティリティの内部にハードコードされていることがあります.こ
のような場合は,実際にプログラムがあってもユーティリティには見えないと
いうことが起こります. strings
コマンドを用いた出力をパイプで
grep
につなげば,問題を起こすユーティリティがどんな名前で他のプロ
グラムを使っているかがわかります.
ハードコードの例として以下のようなものが知られています:
/etc
に置く必要が
あります.
init
を見付けられないという問題が起こったことが
あります.
これらの問題を解決するにはプログラムを正しいディレクトリに移動するか,
もしくは inittab
のような設定ファイルの方を変更する必要があります.
もし疑わしい場合には現在ハードディスクで使っているのと同じディレクトリ
構成, inittab
, /etc/rc.d を使ってみることです.
Q. 私のカーネルは RAM ディスク機能をサポートしているのに RAM ディスクのサイズが 0K になってしまいます.
このようなことが起こる場合は,カーネルの起動時に次のようなメッセージが 表示されます:
Ramdisk driver initialized : 16 ramdisks of 0K size
これはおそらくブート時にこのサイズがカーネルパラメータで 0 に設定され ているためでしょう. LILO の設定ファイルに以下のような行がありませんか?
ramdisk= 0
古いディストリビューションの一部では LILO の設定ファイルのサンプルにこ の行が入っていることがあります.この行はカーネルでの設定より優先されて しまいます.このような行があれば削除しましょう.
サイズ 0 の RAM ディスクを使用した場合の結果は予測できません.カーネル パニックが起こることもありえます.