次のページ 前のページ 目次へ

10. FAQ(よくある質問)リスト

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 を用いてこのパラメータ文字列をカーネルに渡すにはいくつかの方法が あります:

コマンドラインからパラメータ文字列を打ち込む場合は以下のようになるでしょ う:

        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 につなげば,問題を起こすユーティリティがどんな名前で他のプロ グラムを使っているかがわかります.

ハードコードの例として以下のようなものが知られています:

これらの問題を解決するにはプログラムを正しいディレクトリに移動するか, もしくは inittab のような設定ファイルの方を変更する必要があります. もし疑わしい場合には現在ハードディスクで使っているのと同じディレクトリ 構成, inittab, /etc/rc.d を使ってみることです.

Q. 私のカーネルは RAM ディスク機能をサポートしているのに RAM ディスクのサイズが 0K になってしまいます.

このようなことが起こる場合は,カーネルの起動時に次のようなメッセージが 表示されます:

        Ramdisk driver initialized : 16 ramdisks of 0K size

これはおそらくブート時にこのサイズがカーネルパラメータで 0 に設定され ているためでしょう. LILO の設定ファイルに以下のような行がありませんか?

ramdisk= 0

古いディストリビューションの一部では LILO の設定ファイルのサンプルにこ の行が入っていることがあります.この行はカーネルでの設定より優先されて しまいます.このような行があれば削除しましょう.

サイズ 0 の RAM ディスクを使用した場合の結果は予測できません.カーネル パニックが起こることもありえます.


次のページ 前のページ 目次へ