デバイスやペリフェラルに依存しない引数もあります。これらは、特定の内部 カーネルパラメータに関連しています。たとえば主記憶の取り扱い、 RAM ディスクの取り扱い、ルートファイルシステムの取り扱いなどです。
以下のオプションは、カーネルがどのルートファイルシステムを選ぶか、 また、どのように使用するかに関連しています。
この引数はカーネルに起動時にどのデバイスをルートファイルシステムとして 使用するかを指定します。省略時の設定は、システムのカーネルが組み込 まれていたルートデバイスです。例えば、問題のカーネルが '/dev/hda1' に組 み込まれて いたなら、省略時のルートデバイスは、 '/dev/hda1' です。この省略時値では なく 2 番目のフロッピーをルートデバイスとして使用するとき には 'root=/dev/fd1' を 使用して下さい。
以下に有効なルートデバイスを示します。
(1) ST-506 互換ディスク a から d のパーティション N である、/dev/hdaN から /dev/hddN
(2) SCSI 互換ディスク a から e のパーティション N である、/dev/sdaN から /dev/sdeN
(3) XT 互換ディスク a から b のパーティション N である、/dev/xdaN から /dev/xdbN
(4) フロッピードライブ番号 N である、/dev/fdN 。N=0 なら DOS の A: ドライブで、N=1 なら B:。
(5) /dev/nfs は本当のドライブではないが、カーネルにネットワークから ルートファイルシステムを持ってくるよう指示するためのフラグとして働く。
不細工で可搬性にかけますが、上に挙げた有効なディスクデバイスをメジャー/マ イナー 番号で指定する方法も許されています(例えば /dev/sda3 はメジャー番号 8、マイナー番号 3 ですので、root=0x803 とも指定できます)。
root= は、カーネルが内部に省略時の値を持っている起動時引数の一つです。
したがって、 ttrdev
ユーティリティーで変更することができます。
カーネルの起動時、基本的な部分を読み込むためのルートファイルシステムが 必要になります。このファイルシステムは、起動時にマウントされたものを そのまま使います。しかし、このファイルシステムが読み書き可能な状態で マウントされていると、書き込み途中のファイルがあるため、ファイルシステムの 一貫性を確実に調べることができません。'ro'オプションは、カーネルに対して ルートファイルシステムを「読み出専用」でマウントするよう指示しますので、 ファイルの一貫性を調べるプログラム (fsck) は調査中に書き込みと中のプログラム が 無い物と仮定して安全に調べることができます。当該ファイルシステムは 読み書き可能を指定して再マウントされるまで、あらゆるプログラムの書き込み から保護されています。
ro= は、カーネルが内部に省略時の値を持っている起動時引数の一つです。
したがって、 rdev
ユーティリティーで変更することができます。
これは上で説明したものとは正反対で、カーネルにルートファイルシステムを 読み書き可能としてマウントすることを指示します。読み書き可能でマウント されているファイルシステムに "fsck" の類を適用してはいけません。
上の節で説明したカーネルイメージの中の値が、このパラメータでも使用されてい
ます。そのため、rdev
を使用して変更することができます。
以下のオプションは、すべてカーネルが RAM ディスクをどのように扱うか を指定します。RAM ディスクは導入時の機械の起動に用いられたり、ルート ファイルシステムを読み書きするのにモジュール化されたドライバを必要とする 機械で使用されます。
カーネルイメージをフロッピーディスクに置いて圧縮 ramdisk イメージととも に配置するには、 "ramdisk_start=<offset>" コマンドを追加します。カーネルを圧縮 ramdisk イメージに含めることはできません。というのは、BIOS にブートセクターを 読ませてカーネル自身を起動するには、ブロック 0 からの位置に配置しないと いけないからです。
Note:非圧縮の ramdisk イメージを使用する場合には、カーネルを ramdisk に 読み込むファイルシステムイメージの一部とすることができます。そうして フロッピーを LILO から起動できます。もちろん、イメージを圧縮イメージの 時と同じように 2 つに分けておくこともできます。
2 ディスクによる boot/root 構成(ディスク 1 にカーネル、ディスク 2 に ramdisk イメージ)をとる場合には、ramdisk はブロック 0 に配置し、 オフセットとして 0 を指定します。これは省略時設定ですので、実際には このような指定をする必要はありません。
この引数はカーネルに ramdisk イメージを読み込むか読み込まないかを 指示します。"load_ramdisk=1" は、カーネルにフロッピーを ramdisk に 読み込むよう指示します。省略時の値は 0 で、カーネルは ramdisk イメージ を読もうとしません。
最新の起動時引数とその使用方法は、linux/Documentation/ramdisk.txt を参照し て ください。"rdev" をつかってこの引数をどのようにカーネルイメージに設定する かについても、ここに書いてあります。
このパラメータは利用者に対して ramdisk イメージが入った フロッピーを挿入するよう指示するかどうかをカーネルに指定します。 フロッピー 1 枚での構成であれば、ramdisk イメージはロード/起動用の カーネルが入っているのと同じフロッピーに入っていますから、プロンプトは 不要です。この場合は、"prompt_ramdisk=0" とします。フロッピー 2 枚での 構成であれば、フロッピーを差し替える操作が必要です。ですから、 "prompt_ramdisk=1" とします。これは省略時の値でもありますから、 実際には指定する必要はありません( 歴史的な点に関する注釈:悪知恵の 働く人たちは、ブートフロッピーから差し替えるための機会を作るために LILO オプション "vga=ask" を使っていました)。
最新の起動時引数とその使用方法は、
linux/Documentation/ramdisk.txt
を
参照して
ください。"rdev" をつかってこの引数をどのようにカーネルイメージに設定する
かについても、ここに書いてあります。
ramdisk は乞われるまま動的に大きくなっていきますから、大きさの上限が 設けられています。このおかげで、有効な RAM を全部使い切って、利用者 がわけのわからない災難にあうことがないようになっています。省略時の 上限は 4096 (つまり 4MB) で、これでほとんどの場合は十分なはずです。 "ramdisk_size=" 起動時引数を使うと、この値を好きな値に変更することが できます。
最新の起動時引数とその使用方法は、linux/Documentation/ramdisk.txt を参照し て ください。"rdev"をつかってこの引数をどのようにカーネルイメージに設定する かについても、ここに書いてあります。
(注釈:この引数は廃止されます。また、カーネル v1.3.47 および それより前のカーネルにだけ使用して下さい。 ramdisk デバイス用に使用すべきコマンドは上に 説明した通りです。)
これは、RAM ディスクの大きさを kB で指定します。例えば、ルートファイル システムを 1.44MB フロッピーに置いて RAM ディスクにロードしたいときには、 以下のようにします。
ramdisk=1440
"ramdisk=" は、カーネルが内部に省略時の値を持っている起動時引数の一つです。
したがって、 rdev
ユーティリティーで変更することができます。
v2.x 以降のカーネルはルートファイルシステムを当初 RAM ディスクに置いて、
カーネルに /linuxrc
を RAM イメージ上で走らせる事ができます。この
機能が
使われるのは、普通ルートファイルシステムをマウントするのに必要なモジュール
をローディングできるようにする場合です(例えば、SCSI ドライバモジュールを
RAM ディスクイメージに読み込んで、SCSI 上の本当のルートファイルシステムを
読むような場合です)。
実際の "noinitrd" 引数はカーネルが起動した後に initrd に何がおきるかを
指示します。これが指定された場合、通常は RAM ディスクがシステムに返却され
る前にだけ読むことができる initrd を
/dev/initrd
を通して扱うことが可能になります。このばあい、
initrd は RAM ディスクには変換されません。
詳細は linux/Documentation/initrd.txt
を
参照して下さい。また、LILO
や LOADLIN
の最新版は有用な情報を持っ
ています。
以下の引数は、Linux がシステムの物理および仮想メモリを 検出し、取り扱う方法を変更します。
この引数には二つの目的があります。本来の目的は組み込まれている
主記憶の総量(か、Linux に全部を渡したくなければ総量より小さい
数)を指定することでした。二番目の(そしてあまり使われない)目的は
Linux カーネルに 4MB ページテーブル機能を遣わせないようにする
mem=nopentium
です。
PC の仕様における本来の BIOS 呼び出しは、組み込まれている主記憶の総量を 最大 64MB までしか報告できないよう設計されています( そう、1024 シリンダー ディスクと同種の、将来に関する洞察力の欠如です…タメイキ)。Linux は起動時に どのくらいの量の主記憶が組み込まれているか調べるために、この BIOS 呼び出し を 使用します。もし 64MB 以上の主記憶を組み込んでいるならば、Linux にどれだけ の 主記憶が組み込まれているかを知らせるために "mem=" 起動時引数を使用できます 。 "mem=" 引数の用法に関する Linus の言葉を引用しましょう。
「カーネルは与えられた "mem=xx" 引数をどのようなものであれ受け付けます。 そしてあなたが嘘をついたと知ると、遅かれ早かれクラッシュします。 この引数は最上位の利用可能な RAM アドレスを示します。ですから、 "mem=0x1000000" は、16MB の主記憶があることを意味します。96MB の 機械なら、これは "mem=0x6000000" です。
注意、注意、注意:主記憶の最上位を BIOS キャッシングなんかに 使っている機械もあります。ですから、多分実際には 96MB 全部を利用 可能にはならないでしょう。逆もまた真です:BIOS 領域と重複する主記憶を 最上位主記憶に連結するチップセットもあります。この場合、主記憶の 最上位は、実際には 96MB + 384kB になるかもしれません。Linux に実際に ある以上の主記憶があるように指示すると、まずいことがおきるでしょう。 すぐに起きないかもしれませんが、間違いなくそのうちに起きます。」
引数は必ずしも16進である必要はありません。また、後ろに "k" や "M"(大文字小文字 は 関係ありません)をつけると、それぞれキロバイトとメガバイトを表します("k"は 値を10ビットシフトさせ、"M" は20ビットシフトさせます)。先の警告はこの場合で も 生きています。96MB の機械は mem=97920k では動くかもしれませんが、 mem=98304k や mem=96M ではだめでしょう。
これは利用者が仮想記憶のパラメータをいじることを許します。仮想記憶は ディスクへのスワッピングと関連しています。この引数は以下のように 8つのパラメータを受け取ります。
MAX_PAGE_AGE PAGE_ADVANCE PAGE_DECLINE PAGE_INITIAL_AGE AGE_CLUSTER_FRACT AGE_CLUSTER_MIN PAGEOUT_WEIGHT BUFFEROUT_WEIGHT
興味のあるハッカーは linux/mm/swap.c
を読んで下さい。
また、/proc/sys/vm
の
なかのもののノートを取るといいでしょう。
"swap=" と同様の引数です。これは、利用者がバッファーメモリー管理に関する パラメータを いじることを許します。これは以下の 6 つのパラメータを受け付けます。
MAX_BUFF_AGE BUFF_ADVANCE BUFF_DECLINE BUFF_INITIAL_AGE BUFFEROUT_WEIGHT BUFFERMEM_GRACE
興味のあるハッカーは linux/mm/swap.c
を読んで下さい。
また、/proc/sys/vm
の
なかのもののノートを取るといいでしょう。
Linux はルートファイルシステムを NFS (Network File System)から取得するような
ディスクレスワークステーションと呼ばれるシステムに対応しています。以下の引
数は
システムを他所から持ってくるディスクレスワークステーションに対して使用しま
す。
また、引数 root=/dev/nfs
が必要になります。NFS ルート
ファイルシステムに関する
詳細な情報は、linux/Documentation/nfsroot.txt
にあります。
以下の説明はこのファイル
からの要約にすぎません。元のファイルを読んで下さい。
この引数はカーネルにどの機械、どのディレクトリ、どの NFS オプションを ルートファイルシステムとして使用するか指示します。この引数の書式は 以下の通りです。
nfsroot=[<server-ip>:]<root-dir>[,<nfs-options>]
nfsroot 引数がコマンドラインから与えられない場合、省略時の値として "/tftpboot/%s" が使用されます。その外のオプションは以下の通りです。
<server-ip> -- NFS サーバーの IP アドレスを指定します。これが 与えられていない場合、既定の値として nfsaddrs (詳細は後述)変数が使用されま す。 この引数の用途は RARP と NFS が与える物とは異なるサーバーを指定することです 。 普通はこの部分は無指定欄として放っておいてかまいません。
<root-dir> -- ルートとしてマウントするサーバー上のディレクトリの名前です。 文字列内部に "%s" が使用されている場合には、この部分がクライアントの IP アドレスの ASCII 文字列表現で置き換えられます。
<nfs-options> -- 標準の NFS オプションです。すべてのオプションはコンマで 区切られます。このオプションが与えられない場合には、以下の省略時の値が 使用されます。
port = as given by server portmap daemon rsize = 1024 wsize = 1024 timeo = 7 retrans = 3 acregmin = 3 acregmax = 60 acdirmin = 30 acdirmax = 60 flags = hard, nointr, noposix, cto, ac
この起動時引数はネットワーク越しに通信を行うために必要なネットワーク インターフェースアドレスを設定します。この引数が与えられない場合、カーネル は RARP か BOOTP の何れか、または双方を使用してこの値を得ようとします。 形式は以下の通りです:
nfsaddrs=<my-ip>:<serv-ip>:<gw-ip>:<netmask>:<name>:<dev>:<auto>
<my-ip> -- クライアントの IP アドレスです。無指定の場合はアドレスが RARP か BOOTP によって決定されます。どのプロトコルが使用されるかは、 カーネル構成の時に何が有効にされたかと、<auto> パラメータによります。 このパラメータが無指定でなければ、RARP も BOOTP も使用されません。
<serv-ip> -- NFS サーバーの IP アドレスです。クライアントアドレスを決定するのに RARP が用いられていてこのパラメータが無指定ではない場合、指定したサーバー からの応答だけが受け付けられます。異なる RARP および NFS サーバーを使用 したい場合には、ここで RARP サーバーを指定(あるいは無指定にしておいて)して 、 nfsroot パラメータで NFS サーバーを指定して下さい。このパラメータが無指定 の 場合、サーバーアドレスは RARP か BOOTP 要求に対して返答したサーバー のものが使用されます。
<gw-ip> -- サーバーが違うサブネットにある時に指定するゲートウェイアドレス です。これが無指定で値が BOOTP によって受信されなければ、ゲートウェイは使 用されずサーバーはローカルなネットワークにあるものと仮定されます。
<netmask> -- ローカルネットワークインターフェースのネットマスクです。 これが無指定で値が BOOTP によって受信されなければクライアントの IP アドレス から推定されます。
<name> -- クライアントの名前です。BOOTP によって受信された値か、 クライアント IP アドレスの ASCII 表記が使用されます。
<dev> -- 使用するネットワークデバイスの名前です。これが無指定の場合には、 すべての機器が RARP に使用され、最初に見つかったものが BOOTP に使用され ます。NFS には、RARP か BOOTP のうち返事が返ってきたものが使用されます。 機器が一つしかないなら、これを無指定にしても大丈夫です。
<auto> -- 自動構成の方法を指定します。この引数が "rarp" か "bootp" の時には、 指定されたプロトコルが使用されます。値が "both" か無指定の時には、 カーネル構成時に有効にされたとおり、両者が用いられます。"none" を指定 すると、自動構成を行いません。この場合、既に説明した引数をすべて 自分で設定しなければなりません。
<auto> パラメータは nfsadrs 引数の値として単独で(先立つ":"なしで)使用 するこ ともできます。この場合、自動構成が行われます。しかし、ここでは値 "none" は許されません。
カーネル内部のパラメータをいじるための多種にわたる起動時引数が 用意されています。
カーネルは利用者に対して重要な(あるいはそうでもない)メッセージを
printk()
関数を通して提示します。メッセージが重要な場合、
printk()
関数はコンソールに klogd()
機能と同様に
そのメッセージを表示します。したがって、そのメッセージはディスクに
記録されることになります。ディスクに記録を保管するだけでなくコン
ソールに表示するのは、不幸にしてメッセージがディスクに記録されず
失われるような場合(例えばディスクエラーとか)を考慮してのことです。
何が重要で何が重要でないかの判断の敷居値は console_loglevel
変数
によって決まります。省略した場合は、DEBUG
(レベル7)よりも重要
なものをコンソールに送ります(こういうレベルはインクルードファイル
kernel.h
に定義されています)。debug
を起動時引数として
与えると、コンソールログレベルを 10 に設定します。その結果、
すべての カーネルメッセージがコンソールに現れます。
通常コンソールログレベルは klogd()
プログラムのオプションとして
実行時に設定されます。どのようにするかは、システムの man ページを
参照してください。
カーネルは、無指定の場合には起動時に "init" プログラムの実行を開始
させます。このプログラムは getty プログラムを起動したり "rc" スクリプト
を走らせることによって、利用者のためにコンピュータの設定を行います。
カーネルは最初に /sbin/init
(このファイルは使わないほうがいいでしょう)
を見、次に /etc/init
を
見、最後に /bin/sh
(多分 /etc/rc
にあります)を
走らそうとします。例えば、init プログラムに何らかの不具合があり、そのために
起動中に停止してしまうような場合、単にブートプロンプトで
init=/bin/sh
とかけば、起動時にはなっから shell に
入ることができます。この結果、不具合を取り除くことができます。
i387 コプロセッサの中には 32 ビット保護モードで発現するバグを 持ったものがあります。例えば、初期の ULSI-387 恐らくは FRSAV/FRRESTOR 命令のバグによって浮動小数点計算の実行中に凍り付いてしまいます。 "no387" 起動時引数を受け取ると、Linux はたとえ組み込まれていても、 数値演算コプロセッサを無視します。もちろん、この場合カーネルを 数値演算エミュレーション対応にコンパイルしておかなければなりません! また、コプロセッサとして 287 を使う恐ろしく古い 386 機を持ってい る場合も有用でしょう。Linux は 80287 を使えないからです。
i386 (とその後継機) ファミリーは(キーボード、モデム、ディスクなどの) 外部機器から仕事をするよう CPU が呼ばれるまで実行を停止するための "hlt" 命令があります。これにより、外部機器が CPU を(通常は割り込み などで)起こすまで、「低消費電力」モードに入っておく効果があります。 初期の i486DX-100 の無かには、hlt 命令に問題があるものがあります。 この場合、hlt 命令が使用されると、通常の実行モードにちゃんと戻れなく なります。"no-hlt" を指示すると、Linux は何もすることがない時には 無限ループに入ります。そして、他に何もすることがなくても、CPU を hlt 状態に入れません。この引数によって、以上の様な CPU でも Linux に使用することができます。もっとも、メーカー補償があるのなら それを使って交換することがお薦めではありますが。
この引数を起動時に使うと、点字端末を使いやすいよう、スクロールを 禁止してしまいます。
カーネルパニックに値するような事態(例えばカーネルが内部エラー を検出し、大声でうめきながら 何もかも中止するに値する程重要であると判断した場合)を検出した場合、 その場に座り込んで、誰かがスクリーン上のパニックメッセージを読んで再起動 するのを待つというのが、既定の動作です。しかし、機械が孤立した場所に あって人がついていない場合、自動的に自分自身をリセットして、動作状態に 復帰する方が望ましいかもしれません。例えば、"panic=30" と起動時に 指定すると、カーネルは自身をパニックが生じてから 30 秒後に再起動しようと 試みます。値として 0 を指定すると、既定時と同じ振る舞いをします。つまり、 人が来るまで待ち続けます。
補足事項として、この値は /proc/sys/kernel/panic
sysctl インターフ
ェース
を通して読み書き可能であると付け加えておきます。
効率と性能を高めるために、カーネルがどこに CPU 時間を使っているかの
プロファイルを得るオプションがカーネル開発者用に用意されています。
このオプションを使用して、利用者はプロファイルシフトカウントを起動時
に指定します。通常は、これを 2 に設定します。また、カーネルを最初から
「プロファイル有り」として構成することもできます。それ以外の方法を
とるならば、/proc/profile
出力を使用する readprofile.c
等
が必要になります。
このオプションは、Linux がコンピュータをリセットする(よくある例とし
ては /sbin/init
を使って Control-Alt-Delete 応じたリセット
を行うことがあげられます)ときに、どのような再起動方法を取るかを決め
ます。無指定の場合、v2.0 カーネルのあとの方の版では、ウォーム (warm) 再起動
(つまり完全なリセットではなく、メモリーチェックもしません)ではなく、
コールド (cold) 再起動(つまり完全なリセットで BIOS はメモリーチェックなどを
行います)を使用します。このようにコールド再起動に変更されたのは、ウォーム再
起動
が行われたときに再起動に失敗する安物の、あるいはいかれたハードウェア
も使えるようにという配慮があったためです。リセット時に以前のような
振る舞い(つまりウォーム再起動)を行うには、reboot=w
と指定して
下さい。実のところ、w
で始まる言葉であれば何であれウォーム指定
したことになります。
なぜわざわざウォーム指定なんてわずらわしいことをするかですって? キャッシュメモリーを持っているディスクコントローラには、ウォーム再起動 を認識できるものも有ります。こいつはそんな時には気を利かせてキャッシュ データを全部ディスクに吐き出してしまいます。ところがコールド再起動 となると、カード上のキャッシュメモリーにあるライトバックデータがすべて 失われてしまいます。また、cold 再起動時にはメモリーチェックに延々と 時間がかかるという話もあります。その上、SCSI BIOS はウォーム再起動 時にえらく時間をかけて初期化を行うとすれば、warm boot を使う十分な 理由でしょう。
これは、 I/O ポート領域を問題から保護するために使われます。 書式は以下の通りです。
reserve=iobase,extent[,iobase,extent]...
機種によっては特定領域の機器を自動判別の対象にならないようデバイスドライバ を制限する必要があります。これは多分に貧相な設計のために起動中に (どこかの Ether カードのように)凍り付いてしまうハードウェアや、 間違って認識されてしまうハードウェアや、検出中に状態が変化してしまう ハードウェアや、単に認識させたくないハードウェアがあるといった理由に よります。
reserve
起動時引数は検出してはならない I/O ポート領域を指定する
事によってこの問題を回避します。指定された領域は、すでにデバイスが検出
されたかのようにカーネル内部の port registration table 内部で温存されます
(登録名は reserved
です)。なお、この機能は、ほとんどの機械では不要
であることを覚えておいてください。何らかの問題や特別の事情がある時のみ
この機能を使用します。
指定した範囲の I/O ポートは領域内の I/O 空間を闇雲に探る前に
check_region()
を行うデバイス検出から保護されています。
これは NE2000 で止まってしまうドライバがあるときや、
正しくないデバイスを誤検出したときに使用します。
デバイスドライバが正しいものなら、他の起動時引き数によって
明示的に指示されない限り、reserve
によって指定された範囲を
検出しようとはしません。これは、reserve
が他の起動時
引き数と頻繁に用いられることを暗示しています。つまり、
reserve
によって保護領域を指定するのなら、
普通は保護領域にあるデバイスを明示的に検出させなければ
なりません。ほとんどのドライバーは明示的にアドレスを指定
された場合、ポート登録表 (port registration table) を無視します。
たとえば、起動時に
reserve=0x300,32 blah=0x300
を与えると "blah" 以外のすべてのデバイスドライバが 0x300-0x31f を 避けるようになります。
普通の起動時の引き数同様、11 引き数までの制限があります。
ということで、reserve
キーワードの指定は 5 回までです。
えらく面倒なことをしたければ reserve
を複数指定しても
構いません。
これは本当は起動時引き数ではないことに注意してください。
これは LILO が解釈するオプションであって、他の引き数のよ
うにカーネルが認識するわけではありません。しかしながら、
これを使うのが大変広まったので、ここで取り上げるのもいい
でしょう。また、rdev -v
や vidmode
から vmlinuz
に設定することもできます。このオプションは Linux カーネルが
実際に起動駿前に、ビデオ BIOS を使って既定のディスプレー
モードを変更します。よく用いられるのは、80x50 や 132x44 です。
このオプションの一番いい使い方は、vga=ask
で、
これは起動前に利用者に選択できるモードの一覧を表示して、どれを
使うかを選ばせます。与えられたモードのなかからいいものが
見つかったら、今度は先のオプションの "ask" をその値で
置き換えるのです。そのほかの情報に関しては、
linux/Documentation/svga.txt
を参照してください。
この文書は最新版のカーネルと一緒に配布されています。
ついでながら、最新のカーネル (v2.1以降) はオプションとして Video mode selection support リストから ビデオモードを選ぶ機能を持っております。この機能を使い たければ、このオプションをいれておく必要があります。