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

Просто теоретический вопрос...

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

2 ответа

Решение

Загрузчик загрузит ядро, ядро ​​попытается запустить 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 загрузочный параметр.

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

На самом деле, удаление /sbin/init невозможно исправить, если вы рано поймете ошибку и сохраните спокойствие. Системные администраторы оправились от гораздо более неприятных "лоботомий" при сохранении работоспособности операционной системы.

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

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

Самый простой способ сделать это:

# cp /proc/1/exe /sbin/init
# chmod 755 /sbin/init
Другие вопросы по тегам