Nie próbuj ln -L- to nie zadziała. cp /proc/fd/1/exe /sbin/init && chmod 755 /sbin/initdziała jednak. Użycie APT do ponownej instalacji upstartu nie jest tak oczywiste dpkg, ponieważ nie będzie wiedział, że domyślnie zniknęło. „Pakiet upstart jest już w bieżącej wersji”. Mógłbyś dpkg --force-depends --force-remove-essential -r upstartpierwszy.
Joshua
1
apt-get install --reinstall upstart. Poza tym nie mam /proc/fdkatalogu. I właśnie sprawdziłem, ln -L /proc/1/exe /tmp/initdziała z /sbin/initprzemianowaną na /sbin/init.bak, tj. Mogę /tmp/initpotem czytać bez problemu .
Ruslan
@muru OK. Dodam wtedy synonim tagu.
Kaz Wolfe
Odpowiedzi:
31
Program ładujący załaduje jądro, jądro spróbuje uruchomić init, nie znajdzie go i wpadnie w panikę.
Wyjściem z niego jest restart, edycja parametrów rozruchu, dodawanie init=/bin/bashi uruchamianie w ten sposób. Jądro użyje bash jako init. To da ci szansę na uruchomienie poleceń i naprawienie systemu.
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.");
Więc znalazłby / bin / sh (który jest linkiem do myślnika), a to da ci powłokę i szansę na naprawienie jej bez użycia init=/bin/bashparametru boot.
Świetna odpowiedź. Nie wiedziałem, że jądro szuka czegoś więcej niż /sbin/init.
Ruslan
A jeśli nie ma /bin/shpliku? Lub /bin/bashlub /bin/dashitp? Nie wiesz, jak możesz usunąć je wszystkie jednocześnie, ale co by się stało teoretycznie?
trysis
Cóż, wtedy zobaczyłbyś panikę jądra, część odpowiedzi powyżej linii korekcji . Ale nie rób tego w systemie, którego potrzebujesz. Poważnie, nie rób tego. Jeśli chcesz eksperymentować (i jest to dobre ćwiczenie), utwórz maszynę wirtualną Virtualbox, zepsuć ją i spróbować naprawić. BTW, odpowiedź 200_success też nie jest zła.
sмurf
12
Nic się nie dzieje, dopóki nie spróbujesz zrestartować komputera. Dopóki system działa, a ty nie próbujesz przełączać poziomów pracy , uruchamiając /sbin/initn , nawet nie zdajesz sobie sprawy, że zniknął.
W rzeczywistości usunięcie nie /sbin/initjest możliwe, jeśli wcześnie zdasz sobie sprawę z błędu i zachowasz spokój. Administratorzy systemu wyzdrowiali z dużo bardziej paskudnych „lobotomii” , utrzymując system operacyjny w działaniu.
Jednym ze sposobów odzyskania po usunięciu /sbin/initjest ponowna instalacja upstartpakietu za pomocą APT.
Macho sposobem na odzyskanie jest użycie tylko zasobów na samej maszynie. Jednym z czynników na twoją korzyść jest to, że /sbin/initzawsze działa. Dlatego po uruchomieniu rm /sbin/initplik jest jedynie odłączany od systemu plików. Zawartość i-węzła i zawartości pliku pozostaje na dysku i w pamięci do momentu wyjścia PID 1. Musisz tylko ponownie utworzyć /sbin/initz odpowiedniego i-węzła.
-L
- to nie zadziała.cp /proc/fd/1/exe /sbin/init && chmod 755 /sbin/init
działa jednak. Użycie APT do ponownej instalacji upstartu nie jest tak oczywistedpkg
, ponieważ nie będzie wiedział, że domyślnie zniknęło. „Pakiet upstart jest już w bieżącej wersji”. Mógłbyśdpkg --force-depends --force-remove-essential -r upstart
pierwszy.apt-get install --reinstall upstart
. Poza tym nie mam/proc/fd
katalogu. I właśnie sprawdziłem,ln -L /proc/1/exe /tmp/init
działa z/sbin/init
przemianowaną na/sbin/init.bak
, tj. Mogę/tmp/init
potem czytać bez problemu .Odpowiedzi:
Program ładujący załaduje jądro, jądro spróbuje uruchomić init, nie znajdzie go i wpadnie w panikę.
Wyjściem z niego jest restart, edycja parametrów rozruchu, dodawanie
init=/bin/bash
i uruchamianie w ten sposób. Jądro użyje bash jako init. To da ci szansę na uruchomienie poleceń i naprawienie systemu.Korekta
Najwyraźniej jądro (plik init / main.c ):
Więc znalazłby / bin / sh (który jest linkiem do myślnika), a to da ci powłokę i szansę na naprawienie jej bez użycia
init=/bin/bash
parametru boot.źródło
/sbin/init
./bin/sh
pliku? Lub/bin/bash
lub/bin/dash
itp? Nie wiesz, jak możesz usunąć je wszystkie jednocześnie, ale co by się stało teoretycznie?Nic się nie dzieje, dopóki nie spróbujesz zrestartować komputera. Dopóki system działa, a ty nie próbujesz przełączać poziomów pracy , uruchamiając
/sbin/init
n , nawet nie zdajesz sobie sprawy, że zniknął.W rzeczywistości usunięcie nie
/sbin/init
jest możliwe, jeśli wcześnie zdasz sobie sprawę z błędu i zachowasz spokój. Administratorzy systemu wyzdrowiali z dużo bardziej paskudnych „lobotomii” , utrzymując system operacyjny w działaniu.Jednym ze sposobów odzyskania po usunięciu
/sbin/init
jest ponowna instalacjaupstart
pakietu za pomocą APT.Macho sposobem na odzyskanie jest użycie tylko zasobów na samej maszynie. Jednym z czynników na twoją korzyść jest to, że
/sbin/init
zawsze działa. Dlatego po uruchomieniurm /sbin/init
plik jest jedynie odłączany od systemu plików. Zawartość i-węzła i zawartości pliku pozostaje na dysku i w pamięci do momentu wyjścia PID 1. Musisz tylko ponownie utworzyć/sbin/init
z odpowiedniego i-węzła.Najprostszym sposobem, aby to osiągnąć jest:
źródło