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

6. FAQ - よくある質問

6.1 Q. boot/root ディスクを作ってブートしようとしたのですが、なにも起こりません。

これは初めて root ディスクを作る場合に誰もが乗り越えなければならない壁です。 原因を特定するのが非常に難しい場合もあります。それぞれの Linux システムでは ハードウェアが違うのが普通ですから、原因も様々です。しかしシステムになんら かの反応をさせるために最低限必要な設定というものもいくつかありますので、 この節ではそれを説明しましょう。

root ディスクを作成するには通常フィードバックの繰り返しが必要になりま す。カーネルやインストールに用いたパッケージなどが異なると必要な設定も 変わります。通常のブートプロセスでは、まずカーネルが /sbin/init を起動し、 init は次に実行すべきプロセスを知 るために /etc/inittab を見にいきます。しかし通常でない場合も あり得るわけで、最低限以下のマニュアルを読んでおく必要があります。

root ディスクを作成する際によく用いられる方針は、手持ちのシステムから 部品を取り出してフロッピーベースのシステムに詰め込み、コンソールにメッ セージが出るまで試行錯誤を繰り返すことです。メッセージが出れば半分勝っ たも同然です。後はシステムが文句を言わなくなるまで、一つ一つ問題を解決 していけば良いのです。

inittab が最も難しいかもしれません。なぜなら inittab の書式や内容は用 いている init プログラムやシステムの構成によって変わるからです。これを 解決するには init や inittab の man ページをしっかり読み、現在のシステ ムがブート時に行っていることを理解するほかはありません。

システムが反応しない場合、障害の原因を調べるには以下のような手続きを踏 むのが良いでしょう。

6.2 Q. XXX ドライバの入った boot ディスクを作るには?

最も簡単な方法は Slackware のカーネルを最寄りの Slackware のミラーサイ トから取ってくることです。 Slackware のカーネルは可能な限りたくさんの ドライバを詰め込んだ汎用のカーネルですから、 SCSI か IDE のコントロー ラがあれば必要なドライバが Slackware のカーネルに含まれている可能性は 高いでしょう。

手持ちのコントローラに合うように a1 ディレクトリから IDE または SCSI のカーネルを選びます。 xxxxkern.cfg ファイルを見て、選んだカーネルに必 要なドライバが含まれているかどうか確認して下さい。もし必要なデバイスが リストにあればそのカーネルであなたのコンピュータをブートできるはずです。 xxxxkern.tgz をダウンロードして boot ディスクにコピーして下さい。 boot ディスク の節で述べた方法を参考にして下さい。

次に以下の rdev コマンドを実行してカーネルのルートデバイスを確認して下 さい。

        rdev zImage 
rdev は現在のカーネルに設定されているルートデバイスを表示します。もし 希望するデバイスと異なる場合は再び rdev を使って変更します。例えば私が 試したカーネルでは /dev/sda2 が設定されていましたが、私のルートになる SCSI パーティションは /dev/sda8 です。 root ディスクを使うには、以下の コマンドを実行する必要があるでしょう。
        rdev zImage /dev/fd0

Slackware の root と同じようなディスクを作りたい、という質問はこの HOWTO の範囲を越えています。 Linux Install Guide を見るか、実際に Slackware のパッケージを手に入れて下さい。この HOWTO の 参考文献 の節に入手法が書いてあります。

6.3 Q. カーネルを新しくしたら boot フロッピーはどのように変更すれば良いですか?

新しいカーネルをブートさせるディスクにコピーさせるだけです。 boot ディ スクの場合は dd コマンドを、 boot/root ディスクの場合は cp コマンドを 使います。 boot ディスクの作成に関しては、 boot ディスク の節を参照して下さい。ここに書いてある方法は boot ディスクのカーネルを 更新する場合にも使えます。

==訳注==
boot/root ディスクの場合は LILO を実行しておく必要があります。

6.4 Q. DOS をブートさせるために LILO を削除したいのですが。

ほんとは boot ディスクとは関係ない話なんですが、非常によく聞かれる質問 です。答えは以下の DOS のコマンドを用いることです。

        FDISK /MBR

MBR は Master Boot Record の略です。このコマンドによってブートセクタが DOS のものに置き変わります。このときパーティションテーブルは変わりませ ん。この方法に反対するコチコチの Linux 教徒もいますが、 LILO の著者で ある Werner Almesberger は賛成派です。簡単ですし、ちゃんと機能します。

dd コマンドを使って LILO によってセーブされていたバックアップを書き込 む方法もあります - この方法を用いたい場合は LILO の文書を参照して下さ い。

6.5 Q. カーネルもブートディスクも無くしてしまった場合はどうやってブートさせれば良いですか?

ブートディスクを用意していなかった場合には、おそらく Slackware のカー ネルを利用するのが一番簡単でしょう。お使いのディスクコントローラのタイ プ(IDE か SCSI か)に合う方を使って下さい。内容に関しては XXX ドライバの入った boot ディスクを作るには... のところに書いてあります。このカーネルでコンピュータがブートできたら障 害を復旧して下さい。

取ってきたカーネルでは、ルートデバイスがお望みのディスクやパーティショ ンになっていないかもしれません。例えば Slackware の SCSI カーネルでは ルートのデバイスは /dev/sda2 になっています。しかし例えば私の Linux パー ティションは /dev/sda8 です。このような場合にはカーネルのルートデバイ ス設定を変更しなければなりません。

Linux のシステムがなくても、カーネルのルートデバイスや RAM ディスクの設 定は変更することができます。 DOS などの OS があれば OK です。

rdev はカーネルファイルの決まったオフセットアドレスの部分の値を書き換 えています。どんなシステムであれ、バイナリエディタさえあれば同じことが できます。例えば DOS でしたらノートンユーティリティのディスクエディタ などが使えます。カーネルの以下のオフセットアドレスの値を調べて、必要で したら変更して下さい。

0x01F8  ramdisk 変数の低位バイト
0x01F9  ramdisk 変数の高位バイト
0x01FC  ルートデバイスのマイナー番号 - 以下で説明します
0X01FD  ルー土デバイスのメジャー番号 - 以下で説明します

ramdisk 変数は作成する RAM ディスクのブロック数を表します。非圧縮の root フロッピーからブートさせる場合には、この値は 1440(10進)にすれば 良いでしょう。これは 16進では 0x05A0 ですから、オフセット 0x01F8 は 0xA0 に、またオフセット 0x01F9 は 0x05 にセットして下さい。これで 1.4 メガのフロッピーには十分な容量が割り当てられます。

1.3.48 以降のカーネルでは ramdisk 変数の意味が変わっていることに注意し て下さい。変更された内容に関しては ブートディスク作成上級編 で触れています。

メジャー番号、マイナー番号はルートファイルシステムをマウントするデバイ スの番号にセットします。良く使われる番号を以下に挙げておきます。

デバイス    major   minor
/dev/fd0        2       0   第 1 フロッピードライブ
/dev/hda1       3       1   第 1 IDE ドライブの第 1 パーティション
/dev/sda1       8       1   第 1 SCSI ドライブの第 1 パーティション
/dev/sda8       8       8   第 1 SCSI ドライブの第 8 パーティション

これらの値を設定したら、カーネルファイルをフロッピーに書き込みます。ノー トンユーティリティのディスクエディタや、 rawrite.exe と呼ばれる DOS コ マンドが使えます。これは SLS と Slackware の配布パッケージに入っており、 ディスクを raw デバイスとみなしてブートセクタからファイルを書き込みま す。ノートンユーティリティを使う場合にはファイルを物理ディスクの先頭か ら書き込む必要があります。

6.6 Q. boot/root ディスクをコピーするのはどうやれば良いですか?

確かにレスキューディスクは 1 組以上作っておくのが望ましいでしょう。 1 組ではたまたまそれが不良だったりしたら困ってしまいますものね。

ブートディスクやユーティリティのフロッピーをコピーする最も簡単な方法は、 dd コマンドを使ってオリジナルのフロッピーの内容をハードディスクのファ イルにコピーし、それをまた dd コマンドで別のフロッピーに書き戻すやり方 です。 dd コマンドは raw デバイスへの書き込みができますからフロッピー をマウントする必要はありません(してはいけません)。

オリジナルをコピーするには次のコマンドを用いて下さい。

        dd if=devicefile of=filename
ここで devicefile はオリジナルのフロッピーが入っているドライブのデバイ ス名で、 filename はコピーするファイルの名前です。

例えば /dev/fd0 から /tmp/diskette.copy という一時ファイルへコピーする 場合は次のようになるでしょう。

       dd if=/dev/fd0 of=/tmp/diskette.copy

このように "count" パラメータを省略すると、ディスク全体の 2880 ブロック(高密度フロッピーの場合)がコピーされます。

一時ファイルを新しいフロッピーに書き戻すには、新しいフロッピーを入れて 次のコマンドを実行します。

       dd if=filename of=devicename

ここまで述べてきた内容はフロッピードライブがひとつしかない場合です。も し同じドライブが 2 つある場合には、次のようなコマンドを使えば直接フロッ ピー間でコピーができます。

       dd if=/dev/fd0 of=/dev/fd1

6.7 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 宣言を使うと、パーティションに障害を与えること もあり得ます。

6.8 Q. RAM ディスクにフロッピーよりも大きいファイルシステムを作るには?

1.3.48 以降のカーネルでは ブートディスク作成上級編 で述べた方法で圧縮ファイルシステムをつくるのが良いでしょう。あなたのカー ネルがこれ以前のバージョンの場合は、カーネルをアップグレードするか、こ の HOWTO 文書の 2.0 版以前のものを参照して下さい。

6.9 Q. ブート時に A: cannot execute B といったエラーが出ます。

あるユーティリティが他のプログラムを起動する場合、そのプログラムの名前 がユーティリティの内部にハードコーディングされていることがあります。こ のような場合 は実際にプログラムがあってもユーティリティには見えないということが起こ ります。 string コマンドを用いた出力をパイプで grep につなげば、問題を 起こすユーティリティがどんな名前で他のプログラムを使っているか知ること ができます。

例としては以下のようなものが知られています。

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

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

このようなことが起こる場合は

Ramdisk driver initialized : 16 ramdisks of 0K size
のようなカーネルメッセージがブート時に現われます。

通常 RAM ディスクが作成される場合、そのサイズはデフォルトの 4096K か、 またはカーネルパラメータの ramdisk_size や ramdisk で指定された値にな ります。

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

ramdisk 0

古い配布パッケージでは LILO の設定ファイルのサンプルにこの行が入ってい ることがあります。この行はカーネルでの設定より優先されてされてしまいま す。

1.3.48 以降のカーネルではこの問題は関係ありません。なぜならカーネルパ ラメータ ramdisk_size は RAM ディスク容量の最大値を指定するものであり、 ブート時に割り当てられるサイズを指定するものではないからです。ブート時 には RAM ディスクへはメモリの割り当てはされません。

というわけで、この質問への回答は LILO の ramdisk パラメータを削除する こと、です。

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


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