Por que o Linux permite 'init=/bin/bash'?
Eu li isso, as respostas estão dizendo que é o KERNEL executando este programa init.
Então comecei a me perguntar, o Linux geralmente vem com um initramfs, que eventualmente será montado e pivot_root no sistema de arquivos raiz real. Então, o que esse init
argumento significa? O caminho no initramfs? Ou como eu imaginei, não é lido pelo kernel, mas pelo init do initramfs para executar o init real.
Além disso, o root=UUID=xxxx
argumento é que isso é realmente lido pelo kernel ou apenas pelo init do initramfs para encontrar o sistema de arquivos raiz real?
Parece que posso passar qualquer argumento que quiser como argumentos do kernel, então todos eles são lidos pelo kernel ou pelo menos alguns deles são significativos apenas para programas de espaço do usuário?
Os parâmetros passados na linha de comando do kernel não precisam ser significativos para o kernel: a documentação dos parâmetros do kernel diz
Isso não se aplica a
init
eroot
que realmente são parâmetros do kernel e são tratados pelo kernel. Eles também podem ser atuados pelo espaço do usuário, uma vez que aparecem em arquivos/proc/cmdline
. (Assim, por exemplo, o systemd levaquiet
em consideração o parâmetro do kernel para reduzir sua saída.)Quando o kernel é inicializado com um initramfs, o
root
parâmetro não é usado diretamente pelo kernel e oinit
parâmetro só é usado serdinit
falhar.init
inicialização é tratada emkernel_init
, que funciona da seguinte forma:rdinit
na linha de comando do kernel, ou/init
) que é acessível, o kernel tenta executá-lo;init
na linha de comando do kernel), o kernel tentará executá-lo e entrará em pânico se não puder;/sbin/init
,/etc/init
,/bin/init
e/bin/sh
; se nenhum deles puder ser executado, ele entrará em pânico .Quando há um initramfs, tudo isso acontece lá, e o volume de destino não é montado pelo kernel. O que acontece depois que o kernel executa o primeiro
init
programa (normalmente, o/init
script no initramfs) depende do programa, não do kernel. Os argumentos que não são passadosinit
ainda estão disponíveis/proc/cmdline
se o/proc
sistema de arquivos estiver montado.Passar argumentos de kernel personalizados é uma maneira de personalizar um sistema durante uma instalação do KickStart, por exemplo, um servidor PXE pode definir:
where
lab
é então usado na configuração do KickStart para fazer coisas diferentes das outras compilações do sistema:Aqui para configurar um layout de sistema de arquivos diferente do usado em outros tipos de sistema. Esperamos que rótulos diferentes sejam usados para personalizações locais do que são usados pelo kernel, dado o único namespace envolvido.