我目前正在阅读《Linux 工作原理》一书,第 5 章讨论了 Linux 参数。出于好奇,我开始查看启动时传递给我安装的内核的参数是什么,并注意到:
BOOT_IMAGE=/boot/vmlinuz-3.16.0-4-amd64
我一直在网上寻找这个参数的解释,但没有成功。谁能指出我可以找到更多信息或解释这是BOOT_IMAGE
关于什么的正确方向?需要注意的一件事是我正在运行远程 Debian 服务器。我知道服务本身是虚拟化的,可能是通过 Xen 实现的。这与 Xen 及其启动实例的方式有关吗?
更新:
因此,在调查时我注意到那vmlinuz-3.16.0-4-amd64
是内核映像。还看了一下man bootparam
上面写着:
大部分排序在 linux/init/main.c 中进行。首先,内核检查参数是否是特殊参数“root=”、“nfsroot=”、“nfsaddrs=”、“ro”、“rw”、“debug”或“init”中的任何一个。这些特殊参数的含义如下所述。
任何不被接受为上述设置函数的“foo=bar”形式的内容都会被解释为要设置的环境变量。一个(无用?)示例是使用“TERM=vt100”作为启动参数。
然后,内核未获取且未解释为环境变量的任何剩余参数都会传递到进程一,该进程通常是 init 程序。传递给 init 进程的最常见参数是“single”一词,它指示 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 映像的位置作为参数传递。剩下的唯一问题是哪个进程使用这个环境变量以及为什么?
答案1
根据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
可能会将此变量传递给脚本。