Что произойдет, если 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