나는 현재 "How Linux Works"라는 책을 읽고 있는데 5장에서는 Linux 매개 변수에 대해 설명합니다. 호기심에서 부팅 시 설치된 커널에 어떤 매개변수가 전달되는지 살펴보기 시작했고 다음과 같은 사실을 발견했습니다.
BOOT_IMAGE=/boot/vmlinuz-3.16.0-4-amd64
나는 이 매개변수에 대한 설명을 찾기 위해 온라인에서 검색했지만 성공하지 못했습니다. 누구든지 내가 더 많은 정보를 찾거나 BOOT_IMAGE
이것이 무엇인지 설명할 수 있는 올바른 방향을 알려줄 수 있습니까 ? 한 가지 주목할 점은 원격 데비안 서버를 실행하고 있다는 것입니다. 아마도 Xen을 통해 서비스 자체가 가상화된 것으로 알고 있습니다. 이것이 Xen 및 Xen이 인스턴스를 시작하는 방법과 관련이 있습니까?
고쳐 쓰다:vmlinuz-3.16.0-4-amd64
그래서 조사하는 동안 그것이 커널 이미지라는 것을 알았습니다 . 나도 man bootparam
그것을 읽었고 다음과 같이 말했습니다.
대부분의 정렬은 linux/init/main.c에서 이루어집니다. 먼저 커널은 매개변수가 특수 매개변수 "root=", "nfsroot=", "nfsaddrs=", "ro", "rw", "debug" 또는 "init" 중 하나인지 확인합니다. 이러한 특수 매개변수의 의미는 아래에 설명되어 있습니다.
위의 setter 함수로 허용되지 않는 "foo=bar" 형식의 모든 항목은 설정할 환경 변수로 해석됩니다. (쓸데없는?) 예는 "TERM=vt100"을 부팅 매개변수로 사용하는 것입니다.
커널에서 얻지 못하고 환경 변수로 해석되지 않은 나머지 인수는 일반적으로 init 프로그램인 프로세스 1로 전달됩니다. 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
이 변수는 스크립트에 전달될 수 있습니다.