BOOTPARAM(7)

名前
bootparam - Linux カーネル起動時パラメーターの解説

説明
Linux カーネルは起動するときに「コマンドラインオプション」あるいは 「起動時パラメーター」を受け付ける。 これは一般に、 カーネルには決定できないハードウェアのパラメーターをカーネルに渡したい場合や、 カーネルが検出するであろう値を意図的に無効にしたり変更したりする場合に用いる。

When the kernel is booted directly by the BIOS, you have no opportunity to specify any parameters. So, in order to take advantage of this possibility you have to use a boot loader that is able to pass parameters, such as GRUB.

  引数リスト
The kernel command line is parsed into a list of strings (boot arguments) separated by spaces. Most of the boot arguments have the form:

    name[=value_1][,value_2]...[,value_10]

ここで 'name' は、それに対応する値がカーネルのどの部分に渡されるものなのかを 識別するための、他と重ならないキーワードである。 書式中の 10 という制限は実際に存在する。 現在のコードは、キーワードひとつあたり、コンマで区切られたパラメーターを 10 個までしか取り扱うことができない。 (しかし、事情が非常に複雑な場合には、同じキーワードを再度利用して 10 個以上のパラメーターを与えることができるかもしれない。 対象となるハードウェアの設定関数がそれをサポートしていれば、だが。)

カーネルコマンドラインの識別はほとんどがカーネルソースファイル init/main.c に書かれている。 最初に、カーネルは 'root=', 'nfsroot=', 'nfsaddrs=', 'ro', 'rw', 'debug', 'init' といった特別な引数があるかをチェックする。 これらの意味については後述する。

Then it walks a list of setup functions to see if the specified argument string (such as 'foo') has been associated with a setup function ('foo_setup()') for a particular device or part of the kernel. If you passed the kernel the line foo=3,4,5,6 then the kernel would search the bootsetups array to see if 'foo' was registered. If it was, then it would call the setup function associated with 'foo' (foo_setup()) and hand it the arguments 3, 4, 5, and 6 as given on the kernel command line.

'foo=bar' という形式の引数のうち、 上記のように設定関数に受け入れられなかったものは、 環境変数と解釈されて設定される。 (あまり役に立たない?) 例としては、'TERM=VT100' がある。

Any remaining arguments that were not picked up by the kernel and were not interpreted as environment variables are then passed onto PID 1, which is usually the init(1) program. The most common argument that is passed to the init process is the word 'single' which instructs it to boot the computer in single user mode, and not launch all the usual daemons. Check the manual page for the version of init(1) installed on your system to see what arguments it accepts.

  一般的な、デバイス固有ではない起動時引数

'init=...'
    カーネルが実行する初期コマンドを設定する。 この指定がなされなかったり、指定したコマンドが見つからなかった場合には、 カーネルは /sbin/init, /etc/init, /bin/init, /bin/sh の順で実行を試み、すべてに失敗したら panic を起こす。

'nfsaddrs=...'
    This sets the NFS boot address to the given string. This boot address is used in case of a net boot.

'nfsroot=...'
    This sets the NFS root name to the given string. If this string does not begin with '/' or ',' or a digit, then it is prefixed by '/tftpboot/'. This root name is used in case of a net boot.

'root=...'
    起動時にルートファイルシステムとして使われるデバイスをカーネルに指定する。 デフォルトはコンパイル時に決定され、 通常はカーネルを構築したシステムのルートデバイスになる。 この値を無効にして、 例えば 2 番目のフロッピーディスクドライブをルートデバイスに指定する場合は、 'root=/dev/fd1' とする。

    The root device can be specified symbolically or numerically. A symbolic specification has the form /dev/XXYN, where XX designates the device type (e.g., 'hd' for ST-506 compatible hard disk, with Y in 'a'–'d'; 'sd' for SCSI compatible disk, with Y in 'a'–'e'), Y the driver letter or number, and N the number (in decimal) of the partition on this device.

    なお、これらはファイルシステム上でのデバイスの指定方法とは全く関係ない。 '/dev/' を用いるのは単に慣習に過ぎない。

    扱いにくいし移植性も良くないが、 上記のデバイスを major/minor 番号の数値で指定してもよい。 (例えば /dev/sda3 は major 番号 8、minor 番号 3 なので、 'root=0x803' と記述できる。)

'rootdelay='
    このパラメーターは root ファイルシステムのマウントを行う前に停止する遅延時間 (秒単位) を指定する。

'rootflags=...'
    このパラメーターは root ファイルシステムのマウントオプション文字列を指定する (fstab(5) も参照)。

'rootfstype=...'
    'rootfstype' オプションが指定されると、 カーネルは、 指定されたタイプであるとみなしてルートファイルシステムをマウントする。 このオプションは、 例えば、ext3 ファイルシステムを ext2 としてマウントし、 ルートファイルシステムのジャーナルを削除する場合に便利である。 こうすると、 別のメディアからマシンを起動することなく ext3 から ext2 へ戻すことができる。

'ro' と 'rw'
    'ro' オプションは、 ルートファイルシステムを 「読み出し専用」でマウントするようカーネルに指示し、 fsck プログラムがファイルシステムの矛盾を検査できるようにする。 ファイルシステムが「読み書き可能」として再マウントされる (つまり 'mount -w -n -o remount /') までの間は、 いかなるプロセスもこのファイルシステム上のファイルに書き込むことはできない。 (mount(8) も参照。)

    rw オプションはルートファイルシステムを 「読み書き可能」でマウントするようカーネルに指示する。 こちらがデフォルトである。

'resume=...'
    This tells the kernel the location of the suspend-to-disk data that you want the machine to resume from after hibernation. Usually, it is the same as your swap partition or file. Example:

        resume=/dev/hda2

'reserve=...'
    デバイスの自動検出から I/O ポートを保護するために用いる。 コマンドの形式は以下の通り。

        reserve=iobase,extent[,iobase,extent]...

    機種によっては、 デバイスドライバによるデバイスの自動検出を、 特定の範囲に対しては禁止しなければならないことがある。 ハードウェアが検出動作によって深刻な問題を引き起こす場合や、 誤認識される可能性がある場合、 また単にカーネルにハードウェアを初期化させたくない場合などがありうるだろう。

    この起動時引数 reserve は、自動検出の対象外とする I/O ポートの範囲を指定する。 デバイスドライバは、 他の起動時引数によって明示的に指定されない限り、 予約された範囲に対して自動検出動作を行わない。

    例えばブート時のコマンドラインに

        reserve=0x300,32  blah=0x300

    と指定すると、'blah' を除くすべてのデバイスドライバは 0x300 から 0x31f の範囲を自動検出の対象外とする。

'panic=N'
    By default, the kernel will not reboot after a panic, but this option will cause a kernel reboot after N seconds (if N is greater than zero). This panic timeout can also be set by

        echo N > /proc/sys/kernel/panic

'reboot=[warm|cold][,[bios|hard]]'
    Since Linux 2.0.22, a reboot is by default a cold reboot. One asks for the old default with 'reboot=warm'. (A cold reboot may be required to reset certain hardware, but might destroy not yet written data in a disk cache. A warm reboot may be faster.) By default, a reboot is hard, by asking the keyboard controller to pulse the reset line low, but there is at least one type of motherboard where that doesn't work. The option 'reboot=bios' will instead jump through the BIOS.

'nosmp' と 'maxcpus=N'
    (カーネルのコンパイル時に __SMP__ が指定されたときのみ有効。) コマンドラインオプションに 'nosmp' または 'maxcpus=0' を指定すると、 SMP (Symmetric Multi Processing) を完全に無効にする。 'maxcpus=N' オプションは、 SMP モードで有効にする CPU の最大数を N に制限する。

  カーネル開発者用の起動時引数

'debug'
    Kernel messages are handed off to a daemon (e.g., klogd(8) or similar) so that they may be logged to disk. Messages with a priority above console_loglevel are also printed on the console. (For a discussion of log levels, see syslog(2).) By default, console_loglevel is set to log messages at levels higher than KERN_DEBUG. This boot argument will cause the kernel to also print messages logged at level KERN_DEBUG. The console loglevel can also be set on a booted system via the /proc/sys/kernel/printk file (described in syslog(2)), the syslog(2) SYSLOG_ACTION_CONSOLE_LEVEL operation, or dmesg(8).

'profile=N'
    カーネルがどこで CPU サイクルを消費しているか調べたい場合には、 カーネルのプロファイリング機能を有効にすればこれを実現できる。 カーネルプロファイリングは、変数 prof_shift を 0 以外の値にセットすると有効になる。 この値はコンパイル時に CONFIG_PROFILE で指定するか、 この 'prifile=N' オプションで指定できる。 prof_shift の値は N が指定されれば N となり、N が指定されなかった場合は CONFIG_PROFILE_SHIFT の値が用いられる。 どちらも指定されなければデフォルト値の 2 が用いられる。 この変数が重要なのは、 カーネルプロファイリングの粒度を決定するところにある。 すなわち、各クロックの割込みごとに、システムがカーネルコードを実行していれば、 以下のようにカウンターの値がインクリメントされる。

        profile[address >> prof_shift]++;

    生のプロファイリング情報は、 /proc/profile から見ることができるが、readprofile.c のような情報を加工するツールを使ったほうが良いだろう。 /proc/profile に任意のデータを書込むと、 カウンターはリセットされる。

  RAM ディスク関連の起動時引数
(Only if the kernel was compiled with CONFIG_BLK_DEV_RAM.) In general it is a bad idea to use a ramdisk under Linux—the system will use available memory more efficiently itself. But while booting, it is often useful to load the floppy contents into a ramdisk. One might also have a system in which first some modules (for filesystem or hardware) must be loaded before the main disk can be accessed.

    In Linux 1.3.48, ramdisk handling was changed drastically. Earlier, the memory was allocated statically, and there was a 'ramdisk=N' parameter to tell its size. (This could also be set in the kernel image at compile time.) These days ram disks use the buffer cache, and grow dynamically. For a lot of information on the current ramdisk setup, see the kernel source file Documentation/blockdev/ramdisk.txt (Documentation/ramdisk.txt in older kernels).

    4 つのパラメーターがある。論理値をとるものが 2 つ、整数値をとるものが 2 つ。

'load_ramdisk=N'
    N=1 なら RAM ディスクをロードする。N=0 ならロードしない (デフォルト)。

'prompt_ramdisk=N'
    N=1 ならフロッピー挿入を促すプロンプトを出す (デフォルト)。 N=0 ならプロンプトを出さない。 (従って、このパラメーターを指定する必要はまず無いであろう。)

'ramdisk_size=N' もしくは (古い形式の) 'ramdisk=N'
    Set the maximal size of the ramdisk(s) to N kB. The default is 4096 (4 MB).

'ramdisk_start=N'
    開始ブロック番号 (フロッピー先頭からのオフセットで指定した RAM ディスクの開始点) を N にセットする。 これはカーネルイメージのあとに RAM ディスクイメージを置く場合に必要となる。

'noinitrd'
    (カーネルのコンパイル時に CONFIG_BLK_DEV_RAM と CONFIG_BLK_DEV_INITRD が指定されているときのみ有効。) 最近は initrd を使用するようにカーネルをコンパイルできる。 このオプションが指定されると、 ブートプロセスはカーネルと RAM ディスクをロードし、 カーネルは initrd を「普通の」 RAM ディスクに変換し、 この RAM ディスクがルートデバイスとして「読み書き可能」でマウントされる。 次に /linuxrc が実行される。 その後「真の」ルートファイルシステムがマウントされ、 initrd ファイルシステムは /initrd に移される。 最後に通常のブートシーケンス (具体的には /sbin/init の呼び出し) が実行される。

    For a detailed description of the initrd feature, see the kernel source file Documentation/admin-guide/initrd.rst (or Documentation/initrd.txt before Linux 4.10).

    'noinitrd' オプションを用いると、 カーネルは (initrd 動作を行うようにコンパイルされている場合でも) 上記の動作を行なわず、代わりに initrd のデータを /dev/initrd に残す。 (このデバイスは一度しか使えない。 データは、そのデータを使った最後のプロセスが /dev/initrd をクローズするとすぐに解放される。)

  SCSI デバイス用の起動時引数
この節における用語：

iobase -- SCSI ホストアダプターが占有する I/O ポートの先頭アドレス。 16 進表記で指定し、通常 0x200 から 0x3ff の範囲に位置する。

irq -- カードが利用するハードウェア割り込み。有効な値はカードに よって異なるが、通常は 5, 7, 9, 10, 11, 12, 15 である。 これ以外の値は通常、IDE ハードディスク、フロッピー、 シリアルポートといった一般的な周辺機器によって使用される。

scsi-id -- SCSI バス上のホストアダプターが自分自身を識別するために使用する ID 番号。 この値を変更できるホストアダプターもごく希に存在するが、 ほとんどはアダプター内部で固定されている。 よく使われるデフォルト値は 7 であるが、Seagate もしくは Future Domain 製の TMC-950 ボードでは 6 が使われる。

parity -- SCSI ホストアダプターが取り付けられたデバイスとの通信に際して パリティ値を必要とするかどうか。 1 を指定するとパリティチェックが有効になり、 0 でパリティチェックが無効になる。 しかし、すべてのデバイスがこの起動時引数によるパリティの選択を サポートするわけではない。

'max_scsi_luns=...'
    SCSI デバイスは複数の「サブデバイス」を自分自身の内部に持つことができる。 最もよくある例として、一時に 1 枚以上のディスクを扱うことができる (チェンジャー機能付の) SCSI CD-ROM がある。 それぞれの CD はそのデバイスの 「論理ユニット番号 (LUN)」によって特定される。 しかしほとんどのデバイス (例えばハードディスクやテープドライブ) は、 LUN 番号 0 が割り当てられた、ただひとつのデバイスからなる。

    設計が不十分な SCSI デバイスでは 0 以外の LUN 番号への自動検出を 扱えないことがある。 したがって、コンパイル時に CONFIG_SCSI_MULTI_LUN オプションが指定されていないと、 最近のカーネルではデフォルトでは LUN 番号 0 のみを検出する。

    起動時に調べる LUN 番号を指定する場合、起動時引数として 'max_scsi_luns=n' を指定する。n は 1 から 8 の間で指定する。 n=1 以上の値を使用しないようにすれば、 このようないかれた機械にひどい目にあわされずにすむだろう。

SCSI テープドライブの設定
    SCSI テープドライバの起動時設定の一部は以下のようにして行なうことができる。

        st=buf_size[,write_threshold[,max_bufs]]

    The first two numbers are specified in units of kB. The default buf_size is 32k B, and the maximum size that can be specified is a ridiculous 16384 kB. The write_threshold is the value at which the buffer is committed to tape, with a default value of 30 kB. The maximum number of buffers varies with the number of drives detected, and has a default of two. An example usage would be:

        st=32,30,2

    詳細は Linux カーネルソース内の Documentation/scsi/st.txt (古いカーネルの場合は drivers/scsi/README.st) に書かれている。

  ハードディスク

IDE Disk/CD-ROM ドライバのパラメーター
    The IDE driver accepts a number of parameters, which range from disk geometry specifications, to support for broken controller chips. Drive-specific options are specified by using 'hdX=' with X in 'a'–'h'.

    あるドライブに特有なものではないオプションは、hd= を前に付けて指定する。 ドライブ特有でないオプションに対してドライブ指定 ('hdX=') を前置しても問題はない。 そのオプションは期待通りそのドライブに適用される。

    Also note that 'hd=' can be used to refer to the next unspecified drive in the (a, ..., h) sequence. For the following discussions, the 'hd=' option will be cited for brevity. See the file Documentation/ide/ide.txt (or Documentation/ide.txt in older kernels, or drivers/block/README.ide in ancient kernels) in the Linux kernel source for more details.

'hd=cyls,heads,sects[,wpcom[,irq]]' オプション
    これらのオプションはディスクの物理的なジオメトリを指定するために使う。 最初の 3 つの値以降は省略できる。 シリンダ (cyls)、ヘッド (heads)、セクタ (sects) の各値は fdisk で用いられるものと同じである。 書き込み補正 (wpcom) 値は IDE ディスクでは無視される。 IRQ 値には、そのドライブが接続されているインターフェースが用いる IRQ を指定する (本来の意味では「ドライブに特有」のパラメーターではない)。

'hd=serialize' オプション
    デュアル IDE インターフェースである CMD-640 チップには設計上の問題があって、 セカンダリインターフェース上のドライブと プライマリインターフェース上のドライブを 同時に使用するとデータが破壊されることがある。 このオプションを使用すると、 ドライバは両方のインターフェースが 同時に使用されることが絶対にないようにする。

'hd=noprobe' オプション
    このドライブの自動検出をしない。 例えば

        hdb=noprobe hdb=1166,7,17

    とすると自動検出が無効になる。 しかしドライブのジオメトリを指定しているので、 このドライブは正しいブロックデバイスとして登録され、使用可能になる。

'hd=nowerr' オプション
    ドライブによっては、書き込みエラー (WRERR_STAT) ビットがクリアできなくなることがある。 このオプションを指定すると、 このような壊れたデバイスに対する回避機能が有効になる。

'hd=cdrom' オプション
    このオプションは、通常の IDE ハードディスクの代わりに、 ATAPI 互換の CDROM が続されていることを IDE ドライバに伝える。 CD-ROM はたいてい自動的に認識されるが、 うまく行かない場合に試してみると良い。

スタンダード ST-506 ディスクドライバのオプション ('hd=')
    スタンダードディスクドライバは IDE ドライバと同様のジオメトリ指定を引数にとることができる。 ただし受け付ける値はちょうど 3 つ (C/H/S) に限られる。 それ以上の値やそれ以下の値を指定すると、ドライバは黙ってその指定を無視する。 また引数として受け入れられるのは 'hd=' の形式だけである。 つまり 'hda=' のような指定はここでは正しくない。 書式は次の通り。

        hd=cyls,heads,sects

    2 台のディスクが接続されてい場合は、 2 番目のディスクに対しても上記のジオメトリが設定される。

  イーサネットデバイス
ドライバが異なると用いるパラメーターも異なるが、 すべてのドライバは、少なくとも割り込み番号 (irq)、 I/O ポートのベースアドレス (iobase)、名前 (name) を持つ。 最も一般的な形式は以下の通り。

    ether=irq,iobase[,param_1[,...param_8]],name

最初の数字でない値は名前として使用される。 param_n の値はカード (ドライバ) ごとに異なる意味を持つ。 よくある目的は、共有メモリーアドレスの指定、インターフェースの選択、 DMA チャネルなどである。

このパラメーターの最もよくある利用法は、 2 番目の Ethernet カードを強制的に検出させる場合である (デフォルトでは 1 枚しか検出しない)。 これは簡単で、次のようにすればよい。

    ether=0,0,eth1

この例で IRQ と I/O ベースアドレスに 0 を指定しているのは、 ドライバに自動検出をするよう伝えているのである。

Ethernet-HOWTO では、複数のカードを使うやり方や、 カードやドライバに特有の param_n 値の意味について、 ずっと詳細に解説されている。 興味を持った読者は、この文書にあたり、 自分のカードに関して書かれているセクションを参照すると良い。

  フロッピーディスクドライバ
There are many floppy driver options, and they are all listed in Documentation/blockdev/floppy.txt (or Documentation/floppy.txt in older kernels, or drivers/block/README.fd for ancient kernels) in the Linux kernel source. See that file for the details.

  サウンドドライバ
The sound driver can also accept boot arguments to override the compiled-in values. This is not recommended, as it is rather complex. It is described in the Linux kernel source file Documentation/sound/oss/README.OSS (drivers/sound/Readme.linux in older kernel versions). It accepts a boot argument of the form:

    sound=device1[,device2[,device3...[,device10]]]

各 deviceN はそれぞれ 0xTaaaId という形式で指定する。 各バイトの意味は以下の通り。

T - デバイスのタイプ: 1=FM, 2=SB, 3=PAS, 4=GUS, 5=MPU401, 6=SB16, 7=SB16-MPU401

aaa - I/O ポートアドレス (16進値)

I - interrupt line in hex (i.e., 10=a, 11=b, ...)

d - DMA チャネル

As you can see, it gets pretty messy, and you are better off to compile in your own personal values as recommended. Using a boot argument of 'sound=0' will disable the sound driver entirely.

  ラインプリンタドライバ

'lp='
    構文は以下の通り。

        lp=0
        lp=auto
        lp=reset
        lp=port[,port...]

    プリンタドライバには、どのポートを使うか、 どのポートを使ってはいけないかを伝えることができる。 後者は、 利用可能なあらゆるパラレルポートをプリンタドライバが要求しないようにして、 他のドライバ (PLIP や PPA など) から それらを使えるようにしたい場合に便利である。

    引数の書式は、複数のポート名である。 例えば lp=none,parport0 とすると、 最初のパラレルポートを lp1 として使い、 lp0 は無効にする。プリンタードライバを完全に無効にするには lp=0 とすればよい。

関連項目
klogd(8), mount(8)

For up-to-date information, see the kernel source file Documentation/admin-guide/kernel-parameters.txt.

この文書について
この man ページは Linux man-pages プロジェクトのリリース 5.10 の一部である。プロジェクトの説明とバグ報告に関する情報は https://www.kernel.org/doc/man-pages/ に書かれている。