> uname -r
FATAL: kernel too old
> cat /proc/cmdline
FATAL: kernel too old
In / boot befinden sich 3 * .vmlinuz-linux-Dateien. Wie bestimme ich, welcher Kernel gerade läuft?
Beachten Sie, dass ich in einer eingeschränkten Umgebung mit einer minimalen Shell arbeite. Ich habe auch versucht:
> sh -c 'read l < /proc/version; echo $l'
FATAL: kernel too old
> dd if=/proc/version
FATAL: kernel too old
Irgendwelche Gedanken?
chrome://system/
Antworten:
Sie haben Ihre libc (die grundlegendste Systembibliothek) aktualisiert und jetzt funktioniert kein Programm mehr. Um genau zu sein, funktioniert kein dynamisch verknüpftes Programm.
In Ihrem speziellen Szenario sollte ein Neustart funktionieren. Die jetzt installierte libc erfordert einen neueren Kernel. Wenn Sie neu starten, sollten Sie diesen neueren Kernel erwerben.
Solange Sie noch eine laufende Shell haben, gibt es oft eine Möglichkeit, sich zu erholen, aber es kann schwierig sein, wenn Sie es nicht geplant haben. Wenn Sie keine Shell haben, gibt es normalerweise keine andere Lösung als einen Neustart.
Hier können Sie möglicherweise nicht ohne Neustart wiederherstellen, aber Sie können zumindest leicht herausfinden, welcher Kernel ausgeführt wird. Verwenden Sie einfach eine Lesemethode
/proc/version
, die keinen externen Befehl erfordert.Wenn Sie noch eine Kopie der alten libc haben, können Sie Programme damit ausführen. Wenn sich die alte libc beispielsweise in befindet
/old/lib
und Sie ausführbare Dateien haben, die mit dieser alten libc in funktionieren/old/bin
, können Sie sie ausführenWenn Sie über statisch verknüpfte Binärdateien verfügen, funktionieren diese weiterhin. Ich empfehle, statistisch verknüpfte Systemdienstprogramme für diese Art von Problem zu installieren (aber Sie müssen dies tun, bevor das Problem beginnt). Zum Beispiel auf Debian / Ubuntu / Mint / ..., installieren Sie eine oder mehrere der busybox-static (Sammlung von grundlegenden Linux - Kommandozeilen - Tools, die eine Shell), Schärpe (Schale mit einigen zusätzlichen builtins), zsh-static (nur eine Hülle , aber mit einigen handlichen Werkzeugen).
quelle
Dies scheint der Fehler zu sein, den glibc auslöst, wenn es auf einem Kernel läuft, der älter ist als das, wofür die Bibliothek kompiliert wurde. Die Fehlermeldung ist im
DL_SYSDEP_OSCHECK(FATAL)
Makro insysdeps/unix/sysv/linux/dl-osinfo.h
Hierfür gibt es eine Kompilierungszeitoption :
Es scheint also, dass Sie aus irgendeinem Grund ein System mit einem alten Kernel ausführen, aber einer installierten glibc, die den alten Kernel nicht mehr unterstützt. Es ist schwer zu sagen, wie Sie darauf gekommen sind, ohne Informationen darüber zu haben, um welches System es sich handelt. Man kann jedoch davon ausgehen, dass dies passieren kann, wenn die Bibliothek aktualisiert wird, der Kernel jedoch nicht.
file
Anscheinend wird die Mindestversion angezeigt, die von einer ausführbaren Datei oder einer Bibliothek benötigt wird (aber Sie benötigen natürlich eine funktionierende Bibliothek, um sie auszuführen):Auf meinen halb-aktuellen Debian-Systemen ist die erforderliche Kernel-Version
2.6.32
wie oben auf allen Binärdateien, die ich überprüft habe, was es ziemlich unwahrscheinlich macht, dass ein Problem mit der Kernel-Version auftritt.quelle
Versuchen Sie es mit diesem:
quelle
> cat /proc/version FATAL: kernel too old
cat
ist nicht verfügbar.head /proc/version
||tail /proc/version
||sed '1q;d' /proc/version
Verwenden Sie den
strings
Befehl, um die druckbaren Informationen aus dervmlinuz
Datei zu extrahieren .Beispielausgabe:
quelle