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

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

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

22
задан 13 September 2016 в 09:52

2 ответа

Загрузчик загрузит ядро, ядро попыталось бы выполнить init, не находят его и паника.

выход из него состоит в том, чтобы перезагрузить, отредактировать параметры начальной загрузки, добавить init=/bin/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 параметр начальной загрузки.

31
ответ дан 13 September 2016 в 09:52

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

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

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

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

самый легкий путь для выполнения, который является:

# cp /proc/1/exe /sbin/init
# chmod 755 /sbin/init
12
ответ дан 13 September 2016 в 09:52

Другие вопросы по тегам:

Похожие вопросы: