Quando no shell de fallback, como você inicia o init?

1

Eu inicializei meu sistema usando no grub:

linux /boot/vmlinuz-4.5.0 root = / dev

initrd /boot/initrd-4.5.0

Eu configurei root para dev para especificamente não conseguir inicializar corretamente. Claro que cai de volta para o material do busybox; Eu vi em torno da rede que você pode usar o mount e de alguma forma iniciar o init. Eu procurei ao redor e encontrei switch_root em / sbin e tentei usá-lo, mas sem sucesso. Como alguém altera a raiz e inicia o init com um PID de 1? Além disso, meu init é o System V e tudo está na mesma partição.

    
por N. Morris 28.04.2016 / 22:51

1 resposta

1

Você precisa montar sua raiz na qual você irá alternar. Eu suponho que você já saiba como fazer isso. Basicamente é apenas mkdir /newroot; mount -r /dev/something /newroot

Em seguida, você precisa substituir seu shell de fallback em execução no momento. Ele está sendo executado com o PID 1 (você pode verificar isso com echo $$ ) e o alvo de init precisa obter esse número novamente. Então você precisa de um exec shell embutido para ser usado.

switch_root aceita pelo menos dois argumentos: o diretório raiz a ser alternado e o nome do arquivo executável do init a ser executado após o switch.

Então você acabou de substituir seu shell de fallback:

exec switch_root /newroot /sbin/init e /sbin/init ganham novamente o PID 1 depois de alterar a raiz para /newroot montado e ele pode continuar a inicialização.

    
por 29.04.2016 / 03:22