Cosa accadrebbe se init fosse cancellato?

22

Solo una domanda teorica ...

Ma cosa succederebbe se init (in /sbin/init ) fosse rimosso?

    
posta Kaz Wolfe 02.06.2014 - 03:13
fonte

2 risposte

31

Il boot loader caricherà il kernel, il kernel proverà a eseguire init, non a trovarlo e al panico.

La via d'uscita è riavviare, modificare i parametri di avvio, aggiungere init=/bin/bash e avviare in questo modo. Il kernel userà bash come init. Questo ti darà la possibilità di eseguire comandi e correggere il sistema.

Correzione
Apparentemente il kernel (file init / main.c ) fa:

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.");

Quindi troverà / bin / sh (che è un link al dash) e questo ti darà una shell e la possibilità di risolverlo senza usare il parametro di avvio init=/bin/bash .

    
risposta data sмurf 02.06.2014 - 03:29
fonte
12

Non succede niente, finché non provi a riavviare. Finché il sistema è in esecuzione e non provi a cambiare i runlevel eseguendo /sbin/init n , non ti accorgerai nemmeno che era sparito.

In realtà, la cancellazione di /sbin/init è annullabile se ti rendi conto dell'errore presto e stai calmo. Gli amministratori di sistema hanno recuperati da "lobotomie" più cattive mantenendo il sistema operativo in esecuzione.

Un modo per recuperare dalla cancellazione di /sbin/init è reinstallare il pacchetto upstart usando APT.

Il modo macho per recuperare è usare solo le risorse sulla macchina stessa. Un fattore a tuo favore è che /sbin/init è sempre in esecuzione. Pertanto, quando si esegue rm /sbin/init , il file viene semplicemente scollegato dal filesystem. L'inode e il contenuto del file rimangono su disco e in memoria fino all'uscita dal PID 1. Devi solo ricreare /sbin/init dall'inode appropriato.

Il modo più semplice per ottenere ciò è:

# cp /proc/1/exe /sbin/init
# chmod 755 /sbin/init
    
risposta data 200_success 02.06.2014 - 22:04
fonte

Leggi altre domande sui tag