> uname -r
FATAL: kernel too old
> cat /proc/cmdline
FATAL: kernel too old
Ada 3 * file .vmlinuz-linux di / boot. Bagaimana cara saya menentukan kernel mana yang sedang berjalan?
Perhatikan bahwa saya menjalankan dalam lingkungan terbatas dengan shell minimal. Saya juga sudah mencoba:
> sh -c 'read l < /proc/version; echo $l'
FATAL: kernel too old
> dd if=/proc/version
FATAL: kernel too old
Adakah pikiran?
chrome://system/
Jawaban:
Anda telah meningkatkan libc Anda (pustaka sistem paling dasar) dan sekarang tidak ada program yang berfungsi. Lebih tepatnya, tidak ada program yang terhubung secara dinamis.
Dalam skenario khusus Anda, reboot harus bekerja. Libc yang sekarang diinstal membutuhkan kernel yang lebih baru, dan jika Anda reboot, Anda harus mendapatkan kernel yang lebih baru.
Selama Anda masih memiliki shell yang berjalan, seringkali ada cara untuk memulihkannya, tetapi ini bisa sulit jika Anda tidak merencanakannya. Jika Anda tidak memiliki shell maka biasanya tidak ada solusi selain me-reboot.
Di sini Anda mungkin tidak dapat memulihkan tanpa me-reboot, tetapi Anda setidaknya dapat dengan mudah mengetahui kernel apa yang sedang berjalan. Cukup gunakan cara membaca
/proc/version
yang tidak memerlukan perintah eksternal.Jika Anda masih memiliki salinan libc lama, Anda dapat menjalankan program dengannya. Misalnya, jika libc lama ada
/old/lib
dan Anda memiliki file executable yang berfungsi dengan libc lama ini/old/bin
, Anda bisa menjalankanJika Anda memiliki beberapa binari yang terhubung secara statis, mereka akan tetap berfungsi. Saya sarankan menginstal utilitas sistem yang terhubung secara statistik untuk masalah seperti ini (tetapi Anda harus melakukannya sebelum masalah dimulai). Misalnya, pada Debian / Ubuntu / Mint / ..., instal satu atau lebih busybox-static (kumpulan alat-alat baris perintah Linux dasar termasuk shell), sash (shell dengan beberapa builtin tambahan), zsh-static (hanya shell tetapi dengan beberapa alat praktis bawaan).
sumber
Itu kelihatannya error glibc melempar jika itu berjalan pada kernel yang lebih tua dari apa perpustakaan dikompilasi untuk mendukung. Pesan kesalahan ada di
DL_SYSDEP_OSCHECK(FATAL)
makro disysdeps/unix/sysv/linux/dl-osinfo.h
Ada opsi waktu kompilasi untuk ini:
Jadi sepertinya karena alasan tertentu, Anda menjalankan sistem dengan kernel lama tetapi glibc yang terinstal yang tidak mendukung kernel lama lagi. Bagaimana Anda mendapatkannya sulit untuk mengetahui tanpa informasi tentang sistem apa itu, tetapi orang mungkin berasumsi itu bisa terjadi jika perpustakaan diperbarui tetapi kernel tidak.
file
tampaknya menunjukkan versi minimum yang diperlukan oleh executable atau perpustakaan (tapi tentu saja Anda membutuhkan perpustakaan yang berfungsi untuk menjalankannya):Pada sistem Debian semi-lancar saya, versi kernel yang diperlukan adalah
2.6.32
seperti di atas pada semua binari yang saya periksa, yang akan membuatnya sangat tidak mungkin mengenai masalah dengan versi kernel.sumber
Coba dengan ini:
sumber
> cat /proc/version FATAL: kernel too old
cat
tidak tersedia.head /proc/version
||tail /proc/version
||sed '1q;d' /proc/version
Gunakan
strings
perintah untuk mengekstrak informasi yang dapat dicetak darivmlinuz
file.Output sampel:
sumber