Что произойдет, если init будет удален?

22

Только теоретический вопрос ...

Но что произойдет, если init/sbin/init ) будет удалено?

    
задан Kaz Wolfe 02.06.2014 в 03:13
источник

2 ответа

31

Загрузочный загрузчик загрузит ядро, ядро ​​попытается запустить init, а не найти его и панику.

Выход из него - перезагрузка, изменение параметров загрузки, добавление init=/bin/bash и загрузка таким образом. Ядро будет использовать bash как init. Это даст вам возможность запускать команды и исправлять систему.

Коррекция
Очевидно, что ядро ​​(файл init / main.c ):

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

Таким образом, он найдет / bin / sh (это ссылка на тире), и это даст вам оболочку и возможность исправить ее, не используя параметр загрузки init=/bin/bash .

    
ответ дан sмurf 02.06.2014 в 03:29
источник
12

Ничего не происходит, пока вы не попытаетесь перезагрузить компьютер. Пока система работает, и вы не пытаетесь переключить уровни запуска, запустив /sbin/init n , вы даже не поймете, что это исчезло.

Фактически, удаление /sbin/init отменяется, если вы осознаете ошибку раньше и остаетесь спокойны. Системные администраторы восстанавливаются от более неприятных «лоботомий» при сохранении операционной системы.

Одним из способов восстановления после удаления /sbin/init является переустановка пакета upstart с использованием APT.

Мачо для восстановления - использовать только ресурсы на самой машине. Одним из факторов в вашу пользу является то, что /sbin/init всегда работает. Поэтому, когда вы запускаете rm /sbin/init , файл просто отсоединяется от файловой системы. Содержание inode и файла остается на диске и в памяти до тех пор, пока не выйдет PID 1. Вам просто нужно повторно создать /sbin/init из соответствующего индексного дескриптора.

самый простой способ :

# cp /proc/1/exe /sbin/init
# chmod 755 /sbin/init
    
ответ дан 200_success 02.06.2014 в 22:04