Що буде, якщо init буде видалений?


22

Просто теоретичне питання ...

Але що буде, якщо init/sbin/init) буде знято?


Не спробуйте ln -L- не вийде. cp /proc/fd/1/exe /sbin/init && chmod 755 /sbin/initпрацює, хоча. Використання APT для повторної установки запуску не так очевидно dpkg, як невідомо, що воно пройшло за замовчуванням. "Початковий пакет пакета вже в поточній версії." Ви могли dpkg --force-depends --force-remove-essential -r upstartпершими.
Джошуа

1
apt-get install --reinstall upstart. Також у мене немає /proc/fdкаталогу. І я просто перевірив, ln -L /proc/1/exe /tmp/initпрацює з /sbin/initперейменованим на /sbin/init.bak, тобто я можу прочитати без проблем /tmp/initпісля цього.
Руслан

@muru ОК. Тоді я додаю синонім тегу.
Kaz Wolfe

Відповіді:


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параметра boot.


Чудова відповідь. Не знав, що ядро ​​шукає щось більше, ніж /sbin/init.
Руслан

А якщо /bin/shфайлу немає ? Або /bin/bashабо /bin/dashтощо? Не впевнені, як ви могли одночасно видалити все це, але що б сталося теоретично?
триз

Ну, тоді ви побачили б паніку ядра, частина відповіді над рядком Виправлення . Але не робіть цього в потрібній системі. Серйозно, не варто. Якщо ви хочете експериментувати (і це хороша вправа), створіть VM Virtualbox, розірвіть його і спробуйте виправити. До речі, відповідь 200_success також непогана.
смурф

12

Нічого не відбувається, поки ви не спробуєте перезавантажити. Поки система працює, і ви не намагаєтесь перемикати рівні запуску, запустивши /sbin/init n , ви навіть не зрозуміли б, що вона пропала.

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

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

Macho спосіб відновити - це використовувати лише ресурси на самій машині. Одним із факторів на вашу користь є те, що /sbin/initзавжди працює. Тому при запуску rm /sbin/initфайл просто від’єднується від файлової системи. Вміст inode та файлу залишається на диску та в пам'яті, поки PID 1 не вийде. Вам просто потрібно заново створити /sbin/initз відповідного inode.

Самий простий спосіб для досягнення цієї мети є:

# cp /proc/1/exe /sbin/init
# chmod 755 /sbin/init
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.