O que aconteceria se o init fosse excluído?

22

Apenas uma questão teórica ...

Mas o que aconteceria se init (em /sbin/init ) fosse removido?

    
por Kaz Wolfe 02.06.2014 / 03:13

2 respostas

31

O gerenciador de partida carregará o kernel, o kernel tentará executar o init, não encontrá-lo e entrar em pânico.

A saída é reinicializar, editar os parâmetros de inicialização, adicionar init=/bin/bash e inicializar dessa maneira. O kernel usará o bash como init. Isso lhe dará a chance de executar comandos e consertar o sistema.

Correção
Aparentemente, o kernel (arquivo init / main.c ) faz:

if (!try_to_run_init_process("/sbin/init") ||
    !try_to_run_init_process("/etc/init") ||
    !try_to_run_init_process("/bin/init") ||
    !try_to_run_init_process("/bin/sh"))
        return 0;

panic("No working init found.  Try passing init= option to kernel. "
      "See Linux Documentation/init.txt for guidance.");

Por isso, encontraria / bin / sh (que é um link para dash) e isso lhe dará um shell e uma chance de consertá-lo sem usar o parâmetro de inicialização init=/bin/bash .

    
por sмurf 02.06.2014 / 03:29
12

Nada acontece até que você tente reinicializar. Enquanto o sistema estiver rodando, e você não tentar mudar os runlevels executando /sbin/init n , você nem perceberia que ele foi embora.

Na verdade, a exclusão de /sbin/init é desabilitada se você perceber o erro cedo e ficar calmo. Os administradores de sistemas recuperaram de "lobotomias" muito mais desagradáveis ​​ enquanto mantêm o sistema operacional em execução. p>

Uma maneira de recuperar a exclusão de /sbin/init é reinstalar o pacote upstart usando o APT.

A maneira machista de recuperar é usar apenas os recursos da própria máquina. Um fator a seu favor é que /sbin/init está sempre em execução. Portanto, quando você executa rm /sbin/init , o arquivo é simplesmente desvinculado do sistema de arquivos. O inode e o conteúdo do arquivo permanecem no disco e na memória até o PID 1 sair. Você só precisa recriar /sbin/init do inode apropriado.

A maneira mais fácil de realizar isso é:

# cp /proc/1/exe /sbin/init
# chmod 755 /sbin/init
    
por 200_success 02.06.2014 / 22:04

Tags