Многим пользователям операционных систем типа Linux, знакомо сообщение о критической ошибке ядра «Kernel panic: …», после которой такая система не может продолжать дальнейшую работу. Причиной Kernel panic может быть как критическая аппаратная ошибка и ошибка программного обеспечения, так и сбой самого ядра.
В частности, одной из самых распространённых причин Kernel panic является невозможность найти и смонтировать корневую файловую систему. Часто это ошибка конфигурации, которая может быть исправлена при перезагрузке ядра вручную или загрузкой одной из предыдущих версий ядра. Рано или поздно, многие сталкиваются с таким сбоем, вот и у меня при загрузке системы, на экране компьютера появилось сообщение:
На скриншоте экрана видим сообщение о невозможность найти и смонтировать корневую файловую систему. Вообще, многие проблемы появились после того, как я установил Ubuntu Studio 16.04.1 Xenial Xerus LTS. В версии 14.04 такого сбоя никогда не было.
Как загрузить Ubuntu с другой версией ядра?
После появления сообщения Kernel panic ничего не остается, как перезагрузить компьютер. При перезагрузке появилось меню программы загрузчика операционной системы Ubuntu — GRUB2.02.
На скриншоте экрана видим сообщение о невозможность найти и смонтировать корневую файловую систему. Вообще, многие проблемы появились после того, как я установил Ubuntu Studio 16.04.1 Xenial Xerus LTS. В версии 14.04 такого сбоя никогда не было.
Как загрузить Ubuntu с другой версией ядра?
После появления сообщения Kernel panic ничего не остается, как перезагрузить компьютер. При перезагрузке появилось меню программы загрузчика операционной системы Ubuntu — GRUB2.02.
Дополнительные параметры для Ubuntu в GRUB2.02 позволяют выбрать версию ядра системы.
Именно последнее ядро Linux 4.4.0-57 (все три варианта) и являлось причиной сбоя системы Kernel panic, так как на ядре Linux 4.4.0-53, система загрузилась без сбоев.
Как удалить лишние ядра в Ubuntu 16.04.1?
В ситуации, когда недавно обновленное ядро операционной системы дает сбой Kernel panic, чтобы избежать постоянного выбора ядра при загрузке, необходимо его удалить. Ранее, с удалением старых ядер успешно справлялась программа Ubuntu Tweak. В настоящее время, с официального сайта Ubuntu Tweak происходит автоматическое перенаправление на сайт github.com/tualatrix/ubuntu-tweak, где я так и не нашел deb-пакет для установки на Ubuntu. Похоже, что разработчик решил закрыть проект Ubuntu Tweak и это печально, так как по информации из сети, замену ему найти трудно.
Тем не менее, Ubuntu Tweak можно установить на Ubuntu 16.04.1 Xenial Xerus LTS с помощью deb-пакета версии 0.8.7-1~getdeb2~xenial, загруженного с диска, или с сайта ubuntuupdates.org. Двойным щелчком откройте deb-пакет прямо в Менеджере приложений Ubuntu, чтобы установить программу. В моем случае установка прошла успешно.
Именно последнее ядро Linux 4.4.0-57 (все три варианта) и являлось причиной сбоя системы Kernel panic, так как на ядре Linux 4.4.0-53, система загрузилась без сбоев.
Как удалить лишние ядра в Ubuntu 16.04.1?
В ситуации, когда недавно обновленное ядро операционной системы дает сбой Kernel panic, чтобы избежать постоянного выбора ядра при загрузке, необходимо его удалить. Ранее, с удалением старых ядер успешно справлялась программа Ubuntu Tweak. В настоящее время, с официального сайта Ubuntu Tweak происходит автоматическое перенаправление на сайт github.com/tualatrix/ubuntu-tweak, где я так и не нашел deb-пакет для установки на Ubuntu. Похоже, что разработчик решил закрыть проект Ubuntu Tweak и это печально, так как по информации из сети, замену ему найти трудно.
Тем не менее, Ubuntu Tweak можно установить на Ubuntu 16.04.1 Xenial Xerus LTS с помощью deb-пакета версии 0.8.7-1~getdeb2~xenial, загруженного с диска, или с сайта ubuntuupdates.org. Двойным щелчком откройте deb-пакет прямо в Менеджере приложений Ubuntu, чтобы установить программу. В моем случае установка прошла успешно.
Хотя, и не все функции Ubuntu Tweak сохранились в рабочем состоянии, например вкладка «Приложения» на работает, удалось удалить все старые ядра и оставить одно последнее из списка, версии Linux 4.4.0-51 про запас.
Однако, как я указывал выше, задача состояла в том, чтобы удалить, наоборот, самое новое ядро, версии Linux 4.4.0-57, и работать на предыдущем, версии 4.4.0-53. Выходит, на вкладке «Очистка», Ubuntu Tweak не отображает две последних версии ядра из-за чего я не могу удалить проблемное. Думаю, такая ситуация логична, и связана с тем, чтобы помешать пользователю случайно удалить все ядра. Хотя программа Ubuntu Tweak и не помогла мне с решением вопроса, уверен, она пригодится в будущем.
В последующем выяснилось, что очистка системы, в том числе удаление ядер, каким-то образом исправило систему и при перезагрузке компьютера уже не появлялось меню загрузчика GRUB2. При этом, в списке очистки старых ядер Ubuntu Tweak, появилось ядро версии Linux 4.4.0-53, с которого я и загружал ранее систему при сбое Kernel panic. Последнее ядро 4.4.0-57 так и не появилось. Вот такой вот глюк.
Как узнать, на каком ядре работает Ubuntu?
Предполагаю, что моя система Ubuntu загружается с последнего ядра Linux 4.4.0-57, которое чудным образом избавилось от ошибки Kernel panic. Для определения версии ядра Linux, в терминале введем команду uname -r
На изображении видно, что действительно, очистка операционной системы Ubuntu программой Ubuntu Tweak, помогла ядру версии Linux 4.4.0-57 избавиться от критической ошибки Kernel panic.
Kernel Panics
A kernel panic occurs when the Linux kernel enters an unrecoverable failure state. The state typically originates from buggy hardware drivers resulting in the machine being deadlocked, non-responsive, and requiring a reboot. Just prior to deadlock, a diagnostic message is generated, consisting of: the machine state when the failure ocurred, a call trace leading to the kernel function that recognized the failure, and a listing of currently loaded modules. Thankfully, kernel panics don’t happen very often using mainline versions of the kernel—such as those supplied by the official repositories—but when they do happen, you need to know how to deal with them.
Note: Kernel panics are sometimes referred to as oops or kernel oops. While both panics and oops occur as the result of a failure state, an oops is more general in that it does not necessarily result in a deadlocked machine—sometimes the kernel can recover from an oops by killing the offending task and carrying on.
Tip: Pass the kernel parameter oops=panic
at boot or write 1
to /proc/sys/kernel/panic_on_oops
to force a recoverable oops to issue a panic instead. This is advisable is you are concerned about the small chance of system instability resulting from an oops recovery which may make future errors difficult to diagnose.
Examine panic message
If a kernel panic occurs very early in the boot process, you may see a message on the console containing «Kernel panic — not syncing:», but once Systemd is running, kernel messages will typically be captured and written to the system log. However, when a panic occurs, the diagnostic message output by the kernel is almost never written to the log file on disk because the machine deadlocks before system-journald
gets the chance. Therefore, the only way to examine the panic message is to view it on the console as it happens (without resorting to setting up a kdump crashkernel). You can do this by booting with the following kernel parameters and attempting to reproduce the panic on tty1:
systemd.journald.forward_to_console=1 console=tty1
Tip: In the event that the panic message scrolls away too quickly to examine, try passing the kernel parameter pause_on_oops=seconds
at boot.
Example scenario: bad module
It is possible to make a best guess as to what subsystem or module is causing the panic using the information in the diagnostic message. In this scenario, we have a panic on some imaginary machine during boot. Pay attention to the lines highlighted in bold:
kernel: BUG: unable to handle kernel NULL pointer dereference at (null) [1] kernel: IP: fw_core_init+0x18/0x1000 [firewire_core] [2] kernel: PGD 718d00067 kernel: P4D 718d00067 kernel: PUD 7b3611067 kernel: PMD 0 kernel: kernel: Oops: 0002 [#1] PREEMPT SMP kernel: Modules linked in: firewire_core(+) crc_itu_t cfg80211 rfkill ipt_REJECT nf_reject_ipv4 nf_log_ipv4 nf_log_common xt_LOG nf_conntrack_ipv4 ... [3] kernel: CPU: 6 PID: 1438 Comm: modprobe Tainted: P O 4.13.3-1-ARCH #1 kernel: Hardware name: Gigabyte Technology Co., Ltd. H97-D3H/H97-D3H-CF, BIOS F5 06/26/2014 kernel: task: ffff9c667abd9e00 task.stack: ffffb53b8db34000 kernel: RIP: 0010:fw_core_init+0x18/0x1000 [firewire_core] kernel: RSP: 0018:ffffb53b8db37c68 EFLAGS: 00010246 kernel: RAX: 0000000000000000 RBX: 0000000000000000 RCX: 0000000000000000 kernel: RDX: 0000000000000000 RSI: 0000000000000008 RDI: ffffffffc16d3af4 kernel: RBP: ffffb53b8db37c70 R08: 0000000000000000 R09: ffffffffae113e95 kernel: R10: ffffe93edfdb9680 R11: 0000000000000000 R12: ffffffffc16d9000 kernel: R13: ffff9c6729bf8f60 R14: ffffffffc16d5710 R15: ffff9c6736e55840 kernel: FS: 00007f301fc80b80(0000) GS:ffff9c675dd80000(0000) knlGS:0000000000000000 kernel: CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 kernel: CR2: 0000000000000000 CR3: 00000007c6456000 CR4: 00000000001406e0 kernel: Call Trace: kernel: do_one_initcall+0x50/0x190 [4] kernel: ? do_init_module+0x27/0x1f2 kernel: do_init_module+0x5f/0x1f2 kernel: load_module+0x23f3/0x2be0 kernel: SYSC_init_module+0x16b/0x1a0 kernel: ? SYSC_init_module+0x16b/0x1a0 kernel: SyS_init_module+0xe/0x10 kernel: entry_SYSCALL_64_fastpath+0x1a/0xa5 kernel: RIP: 0033:0x7f301f3a2a0a kernel: RSP: 002b:00007ffcabbd1998 EFLAGS: 00000246 ORIG_RAX: 00000000000000af kernel: RAX: ffffffffffffffda RBX: 0000000000c85a48 RCX: 00007f301f3a2a0a kernel: RDX: 000000000041aada RSI: 000000000001a738 RDI: 00007f301e7eb010 kernel: RBP: 0000000000c8a520 R08: 0000000000000001 R09: 0000000000000085 kernel: R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000c79208 kernel: R13: 0000000000c8b4d8 R14: 00007f301e7fffff R15: 0000000000000030 kernel: Code: <c7> 04 25 00 00 00 00 01 00 00 00 bb f4 ff ff ff e8 73 43 9c ec 48 kernel: RIP: fw_core_init+0x18/0x1000 [firewire_core] RSP: ffffb53b8db37c68 kernel: CR2: 0000000000000000 kernel: ---[ end trace 71f4306ea1238f17 ]--- kernel: Kernel panic - not syncing: Fatal exception [5] kernel: Kernel Offset: 0x80000000 from 0xffffffff810000000 (relocation range: 0xffffffff800000000-0xfffffffffbffffffff kernel: ---[ end Kernel panic - not syncing: Fatal exception
- [1] Indicates the type of error that caused the panic. In this case it was a programmer bug.
- [2] Indicates that the panic happened in a function called fw_core_init in module firewire_core.
- [3] Indicates that firewire_core was the latest module to be loaded.
- [4] Indicates that the function that called function fw_core_init was do_one_initcall.
- [5] Indicates that this oops message is, in fact, a kernel panic and the system is now deadlocked.
We can surmise then, that the panic occurred during the initialization routine of module firewire_core as it was loaded. (We might assume then, that the machine’s firewire hardware is incompatible with this version of the firewire driver module due to a programmer error, and will have to wait for a new release.) In the meantime, the easiest way to get the machine running again is to prevent the module from being loaded. We can do this in one of two ways:
- If the module is being loaded during the execution of the initramfs, reboot with the kernel parameter
rd.blacklist=firewire_core
. - Otherwise reboot with the kernel parameter
module_blacklist=firewire_core
.
Reboot into root shell and fix problem
You’ll need a root shell to make changes to the system so the panic no longer occurs. If the panic occurs on boot, there are several strategies to obtain a root shell before the machine deadlocks:
- Reboot with the kernel parameter
emergency
,rd.emergency
, or-b
to receive a prompt to login just after the root filesystem is mounted andsystemd
is started.
-
Note: At this point, the root filesystem will be mounted read-only. Execute
# mount -o remount,rw /
to make changes.
- Reboot with the kernel parameter
rescue
,rd.rescue
,single
,s
,S
, or1
to receive a prompt to login just after local filesystems are mounted. - Reboot with the kernel parameter
systemd.debug-shell=1
to obtain a very early root shell on tty9. Switch to it with by pressingCtrl-Alt-F9
. - Experiment by rebooting with different sets of kernel parameters to possibly disable the kernel feature that is causing the panic. Try the «old standbys»
acpi=off
andnolapic
.
-
Tip: See
Documentation/admin-guide/kernel-parameters.txt
in the Linux kernel source tree for all options.
- As a last resort, boot with the Arch Linux Installation CD and mount the root filesystem on
/mnt
then execute# arch-chroot /mnt
.
Disable the service or program that is causing the panic, roll-back a faulty update, or fix a configuration problem.
Содержание
- Операционная система Ubuntu
- 09 января 2017
- Сбой Kernel panic в ядре Linux
- Как загрузить Ubuntu с другой версией ядра?
- Как удалить лишние ядра в Ubuntu 16.04.1?
- Как узнать, на каком ядре работает Ubuntu?
- Исправление ошибки kernel panic – not syncing: Attempted to kill inint
- Рассмотрим частный случай получения ошибки kernel panic – not syncing: Attempted to kill inint после перезагрузки Linux
- Сервер 1С в Европе за 2250 рублей в месяц*!
- Linux Kernel Panic! Что делать?
- Kdump — диагностика и анализ причин сбоев ядра
- Установка и настройка kdump
- Тестируем kdump
- Диагностика причин сбоя с помощью утилиты crash
- Заключение
Операционная система Ubuntu
Блог о современной полнофункциональной операционной системе, основанной на ядре Linux
09 января 2017
Сбой Kernel panic в ядре Linux
Многим пользователям операционных систем типа Linux, знакомо сообщение о критической ошибке ядра «Kernel panic: …», после которой такая система не может продолжать дальнейшую работу. Причиной Kernel panic может быть как критическая аппаратная ошибка и ошибка программного обеспечения, так и сбой самого ядра.
В частности, одной из самых распространённых причин Kernel panic является невозможность найти и смонтировать корневую файловую систему. Часто это ошибка конфигурации, которая может быть исправлена при перезагрузке ядра вручную или загрузкой одной из предыдущих версий ядра. Рано или поздно, многие сталкиваются с таким сбоем, вот и у меня при загрузке системы, на экране компьютера появилось сообщение:
На скриншоте экрана видим сообщение о невозможность найти и смонтировать корневую файловую систему. Вообще, многие проблемы появились после того, как я установил Ubuntu Studio 16.04.1 Xenial Xerus LTS. В версии 14.04 такого сбоя никогда не было.
Как загрузить Ubuntu с другой версией ядра?
Дополнительные параметры для Ubuntu в GRUB2.02 позволяют выбрать версию ядра системы.
Именно последнее ядро Linux 4.4.0-57 (все три варианта) и являлось причиной сбоя системы Kernel panic, так как на ядре Linux 4.4.0-53, система загрузилась без сбоев.
Как удалить лишние ядра в Ubuntu 16.04.1?
В ситуации, когда недавно обновленное ядро операционной системы дает сбой Kernel panic, чтобы избежать постоянного выбора ядра при загрузке, необходимо его удалить. Ранее, с удалением старых ядер успешно справлялась программа Ubuntu Tweak. В настоящее время, с официального сайта Ubuntu Tweak происходит автоматическое перенаправление на сайт github.com/tualatrix/ubuntu-tweak, где я так и не нашел deb-пакет для установки на Ubuntu. Похоже, что разработчик решил закрыть проект Ubuntu Tweak и это печально, так как по информации из сети, замену ему найти трудно.
Тем не менее, Ubuntu Tweak можно установить на Ubuntu 16.04.1 Xenial Xerus LTS с помощью deb-пакета версии 0.8.7-1
xenial, загруженного с диска, или с сайта ubuntuupdates.org. Двойным щелчком откройте deb-пакет прямо в Менеджере приложений Ubuntu, чтобы установить программу. В моем случае установка прошла успешно.
Хотя, и не все функции Ubuntu Tweak сохранились в рабочем состоянии, например вкладка «Приложения» на работает, удалось удалить все старые ядра и оставить одно последнее из списка, версии Linux 4.4.0-51 про запас.
Однако, как я указывал выше, задача состояла в том, чтобы удалить, наоборот, самое новое ядро, версии Linux 4.4.0-57, и работать на предыдущем, версии 4.4.0-53. Выходит, на вкладке «Очистка», Ubuntu Tweak не отображает две последних версии ядра из-за чего я не могу удалить проблемное. Думаю, такая ситуация логична, и связана с тем, чтобы помешать пользователю случайно удалить все ядра. Хотя программа Ubuntu Tweak и не помогла мне с решением вопроса, уверен, она пригодится в будущем.
В последующем выяснилось, что очистка системы, в том числе удаление ядер, каким-то образом исправило систему и при перезагрузке компьютера уже не появлялось меню загрузчика GRUB2. При этом, в списке очистки старых ядер Ubuntu Tweak, появилось ядро версии Linux 4.4.0-53, с которого я и загружал ранее систему при сбое Kernel panic. Последнее ядро 4.4.0-57 так и не появилось. Вот такой вот глюк.
Как узнать, на каком ядре работает Ubuntu?
На изображении видно, что действительно, очистка операционной системы Ubuntu программой Ubuntu Tweak, помогла ядру версии Linux 4.4.0-57 избавиться от критической ошибки Kernel panic.
Источник
Исправление ошибки kernel panic – not syncing: Attempted to kill inint
Рассмотрим частный случай получения ошибки kernel panic – not syncing: Attempted to kill inint после перезагрузки Linux
В моем случае ошибка появлялась после отключения SELINUX и последующей перезагрузки.
1. При загрузке ОС нажимаем e, чтобы перейти к редактирования загрузчика GRUB.
Далее в строке загрузки ядра по-умолчанию добавляем в конец selinux=0 пример:
kernel /boot/vmlinuz-2.6.32-504.3.3.el6.x86_64 ro root=UUID=516101c3-00dd-4db6-b1ff-7214dc0baa03 rd_MD_UUID=62292ebf:38febd4a:2514de0f:1cc21698 rd_NO_LVM LANG=en_US.UTF-8 SYSFONT=latarcyrhercyrheb-sun16 crashkernel=auto rd_NO_LUKS KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet selinux=0
Нажимаем Enter и затем b для продолжения загрузки.
После успешной загрузки Linux редактируем файл /etc/grub.conf и во все строки загрузки ядра добавляем selinux=0, если конечно вы все ядра планируете загружать. Обычно достаточно последнее ядро и предыдущее.
Windows сервера в Европе с оплатой в рублях
Облачные Windows сервера в Германии, Голландии, Эстонии.
Мощные системы защиты.
Возможность установки любого ПО на сервер.
Полная конфиденциальность.
Оплата в рублях.
Безнал для юридических лиц.
Севера 1С в Европе по низким ценам
Сервер 1С в Европе за 2250 рублей в месяц*!
Облачные Windows VPS в Латвии.
Оплата по безналичному расчету для организаций.
Настройка необходимого для работы ПО (Office, 1C, SQL) входит в стоимость.
*Конфигурация: 1 ядро CPU, 4Гб памяти, 250Гб диск или 60Гб SSD.
Источник
Linux Kernel Panic! Что делать?
Поклонники операционной системы Linux иногда сталкиваются с таким явлением, как Kernel Panic, и часто не знают что делать в таком случае. Насколько продуманной ни была бы система, всегда остается вероятность возникновения ошибок. Kernel Panic — это особое состояние ядра операционной системы, когда оно отказывается работать из-за произошедшей в системе критической ошибки.
Пользователи операционных систем семейства Windows наверняка сталкивались с ситуацией, когда на экране на синем фоне появлялась надпись о возникновении критической ошибки (знаменитый синий экран смерти, или BSoD), причем система отказывалась реагировать на команды пользователя. Это практически то же самое, что Kernel Panic в Linux.
Ошибки такого рода являются слишком серьезными, чтобы продолжать работу, и относятся к тем компонентам системы, которые выполняют основные функции по обеспечению работоспособности ОС — к ядру и драйверам. При возникновении Kernel Panic на экран выводится сообщение об ошибке и некоторая информация, полезная для программистов.
Если такая ошибка возникла сразу после установки системы, то ответить на вопрос, что послужило ее причиной — сложно. Например, Kernel Panic может возникнуть из-за сбоев во время установки либо несовместимости какого-то драйвера с аппаратным обеспечением. В таком случае попробуйте переустановить систему с другими настройками либо воспользоваться консолью восстановления.
Если же ошибка возникла в процессе работы с Linux, то здесь могут быть две причины:
Если вы действительно недавно устанавливали какой-то сервис, драйвер или меняли ядро, то попробуйте вернуть систему в прежнее состояние и посмотреть будет ли ошибка повторяться. При обновлении ядра операционной системы, часто оставляется возможность загрузиться со сторого. Выбор этот можно сделать в меню загрузчика перед стартом системы. Попробуйте загрузиться с другого ядра, возможно ваше оборудование не корректно поддерживается в новой версии. А если такие понятия, как подключение модулей драйверов устройств для вас не знакомы, тогда вам необходимо заблокировать обновление ядра.
В операционной системе Ubuntu это можно сделать следующим образом:
На этом все. Надеюсь, статья поможет вам разобраться с такой напастью, как Kernel Panic!
Источник
У Вас на последнем фото ошибка:
Скорее всего диск с МСВС повреждён.
Подключите его в другой ПК с linux и попробуйте посмотреть какие на нём разделы. Покажите сюда что увидите.
Или используйте другой диск с МСВС, если таковой имеется.
попробуй с другими параметрами init=
Спасибо! А где взять эти параметры?
Спасибо! Увы, другого компа нет. Другого диска тоже нет.
Скорее всего диск с МСВС повреждён.
Я бы ещё рассмотрел гипотезу, что в том компе, из которого диск вынули, он опознавался как другое устройство.
Нет ни картридеров, ни cd-приводов.
Эм, и даже USB нету?
Для неспециалиста в компах будет весьма сложно. Я подобные (но не совсем такие) ситуации разруливал, загружаясь с установочного диска с МСВС и делая chroot в систему на жёстком диске. Но тут надо ориентироваться в линуксе, работать в командной строке и править конфиги.
Возможно, простое решение найдётся, если уточнить задачу.
На этом жёстком диске не просто МСВС, а установлена какая-то система, которую надо реанимировать? Или данные, которые надо прочитать?
Если просто стоит задача запустить МСВС — проще её поставить заново.
Если стоит задача спасти данные — можно подключить диск к другому компу. Даже совсем необязательно, чтобы он был с линуксом, для Windows есть драйвер Ext2FSD, который читает Ext2 и Ext3.
Хуже всего, если там под МСВС установлена какая-то прикладная система со своими настройками, и которую нельзя поставить заново, но нужно, чтобы она работала…
Можно попробовать угадать. Я сейчас только догадки строю, но как мне видится в те далёкие времена, когда этот динозавр был актуален, на компьютерах обычно было по два разъёма IDE с возможностью подключить максимум два диска, а на каждом диске лишь максимум четыре первичных раздела. Так что наихудший сценарий – 16 вариантов, но на самом деле раздел точно не менялся, так что остаётся только четыре возможности.
Так что попробуй в первую очередь выяснить, какие параметры загрузчик передаёт ядру. Это можно сделать, ежели нажать на Tab как написано на первой фотографии с винчестером. Далее надо отредактировать параметр root= (я думаю там написано root=/dev/hdc1), твой диск ядро распознаёт как /dev/hda, соответственно и параметр должен быть root=/dev/hda1. Может быть с единицей я и ошибаюсь, но скорее всего нет.
Источник
Kdump — диагностика и анализ причин сбоев ядра
Хотя в современных Linux-системах ядро отличается достаточно высоким уровнем стабильности, вероятность серьезных системных ошибок, тем не менее, имеется всегда. Когда происходит неисправимая ошибка, имеет место состояние, называемое паникой ядра (kernel panic): стандартный обработчик выводит на экран информацию, которая должна помочь в устранении неисправности, и входит в бесконечный цикл.
Для диагностики и анализа причин сбоев ядра разработчиками компании RedHat был разработан специализированный инструмент — kdump. Принцип его работы можно кратко описать следующим образом. Создается два ядра: основное и аварийное (именно оно используется для сбора дампа памяти). При загрузке основного ядра под аварийное ядро выделяется определенный размер памяти. При помощи kexec во время паники основного ядра загружается аварийное и собирает дамп.
В этой статье мы подробно расскажем о том, как конфигурировать kdump и анализировать с его помощью системные ошибки. Мы рассмотрим особенности работы с kdump в OC Ubuntu; в других дистрибутивах процедуры настройки и конфигурирования kdump существенно отличаются.
Установка и настройка kdump
Установим kdump с помощью команды
Настройки kdump хранятся в конфигурационном файле /etc/default/kdump-tools
Установив все необходимые параметры, выполним команду update-grub и выберем install the package maintainer’s version.
Затем перезагрузим систему и убедимся в том, что kdump готов к работе:
Для того, чтобы мы могли анализировать дамп с помощью утилиты crash, нам понадобится также файл vmlinux, содержащий отладочную информацию:
По завершении установки еще раз проверим статус kdump:
Если kdump находится в рабочем состоянии, на консоль будет выведено следующее сообщение:
Тестируем kdump
Вызовем панику ядра при помощи следующих команд:
В результате их выполнения система «зависнет».
После этого в течение нескольких минут будет создан дамп, который будет доступен в директории /var/crash после перезагрузки.
Информацию о сбое ядра можно просмотреть с помощью утилиты crash:
На основе приведенного вывода мы можем заключить, что системному сбою предшествовало событие «Oops: 0002 [#1] SMP», произошедшее на CPU2 при выполнении команды tee.
Утилита crash обладает также широким спектром возможностей для диагностики причин краха ядра. Рассмотрим их более подробно.
Диагностика причин сбоя с помощью утилиты crash
Crash сохраняет информацию обо всех системных событиях, предшествовавших краху ядра. С ее помощью можно воссоздать состояние системы на момент сбоя: узнать, какие процессы были запущены на момент краха, какие файлы открыты и т.п. Эта информация помогает поставить точный диагноз и предупредить крахи ядра в будущем.
В утилите crash имеется свой набор команд:
Для каждой этой команды можно вызвать краткий мануал, например:
Все команды мы описывать не будем (с детальной информацией можно ознакомиться в официальном руководстве пользователя от компании RedHat), а расскажем лишь о наиболее важных из них.
В первую очередь следует обратить внимание на команду bt (аббревиатура от backtrace — обратная трассировка). С ее помощью можно посмотреть детальную информацию о содержании памяти ядра (подробности и примеры использования см. здесь). Однако во многих случаях для определения причины системного сбоя бывает вполне достаточно команды log, выводящее на экран содержимое буфера сообщений ядра в хронологическом порядке.
Приведем фрагмент ее вывода:
В одной из строк вывода будет указано событие, вызвавшее системную ошибку:
С помощью команды ps можно вывести на экран список процессов, которые были запущены на момент сбоя:
Для просмотра информации об использовании виртуальной памяти используется команда vm:
Команда swap выведет на консоль информацию об использовании области подкачки:
Информацию о прерываниях CPU можно просмотреть с помощью команды irq:
Вывести на консоль список файлов, открытых на момент сбоя, можно с помощью команды files:
Наконец, получить в сжатом виде информацию об общем состоянии системы можно с помощью команды sys:
Заключение
Анализ и диагностика причин падения ядра представляет собой очень специфическую и сложную тему, которую невозможно уместить в рамки одной статьи. Мы еще вернемся к ней в следующих публикациях.
Читателей, которые не могут оставлять комментарии здесь, приглашаем к нам в блог.
Источник
1 Question at a time per the FAQ
-
What is kernel panic?
When the kernel can’t load properly or «freaks out» and fails to boot properly or crashes(see edit credit at the bottom). -
Why it occurs?
Hosed updates, failing hardware, unsupported hardware, failed or missing drive or partition (see edit credit at the bottom) -
How can I understand kernel panic occurred?
Watch boot prompts(turn off quiet kernel parameter) OR your machine fails to boot -
What effect it has on system?
Failure to boot or system crash -
Does it only occur in Linux?
No, all unix-like operating systems can have kernel panics. It’s the equivalent of a Windows Blue Screen of Death -
How can I prevent it?
It normally doesn’t happen. Test updates and troubleshoot the problem. Use stable instead of development branches.
Additional note: Kernel panic and system failure/shutdown can be directly responsible for protecting your computer from physical damage. Examples include halting before extreme overheating or disk corruption. See edit credits at the bottom for direct quote.
edits
Per B. Roland Missing or corrupted disks or volumes can cause this as well.
(Good point and I overlooked it)
Per Kees Kernel panic can also occur while running.
note: Can happen when a function fails sort of gracefully inside the kernel, but most often happens during module or kernel loading(which is usually during boot). I thought I touched on it at «during boot or system crash», but I see how my answer to (1) stated it only occurs during boot.
Per rafalcieslak direct quote — ‘There is one very important thing that must be added: The main point in the whole kernel panic is to protect your computer. The kernel freezes not only because it failed to do something, but also in order to prevent your computer from f.e. overheating, hard drives corruption, and any other hardware problems, that may occur, if some incorrect orders are executed, of a module (for example a module responsible for controlling the fan) failed to load, etc. This is why the kernel prefers to freeze, than to overcome the problem.’
Однако, как я указывал выше, задача состояла в том, чтобы удалить, наоборот, самое новое ядро, версии Linux 4.4.0-57, и работать на предыдущем, версии 4.4.0-53. Выходит, на вкладке «Очистка», Ubuntu Tweak не отображает две последних версии ядра из-за чего я не могу удалить проблемное. Думаю, такая ситуация логична, и связана с тем, чтобы помешать пользователю случайно удалить все ядра. Хотя программа Ubuntu Tweak и не помогла мне с решением вопроса, уверен, она пригодится в будущем.
В последующем выяснилось, что очистка системы, в том числе удаление ядер, каким-то образом исправило систему и при перезагрузке компьютера уже не появлялось меню загрузчика GRUB2. При этом, в списке очистки старых ядер Ubuntu Tweak, появилось ядро версии Linux 4.4.0-53, с которого я и загружал ранее систему при сбое Kernel panic. Последнее ядро 4.4.0-57 так и не появилось. Вот такой вот глюк.
Как узнать, на каком ядре работает Ubuntu?
Предполагаю, что моя система Ubuntu загружается с последнего ядра Linux 4.4.0-57, которое чудным образом избавилось от ошибки Kernel panic. Для определения версии ядра Linux, в терминале введем команду uname -r
На изображении видно, что действительно, очистка операционной системы Ubuntu программой Ubuntu Tweak, помогла ядру версии Linux 4.4.0-57 избавиться от критической ошибки Kernel panic.