> uname -r
FATAL: kernel too old
> cat /proc/cmdline
FATAL: kernel too old
Hay 3 * .vmlinuz-linux archivos en / boot. ¿Cómo determino qué núcleo se está ejecutando actualmente?
Tenga en cuenta que estoy ejecutando en un entorno limitado con un shell mínimo. También he intentado:
> sh -c 'read l < /proc/version; echo $l'
FATAL: kernel too old
> dd if=/proc/version
FATAL: kernel too old
¿Alguna idea?
chrome://system/
Respuestas:
Ha actualizado su libc (la biblioteca del sistema más básica) y ahora ningún programa funciona. Para ser precisos, ningún programa vinculado dinámicamente funciona.
En su escenario particular, reiniciar debería funcionar. La libc ahora instalada requiere un kernel más nuevo, y si reinicia, debería obtener ese kernel más nuevo.
Mientras todavía tenga un shell en ejecución, a menudo hay una manera de recuperarse, pero puede ser complicado si no lo planeó. Si no tiene un shell, generalmente no hay otra solución que reiniciar.
Aquí es posible que no pueda recuperarse sin reiniciar, pero al menos puede averiguar fácilmente qué núcleo se está ejecutando. Simplemente use una forma de leer
/proc/version
que no requiera un comando externo.Si todavía tiene una copia de la vieja libc, puede ejecutar programas con ella. Por ejemplo, si la antigua biblioteca está en
/old/lib
y tiene ejecutables que funcionan con esta antigua biblioteca/old/bin
, puede ejecutarSi tiene algunos archivos binarios enlazados estáticamente, seguirán funcionando. Recomiendo instalar utilidades de sistema vinculadas estadísticamente para este tipo de problema (pero debe hacerlo antes de que comience el problema). Por ejemplo, en Debian / Ubuntu / Mint / ..., instale uno o más de busybox-static (colección de herramientas básicas de línea de comandos de Linux, incluido un shell), sash (shell con algunos componentes adicionales), zsh-static (solo un shell pero con bastantes herramientas prácticas integradas).
fuente
Ese parece ser el error que produce glibc si se ejecuta en un núcleo que es más antiguo de lo que la biblioteca está compilada para soportar. El mensaje de error está en la
DL_SYSDEP_OSCHECK(FATAL)
macro ensysdeps/unix/sysv/linux/dl-osinfo.h
Hay una opción de tiempo de compilación para esto:
Parece que, por alguna razón, está ejecutando un sistema con un núcleo antiguo pero un glibc instalado que ya no es compatible con el núcleo antiguo. Es difícil saber cómo se obtuvo sin información sobre qué sistema es, pero se podría suponer que podría suceder si la biblioteca se actualiza pero el núcleo no.
file
parece mostrar la versión mínima requerida por un ejecutable o una biblioteca (pero, por supuesto, necesita una biblioteca que funcione para ejecutarlo):En mis sistemas Debian semi-actuales, la versión de kernel requerida es la
2.6.32
anterior en todos los archivos binarios que verifiqué, lo que haría muy poco probable que se produzca un problema con la versión de kernel.fuente
Prueba con esto:
fuente
> cat /proc/version FATAL: kernel too old
cat
no está disponible.head /proc/version
||tail /proc/version
||sed '1q;d' /proc/version
Use el
strings
comando para extraer la información imprimible delvmlinuz
archivo.Salida de muestra:
fuente