> uname -r
FATAL: kernel too old
> cat /proc/cmdline
FATAL: kernel too old
W katalogu / boot znajdują się 3 pliki * .vmlinuz-linux. Jak ustalić, które jądro jest obecnie uruchomione?
Zauważ, że działam w ograniczonym środowisku z minimalną powłoką. Próbowałem też:
> sh -c 'read l < /proc/version; echo $l'
FATAL: kernel too old
> dd if=/proc/version
FATAL: kernel too old
jakieś pomysły?
chrome://system/
Odpowiedzi:
Zaktualizowałeś bibliotekę libc (najbardziej podstawową bibliotekę systemową) i teraz nie działa żaden program. Mówiąc ściślej, żaden dynamicznie powiązany program nie działa.
W twoim konkretnym scenariuszu ponowne uruchomienie powinno działać. Teraz zainstalowane libc wymaga nowszego jądra, a jeśli uruchomisz ponownie, powinieneś dostać to nowsze jądro.
Tak długo, jak nadal masz działającą powłokę, często istnieje sposób na odzyskanie, ale może to być trudne, jeśli nie planujesz tego. Jeśli nie masz powłoki, zwykle nie ma innego rozwiązania niż ponowne uruchomienie.
Tutaj możesz nie być w stanie odzyskać bez restartu, ale możesz przynajmniej łatwo dowiedzieć się, jakie jądro działa. Wystarczy użyć sposobu czytania
/proc/version
, który nie wymaga zewnętrznego polecenia.Jeśli nadal masz kopię starej biblioteki libc, możesz z nią uruchamiać programy. Na przykład, jeśli stary libc jest włączony
/old/lib
i masz pliki wykonywalne, które działają z tym starym libc w/old/bin
, możesz uruchomićJeśli masz jakieś statycznie połączone pliki binarne, nadal będą działać. Polecam instalowanie statystycznie połączonych narzędzi systemowych dla tego rodzaju problemów (ale musisz to zrobić, zanim problem zacznie się). Na przykład, Debian / Ubuntu / Mint / ..., zainstalować jedną lub więcej z BusyBox-Static (zbieranie podstawowych narzędzi wiersza poleceń systemu Linux, w tym skorupy), skrzydło (powłoki z kilku dodatkowych poleceń wbudowanych), zsh-Static (tylko powłoka ale z kilkoma wbudowanymi przydatnymi narzędziami).
źródło
Wydaje się, że jest to błąd zgłaszany przez glibc, jeśli działa na jądrze starszym niż skompilowana biblioteka do obsługi. Komunikat o błędzie znajduje się w
DL_SYSDEP_OSCHECK(FATAL)
makrze wsysdeps/unix/sysv/linux/dl-osinfo.h
Jest do tego opcja czasu kompilacji :
Wygląda więc na to, że z jakiegoś powodu używasz systemu ze starym jądrem, ale z zainstalowanym glibc, który nie obsługuje już starego jądra. Trudno powiedzieć, jak to się stało, bez informacji o tym, jaki to system, ale można założyć, że tak się stanie, jeśli biblioteka zostanie zaktualizowana, ale jądro nie.
file
wydaje się pokazywać minimalną wersję wymaganą przez plik wykonywalny lub bibliotekę (ale oczywiście potrzebujesz działającej biblioteki, aby ją uruchomić):W moich półprądowych systemach Debian wymagana wersja jądra jest taka sama
2.6.32
jak powyżej na wszystkich sprawdzonych przez mnie plikach binarnych, co sprawiłoby, że wystąpienie problemu z wersją jądra jest mało prawdopodobne.źródło
Spróbuj tego:
źródło
> cat /proc/version FATAL: kernel too old
cat
nie jest dostępna.head /proc/version
||tail /proc/version
||sed '1q;d' /proc/version
Użyj
strings
polecenia, aby wyodrębnić informacje do wydrukowania zvmlinuz
pliku.Przykładowe dane wyjściowe:
źródło