Site icon ИТ Блог. Администрирование серверов на основе Linux (Ubuntu, Debian, CentOS, openSUSE)
Воскресенье, 25 мая, 2025

Как вызвать и устранить Kernel panic в Linux

Как вызвать и устранить панику в ядре Linux

Представьте, что вы с удовольствием работаете в своей системе Linux, может быть, собираете пакет, обновляете систему или просто просматриваете что-то, и вдруг ваш экран зависает, а на нём появляется стена загадочного текста: «Kernel panic – not syncing: Attempted to kill init!»

Теперь, прежде чем вы начнёте потеть, давайте успокоимся и научимся понимать, моделировать и устранять панику ядра.

 

Что такое паника в ядре Linux?

Проще говоря, паника ядра — это мера безопасности, которую принимает ядро Linux, когда сталкивается с критической ошибкой, от которой не может безопасно восстановиться.

Ядро Linux — это основа вашей системы, которая управляет всем: от управления памятью и взаимодействия с устройствами до запуска ваших процессов. Когда в ядре что-то идёт не так — например, плохой драйвер обращается к недопустимой памяти или выходит из строя ключевой компонент, — ядро останавливается, чтобы избежать дальнейшего повреждения.

Представьте, что это аварийный тормоз в автомобиле: когда что-то идёт совсем не так, система резко жмёт на тормоз и останавливает всё.

 

Распространенные причины паники в ядре

Давайте рассмотрим типичные причины паники в ядре, которые чаще всего приводят к сбоям в работе вашей системы Linux:

 

Как имитировать панику ядра (безопасно!)

ВНИМАНИЕ: не пытайтесь сделать это в рабочей системе. Всегда тестируйте на виртуальной машине (VirtualBoxKVM или QEMU) или в контейнере.

 

Вариант 1: вызвать панику ядра с помощью /proc/sysrq-trigger

Один из самых безопасных и контролируемых способов имитации паники ядра — использование интерфейса SysRq (Системный запрос), предоставляемого ядром Linux, который часто используется разработчиками и системными администраторами для отладки сценариев сбоя или тестирования политик восстановления системы, таких как автоматическая перезагрузка.

Интерфейс SysRq управляется через /proc/sys/kernel/sysrq, и для его включения выполните:

echo 1 | sudo tee /proc/sys/kernel/sysrq

 

Теперь, чтобы имитировать панику ядра, выполните следующие действия:

echo c | sudo tee /proc/sysrq-trigger

 

Как только вы выполните эту команду, ядро остановится, выдаст сообщение о сбое и заблокирует систему.

 

Вариант 2: вызвать панику ядра с помощью отладочного интерфейса

Другой безопасный способ имитировать панику ядра — использовать встроенный в Linux интерфейс SysRq или запустить его вручную с помощью модуля аварийной паники ядра, если он доступен.

 

Способ 1: используйте SysRq для запуска режима паники

Сначала убедитесь, что функция SysRq включена:

echo 1 > /proc/sys/kernel/sysrq

 

Затем вызовите панику, которая немедленно вызовет панику в ядре и приведёт к сбою системы. Это отличный способ протестировать поведение при панике или настроить автоматическую перезагрузку.

echo c > /proc/sysrq-trigger

Способ 2: Загрузите модуль аварийного ядра (если он доступен)

Некоторые ядра включают в себя модуль, специально предназначенный для запуска сбоев. Вы можете загрузить его с помощью:

sudo modprobe crash

 

После загрузки он может предоставлять дополнительные функции отладки в зависимости от конфигурации вашего ядра. Однако этот модуль поставляется не во всех дистрибутивах, и в целях безопасности он может быть отключен в рабочих ядрах.

Если modprobe crash возвращает ошибку, возможно, модуль недоступен или не встроен в ваше ядро. Вы можете проверить с помощью:

modinfo crash

 

Как устранить панику ядра в Linux

Давайте рассмотрим пошаговый процесс диагностики и устранения паники ядра.

1. Перезагрузка и просмотр системных журналов

После сбоя ядра ваша система, скорее всего, полностью зависнет. Вам нужно будет перезагрузить компьютер вручную, нажав кнопку питания или воспользовавшись переключателем сброса.

После перезагрузки системы (или загрузки с Live-диска) в первую очередь проверьте системные журналы, чтобы определить, что вызвало сбой, с помощью следующей команды journalctl, которая покажет подробные журналы предыдущей загрузки, включая ошибки ядра и сбои в работе служб.

journalctl -xb

 

В качестве альтернативы проверьте буфер сообщений ядра и файлы журналов:

dmesg | less

или

cat /var/log/kern.log | less

 

Ищите строки с упоминанием panicsegfault, или kernel bug. Обратите внимание на названия модулей, аппаратные ошибки или пути к файлам.

 

2. Загрузка более старой версии ядра

После обновления ядра система нередко начинает работать со сбоями из-за несовместимости драйверов или ошибки в сборке ядра. К счастью, в GRUB обычно установлено несколько версий ядра, что позволяет легко вернуться к предыдущей версии.

Чтобы загрузиться в более старую версию ядра, просто перезагрузите систему, нажмите Esc в меню GRUB (если оно не появляется автоматически), выберите Дополнительные параметры для Ubuntu (или вашего дистрибутива) и выберите предыдущую версию ядра из списка — например, 5.15.0-92-generic если более новая версия ядра 6.x вызывает проблемы.

Определив стабильную версию ядра, вы можете установить ее по умолчанию, чтобы GRUB всегда автоматически загружал ее.

sudo apt install linux-image-<old-version>
sudo grub-set-default 1 # установить старое ядро по умолчанию

 

Используйте grep menuentry /boot/grub/grub.cfg для поиска точного названия нужной вам записи в ядре.

 

3. Перестройте Initramfs (начальную оперативную файловую систему)

initramfs (или initrd) — это небольшая временная корневая файловая система, загружаемая в память во время процесса загрузки, до монтирования реальной корневой файловой системы. Она содержит необходимые драйверы и инструменты для загрузки системы.

Если этот образ будет повреждён, несовместим с ядром или полностью отсутствует, ваша система может выйти из строя сразу после того, как GRUB передаст управление ядру.

Чтобы перестроить initramfs, загрузитесь с живого CD/USB-накопителя, если ваша система не запускается, и смонтируйте корневой раздел.

sudo update-initramfs -u -k all

 

Если вы хотите выполнить регенерацию только для текущего ядра:

sudo update-initramfs -c -k $(uname -r)

 

После восстановления перезагрузите свою систему.

sudo reboot

 

4. Восстановите файловую систему

Если в сообщениях о сбое ядра есть такие фразы, как «невозможно смонтировать корневую файловую систему» или «VFS: невозможно смонтировать корневую файловую систему», высока вероятность того, что ваша корневая или загрузочная файловая система повреждена, что может произойти из-за неправильного завершения работы, сбоев питания или ошибок на диске.

Чтобы восстановить файловую систему, используйте lsblk или fdisk для поиска корневого или загрузочного раздела Linux.

lsblk

Затем запустите fsck, чтобы восстановить файловую систему.

sudo fsck /dev/sda1

 

Замените /dev/sda1 на фактический корневой или загрузочный раздел.

 

5. Диагностика проблем с оборудованием

Иногда паника в ядре вовсе не связана с вашим программным обеспечением — это аппаратный сбой, который происходит незаметно. Ошибки в памяти и на диске, как известно, трудно обнаружить, пока они не нанесут реальный ущерб.

Используйте smartctl из пакета smartmontools, чтобы проверить состояние диска и статистику ошибок:

sudo smartctl -a /dev/sda

 

Ищите предупреждающие знаки, такие как Reallocated_Sector_Ct (плохие сектора уже перемещены), Pending_Sector_Ct (сектора, ожидающие перераспределения) или Current_Pending_Sector (явный признак нестабильности).

Если какое-либо из этих значений увеличивается, это явный признак того, что ваш диск выходит из строя. Немедленно сделайте резервную копию данных и замените диск.

 

6. Исправьте загрузчик GRUB

Неправильно настроенный или повреждённый загрузчик GRUB часто является причиной сбоев ядра, особенно после обновления ядра, настройки двойной загрузки или изменения диска. Если GRUB не может правильно определить корневой раздел или образ initrd, система может не загрузиться и выдать ошибку.

Исправление GRUB с помощью Live CD или загрузочного USB-накопителя.

sudo mount /dev/sda1 /mnt
sudo grub-install --root-directory=/mnt /dev/sda
sudo update-grub

 

Убедитесь, что /etc/fstab содержит правильные UUID, и вы можете проверить их с помощью:

blkid

Как предотвратить панику ядра (как профессионал)

Хотя паники в ядре не всегда можно избежать, особенно при выходе из строя оборудования, соблюдение нескольких разумных правил может значительно снизить вероятность возникновения таких ситуаций.

Вот как можно заранее защитить свою систему Linux от сбоев ядра:

 

Бонус: автоматическая перезагрузка после сбоя

Чтобы избежать простоя зависшего компьютера в серверной, вы можете настроить ядро на автоматическую перезагрузку после сбоя.

Добавьте это в файл /etc/sysctl.conf, чтобы система перезагружалась через 10 секунд после сбоя.

kernel.panic = 10

 

Примените это.

sudo sysctl -p

Заключение

Паника в ядре может показаться пугающей, особенно новичкам, но как только вы поймёте, что это такое и как к этому подступиться, это станет просто ещё одной головоломкой для Linux.

Главное — сохранять спокойствие, загрузиться в режиме восстановления или в режиме живой системы, собрать логи, определить, что изменилось (обновление ядра, аппаратный сбой, ошибка в конфигурации), и методично устранять неполадки.

А если вы действительно хотите стать Linux-ниндзя, попробуйте смоделировать панику в виртуальной лаборатории и попрактикуйтесь в восстановлении. Так становятся профессионалами.

 

Есть паническая история?

Вы когда-нибудь ломали свою систему Linux и восстанавливали ее из мертвых? Или, может быть, по ошибке вызывали панику? Поделитесь своей историей в комментариях — нам нравится слушать других исследователей Linux.

Exit mobile version