Не пытайтесь -L- это не сработает. cp /proc/fd/1/exe /sbin/init && chmod 755 /sbin/initработает хоть. Использование APT для переустановки upstart не так очевидно 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 ОК. Затем я добавлю синоним тега.
Каз Вулф
Ответы:
31
Загрузчик загрузит ядро, ядро попытается запустить init, не найдет его и не запаникует.
Выход из этого - перезагрузка, редактирование параметров загрузки, добавление init=/bin/bashи загрузка таким образом. Ядро будет использовать bash в качестве init. Это даст вам возможность запускать команды и исправлять систему.
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 (это ссылка на dash), и это даст вам оболочку и возможность исправить ее без использования init=/bin/bashпараметра загрузки.
Отличный ответ. Не знал, что ядро ищет что-то большее, чем /sbin/init.
Руслан
А если нет /bin/shфайла? Или /bin/bashили /bin/dashтд? Не уверен, как вы можете удалить все это одновременно, но что произойдет, теоретически?
trysis
Ну, тогда вы увидите панику ядра, часть ответа над строкой исправления . Но не делайте этого в системе, которая вам нужна. Серьезно, не надо. Если вы хотите поэкспериментировать (и это хорошее упражнение), создать виртуальную машину Virtualbox, разбить ее и попытаться исправить. Кстати, ответ от 200_success тоже неплох.
smurf
12
Ничего не происходит, пока не попробуешь перезагрузиться. Пока система работает, и вы не пытаетесь переключать уровни выполнения с помощью /sbin/initn , вы даже не поймете, что она исчезла.
Один из способов восстановления после удаления /sbin/init- переустановить upstartпакет с помощью APT.
Мачо способ восстановления состоит в том, чтобы использовать только ресурсы на самой машине. Одним из факторов в вашу пользу является то, что /sbin/initвсегда работает. Поэтому, когда вы запускаете rm /sbin/init, файл просто не связан с файловой системой. Содержимое индекса и файла остается на диске и в памяти до выхода PID 1. Вам просто нужно заново создать /sbin/initиз соответствующего inode.
-L
- это не сработает.cp /proc/fd/1/exe /sbin/init && chmod 755 /sbin/init
работает хоть. Использование APT для переустановки upstart не так очевидноdpkg
, так как он не будет знать, что по умолчанию. «Пакет выскочил уже в текущей версии». Вы могли бы вdpkg --force-depends --force-remove-essential -r upstart
первую очередь.apt-get install --reinstall upstart
, Кроме того, у меня нет/proc/fd
каталога. И я только что проверил,ln -L /proc/1/exe /tmp/init
работает с/sbin/init
переименованным в/sbin/init.bak
, т.е. я могу читать без проблем/tmp/init
после этого.Ответы:
Загрузчик загрузит ядро, ядро попытается запустить init, не найдет его и не запаникует.
Выход из этого - перезагрузка, редактирование параметров загрузки, добавление
init=/bin/bash
и загрузка таким образом. Ядро будет использовать bash в качестве init. Это даст вам возможность запускать команды и исправлять систему.Исправление
Очевидно ядро (файл init / main.c ) делает:
Таким образом, он найдет / bin / sh (это ссылка на dash), и это даст вам оболочку и возможность исправить ее без использования
init=/bin/bash
параметра загрузки.источник
/sbin/init
./bin/sh
файла? Или/bin/bash
или/bin/dash
тд? Не уверен, как вы можете удалить все это одновременно, но что произойдет, теоретически?Ничего не происходит, пока не попробуешь перезагрузиться. Пока система работает, и вы не пытаетесь переключать уровни выполнения с помощью
/sbin/init
n , вы даже не поймете, что она исчезла.На самом деле, удаление
/sbin/init
невозможно отменить, если вы рано поймете ошибку и сохраните спокойствие. Системные администраторы оправились от гораздо более неприятных «лоботомий» при сохранении работоспособности операционной системы.Один из способов восстановления после удаления
/sbin/init
- переустановитьupstart
пакет с помощью APT.Мачо способ восстановления состоит в том, чтобы использовать только ресурсы на самой машине. Одним из факторов в вашу пользу является то, что
/sbin/init
всегда работает. Поэтому, когда вы запускаетеrm /sbin/init
, файл просто не связан с файловой системой. Содержимое индекса и файла остается на диске и в памяти до выхода PID 1. Вам просто нужно заново создать/sbin/init
из соответствующего inode.Самый простой способ сделать это:
источник