> uname -r
FATAL: kernel too old
> cat /proc/cmdline
FATAL: kernel too old
В / boot есть 3 * .vmlinuz-linux файла. Как определить, какое ядро работает в данный момент?
Обратите внимание, что я работаю в ограниченной среде с минимальной оболочкой. Я также попробовал:
> sh -c 'read l < /proc/version; echo $l'
FATAL: kernel too old
> dd if=/proc/version
FATAL: kernel too old
Есть предположения?
chrome://system/
Ответы:
Вы обновили свою libc (самую базовую системную библиотеку), и теперь ни одна программа не работает. Если быть точным, динамически связанная программа не работает.
В вашем конкретном случае перезагрузка должна работать. Для установленной сейчас libc требуется более новое ядро, и если вы перезагрузитесь, вы должны получить это более новое ядро.
Пока у вас есть работающая оболочка, часто есть способ ее восстановить, но это может быть сложно, если вы не планировали ее. Если у вас нет оболочки, то обычно нет иного решения, кроме перезагрузки.
Здесь вы не сможете восстановить без перезагрузки, но вы можете по крайней мере легко узнать, какое ядро работает. Просто используйте способ чтения
/proc/version
, который не требует внешней команды.Если у вас все еще есть копия старого libc, вы можете запускать программы с ним. Например, если старая библиотека libc включена
/old/lib
и у вас есть исполняемые файлы, которые работают с этой старой библиотекой libc/old/bin
, вы можете запуститьЕсли у вас есть статически связанные двоичные файлы, они все равно будут работать. Я рекомендую установить статистически связанные системные утилиты для такого рода проблем (но вы должны сделать это до того, как проблема начнется). Например, в Debian / Ubuntu / Mint /… установите один или несколько из busybox-static (набор базовых инструментов командной строки Linux, включая оболочку), sash (shell с некоторыми дополнительными встроенными функциями), zsh-static (просто оболочка, но с довольно много встроенных удобных инструментов).
источник
Это похоже на ошибку, которую выдает glibc, если он работает на ядре, которое старше, чем то, что библиотека скомпилирована для поддержки. Сообщение об ошибке находится в
DL_SYSDEP_OSCHECK(FATAL)
макросе вsysdeps/unix/sysv/linux/dl-osinfo.h
Для этого есть опция времени компиляции :
Таким образом, кажется, что по какой-то причине вы используете систему со старым ядром, но с установленным glibc, который больше не поддерживает старое ядро. Трудно сказать, как вы это получили, без информации о том, что это за система, но можно предположить, что это может произойти, если библиотека будет обновлена, а ядро - нет.
file
кажется, показывает минимальную версию, требуемую для исполняемого файла или библиотеки (но, конечно, вам нужна рабочая библиотека для ее запуска):В моих полу-текущих системах Debian необходимая версия ядра такая же,
2.6.32
как указано выше для всех двоичных файлов, которые я проверял, что исключало бы вероятность возникновения проблемы с версией ядра.источник
Попробуйте с этим:
источник
> cat /proc/version FATAL: kernel too old
cat
недоступна.head /proc/version
||tail /proc/version
||sed '1q;d' /proc/version
Используйте
strings
команду для извлечения информации для печати изvmlinuz
файла.Пример вывода:
источник