> uname -r
FATAL: kernel too old
> cat /proc/cmdline
FATAL: kernel too old
Il y a 3 * fichiers .vmlinuz-linux dans / boot. Comment déterminer le noyau en cours d'exécution?
Notez que je cours dans un environnement limité avec un shell minimal. J'ai aussi essayé:
> sh -c 'read l < /proc/version; echo $l'
FATAL: kernel too old
> dd if=/proc/version
FATAL: kernel too old
Des pensées?
chrome://system/
Réponses:
Vous avez mis à jour votre libc (la bibliothèque système la plus basique) et maintenant aucun programme ne fonctionne. Pour être précis, aucun programme lié dynamiquement ne fonctionne.
Dans votre scénario particulier, le redémarrage devrait fonctionner. La libc maintenant installée nécessite un noyau plus récent, et si vous redémarrez, vous devriez obtenir ce noyau plus récent.
Tant que vous avez toujours un shell en cours d'exécution, il existe souvent un moyen de récupérer, mais cela peut être difficile si vous ne le planifiez pas. Si vous n'avez pas de shell, il n'y a généralement pas de solution autre que le redémarrage.
Ici, vous ne pourrez peut-être pas récupérer sans redémarrer, mais vous pouvez au moins facilement savoir quel noyau est en cours d'exécution. Utilisez simplement un moyen de lire
/proc/version
qui ne nécessite pas de commande externe.Si vous avez toujours une copie de l'ancienne libc, vous pouvez exécuter des programmes avec. Par exemple, si l'ancienne libc est dans
/old/lib
et que vous avez des exécutables qui fonctionnent avec cette ancienne libc dans/old/bin
, vous pouvez exécuterSi vous avez des fichiers binaires liés statiquement, ils fonctionneront toujours. Je recommande d'installer des utilitaires système liés statistiquement pour ce type de problème (mais vous devez le faire avant que le problème ne commence). Par exemple, sur Debian / Ubuntu / Mint /…, installez un ou plusieurs de busybox-static (collection d'outils de ligne de commande Linux de base, y compris un shell), sash (shell avec quelques extensions supplémentaires), zsh-static (juste un shell mais avec pas mal d'outils pratiques intégrés).
la source
Cela semble être l'erreur lancée par la glibc si elle s'exécute sur un noyau plus ancien que ce que la bibliothèque est compilée pour prendre en charge. Le message d'erreur se trouve dans la
DL_SYSDEP_OSCHECK(FATAL)
macro danssysdeps/unix/sysv/linux/dl-osinfo.h
Il existe une option de compilation pour cela:
Il semble donc que pour une raison quelconque, vous exécutez un système avec un ancien noyau mais une glibc installée qui ne prend plus en charge l'ancien noyau. Il est difficile de dire comment vous l'avez obtenu sans informations sur le système, mais on pourrait supposer que cela pourrait se produire si la bibliothèque est mise à jour mais pas le noyau.
file
semble montrer la version minimale requise par un exécutable ou une bibliothèque (mais bien sûr, vous avez besoin d'une bibliothèque de travail pour l'exécuter):Sur mes systèmes Debian semi-actuels, la version du noyau requise est
2.6.32
comme ci-dessus sur tous les binaires que j'ai vérifiés, ce qui rendrait très peu probable un problème avec la version du noyau.la source
Essayez avec ceci:
la source
> cat /proc/version FATAL: kernel too old
cat
n'est pas disponible.head /proc/version
||tail /proc/version
||sed '1q;d' /proc/version
Utilisez la
strings
commande pour extraire les informations imprimables duvmlinuz
fichier.Exemple de sortie:
la source