web-dev-qa-db-ja.com

/ proc / cmdlineのBOOT_IMAGEパラメータとは

現在、How Linux Worksという本を読んでおり、第5章ではLinuxパラメータについて説明しています。奇妙なことに、起動時にインストールされたカーネルに渡されたパラメーターが何であるかを確認し始め、気づきました。

BOOT_IMAGE=/boot/vmlinuz-3.16.0-4-AMD64

私はこのパラメーターの説明をオンラインで検索してきましたが、成功していません。誰かが私にもっと詳しい情報を見つけたり、これについてBOOT_IMAGEについて説明したりする正しい方向を教えてもらえますか?注意すべきことの1つは、私がリモートのDebianサーバーを実行していることです。おそらくXenを使用して、サーバー自体が仮想化されていることを知っています。これはXenと関係があり、どのようにインスタンスを起動しますか?

PDATE:調査したところ、vmlinuz-3.16.0-4-AMD64がカーネルイメージであることがわかりました。また、man bootparamを見ると次のように読み取られます。

ほとんどのソートはlinux/init/main.cで行われます。最初に、カーネルは引数が特別な引数「root =」、「nfsroot =」、「nfsaddrs =」、「ro」、「rw」、「debug」、または「init」のいずれであるかを確認します。これらの特別な引数の意味を以下に説明します。

上記のようにセットアップ関数として受け入れられない「foo = bar」の形式は、設定される環境変数として解釈されます。 (役に立たない?)の例は、ブート引数として「TERM = vt100」を使用することです。

カーネルによって取得されず、環境変数として解釈されなかった残りの引数は、プロセス1(通常はinitプログラム)に渡されます。 initプロセスに渡される最も一般的な引数はWordの「シングル」で、これはinitにコンピューターをシングルユーザーモードで起動し、通常のすべてのデーモンを起動するのではないことを指示します。システムにインストールされているinitのバージョンのマニュアルページをチェックして、それが受け入れる引数を確認してください。

systemctl show-environmentを実行すると、次のように表示されます。

[root@localhost ~]# systemctl show-environment 
BOOT_IMAGE=/boot/vmlinuz-3.16.0-4-AMD64
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
LANG=en_US.UTF-8

そのため、起動元のLinuxイメージの場所を引数として渡しているようです。残っている質問は、この環境変数を使用するプロセスとその理由です。

5
Kunashu

によると http://homepage.smc.edu/morgan_david/cs40/lilo-readme.txt

LILO always passes the string  BOOT_IMAGE=<name>  to the kernel, where 
<name> is the name by which the kernel is identified (e.g. the label). This 
variable can be used in /etc/rc to select a different behaviour, depending 
on the kernel.

したがって、ラベル(または他のブートローダーのカーネルファイル名)に応じて、ブートスクリプトの動作を選択的に区別する方法でした(または一部のシステムに残っています)。 initはおそらくこの変数をスクリプトに渡します。

1
user140866