Сообщение Kernel panic - not syncing: Attempted to kill init! означает, что первый процесс системы (PID 1, сегодня это systemd) завершился или упал. Без PID 1 работать дальше нельзя, и ядро останавливается. Сам по себе этот текст не называет причину: он говорит только, что init погиб. Причину ищут в строках выше на экране и в коде exitcode.
Чаще всего к панике приводят битый или отсутствующий initramfs после обновления ядра, неверный параметр root=, повреждённая корневая файловая система, сломанные системные библиотеки и ошибки в настройке SELinux.
Самый быстрый путь восстановления: загрузить предыдущее ядро из меню GRUB, а затем пересобрать initramfs и проверить параметры загрузки. Если старое ядро тоже не грузится, загружаемся с live- или rescue-образа, делаем chroot в систему и чиним оттуда. Ниже по шагам для Debian 12/13, Ubuntu 24.04 и AlmaLinux / Rocky Linux 9 и 10.
Как читать сообщение
Полная строка обычно выглядит так (примерно):
Kernel panic - not syncing: Attempted to kill init! exitcode=0x00000100
Код — это статус завершения процесса в формате wait():
0x00000100— init завершился с кодом 1: ошибка при старте, часто из-за SELinux или невозможности смонтировать корень.0x00007f00— код 127: не найден исполняемый файл init или нужная ему библиотека.0x0000000b— init убит сигналом 11 (SIGSEGV): битые библиотеки, glibc, несовместимые бинарники.0x00000009— сигнал 9 (SIGKILL), иногда из-за нехватки памяти при загрузке.
Обязательно прокрутите вывод выше паники (Shift+PgUp работает не везде; на сервере удобнее смотреть через IPMI или serial console). Строки вроде Failed to load SELinux policy, Cannot open root device, error while loading shared libraries сразу указывают на причину.
Причины и решения: таблица
| Симптом перед паникой | Причина | Решение |
|---|---|---|
| Паника сразу после обновления ядра, старое ядро грузится | Битый или недособранный initramfs, нехватка места в /boot | Освободить /boot, пересобрать initramfs (update-initramfs / dracut) |
VFS: Unable to mount root fs, Cannot open root device | Неверный root= или UUID после замены диска, клонирования, переноса | Сверить blkid с параметрами ядра и /etc/fstab |
| Ошибки ext4 или XFS, корень смонтирован только для чтения | Повреждённая файловая система | fsck / xfs_repair из rescue-режима |
Failed to load SELinux policy, exitcode=0x00000100 | Ошибка в /etc/selinux/config или удалённая политика | Загрузка с enforcing=0, исправить конфиг, перемаркировка |
error while loading shared libraries, exitcode=0x0000000b | Прерванное обновление, удалённые файлы в /usr/lib, подмена glibc | chroot, переустановка пакетов libc6 / glibc, systemd |
exitcode=0x00007f00 | Нет /sbin/init или неверный init= | Проверить параметры ядра, переустановить systemd-sysv (Debian) или systemd (RHEL) |
Шаг 1. Загрузить предыдущее ядро в GRUB2
Если меню GRUB не показывается, удерживайте Shift (BIOS) или нажимайте Esc (UEFI) сразу после POST.
- Debian и Ubuntu: пункт «Advanced options for Debian/Ubuntu», в нём список ядер. Выберите предыдущую версию.
- AlmaLinux / Rocky: ядра перечислены прямо в главном меню, сверху самое новое. Выберите строку ниже.
Если старое ядро загрузилось, проблема почти наверняка в новом ядре или его initramfs — переходите к шагу 4 без rescue-образа.
Шаг 2. Временно изменить параметры загрузки
В меню GRUB выберите пункт и нажмите e. Найдите строку, которая начинается с linux (в RHEL-системах linux или linuxefi), и допишите в конец нужный параметр. Загрузка — Ctrl+X или F10. Изменения действуют один раз.
| Параметр | Что делает | Где работает |
|---|---|---|
systemd.unit=rescue.target | Однопользовательский режим, корень смонтирован | Все с systemd |
systemd.unit=emergency.target | Минимальная оболочка, корень только для чтения | Все с systemd |
enforcing=0 | SELinux в режиме permissive на эту загрузку | AlmaLinux / Rocky |
rd.break | Остановка в initramfs до переключения на корень (/sysroot) | dracut: AlmaLinux / Rocky |
break=premount | Оболочка в initramfs перед монтированием корня | initramfs-tools: Debian / Ubuntu |
init=/bin/bash | Оболочка вместо systemd, корень только для чтения | Все; последнее средство |
Если систему удаётся поднять в rescue.target, все исправления ниже выполняются прямо в ней, без chroot.
Шаг 3. Rescue- или live-образ и chroot
Когда не грузится ни одно ядро, нужна внешняя система той же архитектуры: Debian Live, Ubuntu Desktop или установочный ISO AlmaLinux / Rocky.
AlmaLinux / Rocky Linux
Загрузитесь с ISO, выберите Troubleshooting → Rescue a AlmaLinux system (у Rocky аналогично), затем вариант 1) Continue. Rescue-режим найдёт систему и смонтирует её в /mnt/sysroot. Дальше:
chroot /mnt/sysroot
Debian и Ubuntu с live-образа
lsblk -f
# если корень на LVM или RAID:
vgchange -ay
mdadm --assemble --scan
mount /dev/sda2 /mnt # корень
mount /dev/sda1 /mnt/boot/efi # ESP при UEFI
# отдельный /boot, если есть: mount /dev/... /mnt/boot
for d in dev proc sys run; do mount --rbind /$d /mnt/$d; done
chroot /mnt /bin/bash
Имена разделов подставьте свои: смотрите вывод lsblk -f. Если корень на программном RAID, подробности сборки массивов есть в статье Диски после RAID.
Шаг 4. Пересобрать initramfs
Сначала проверьте место в /boot. Переполненный /boot — частая причина недособранного initramfs:
df -h /boot
ls -lh /boot
Debian и Ubuntu
dpkg --configure -a
update-initramfs -u -k all
update-grub
Файлы: /boot/vmlinuz-ВЕРСИЯ и /boot/initrd.img-ВЕРСИЯ. Лишние старые ядра удаляются через apt autoremove --purge.
AlmaLinux / Rocky Linux
dracut -f --regenerate-all
grubby --info=ALL
Файлы: /boot/vmlinuz-ВЕРСИЯ и /boot/initramfs-ВЕРСИЯ.img, записи меню — в /boot/loader/entries/ (формат BLS). Пересобрать только одно ядро: dracut -f /boot/initramfs-ВЕРСИЯ.img ВЕРСИЯ. В chroot команда uname -r покажет ядро live-системы, поэтому версию берите из имени файла в /boot.
Если в initramfs не попал драйвер контроллера (типично после переноса ВМ или смены RAID-контроллера), в RHEL-ветке пересоберите с --no-hostonly, чтобы включить все драйверы.
Шаг 5. Проверить root= и fstab
blkid
cat /proc/cmdline # в загруженной системе
cat /etc/fstab
UUID корня в параметрах ядра и в /etc/fstab должен совпадать с выводом blkid. Где править:
- Debian / Ubuntu:
root=генерируетupdate-grubпо смонтированному корню. Дополнительные параметры — вGRUB_CMDLINE_LINUXфайла/etc/default/grub, затемupdate-grub. - AlmaLinux / Rocky:
grubby --update-kernel=ALL --args="root=UUID=...". Проверка:grubby --info=DEFAULT.
Шаг 6. Проверить файловую систему
Проверку делают на отмонтированном разделе, то есть из rescue- или live-системы до chroot.
# ext4 (по умолчанию в Debian и Ubuntu)
fsck -f /dev/sda2
# XFS (по умолчанию в AlmaLinux / Rocky)
xfs_repair /dev/mapper/almalinux-root
Если xfs_repair просит сначала смонтировать раздел, чтобы проиграть журнал, — сделайте это и отмонтируйте. Ключ -L (обнуление журнала) используйте только когда монтирование невозможно: он может потерять последние изменения. Сразу после проверки посмотрите на здоровье диска — см. Проверка и восстановление дисков в Linux.
Шаг 7. Переустановить ядро и системные пакеты
Debian и Ubuntu
apt install --reinstall linux-image-amd64 # Debian
apt install --reinstall linux-image-generic # Ubuntu
apt install --reinstall libc6 systemd systemd-sysv
AlmaLinux / Rocky Linux
dnf reinstall kernel-core
dnf reinstall glibc systemd
rpm -Va --nofiles --nodigest # проверка зависимостей
rpm -V glibc systemd # проверка файлов пакетов
Для сети в chroot скопируйте DNS: cp /etc/resolv.conf /mnt/etc/resolv.conf до входа в chroot (на Ubuntu это может быть ссылка — тогда замените её временно).
SELinux: случай автора и как правильно сегодня
Исходная заметка описывала конкретный случай на CentOS 6 (ядро 2.6.32-504). Паника Attempted to kill init появилась после того, как на сервере отключили SELinux и перезагрузили его. Автор лечил так: в GRUB нажимал e, в конец строки kernel дописывал selinux=0, загружался клавишей b. После загрузки добавлял selinux=0 в строки ядер в /etc/grub.conf — обычно для последнего и предыдущего ядра. Тогда это рабочий приём: CentOS 6 давно не поддерживается, но причина та же — init не смог корректно разобраться с конфигурацией SELinux.
Типичные ошибки, которые и сегодня приводят к панике или зависанию на старте:
- опечатка в
/etc/selinux/config, напримерSELINUX=disableвместоdisabled; - правка не той строки: изменён
SELINUXTYPE=вместоSELINUX=, и systemd не находит политику; - удалён пакет политики
selinux-policy-targeted.
Как восстановиться на AlmaLinux / Rocky 9 и 10:
- В GRUB добавьте к строке
linuxпараметрenforcing=0и загрузитесь. - Исправьте
/etc/selinux/config:SELINUX=enforcing(или временноpermissive) иSELINUXTYPE=targeted. - Если SELinux долго был выключен, файлы созданы без меток. Запланируйте перемаркировку:
fixfiles -F onboot(илиtouch /.autorelabel) и перезагрузитесь. Перемаркировка большого диска идёт долго — это нормально.
Почему не отключать SELinux целиком. Это частый совет из интернета, но он убирает важный слой защиты: при взломе сайта или сервиса процесс получает доступ ко всему, что разрешено его пользователю. В RHEL 9 и производных отключение через SELINUX=disabled в конфиге уже не выключает SELinux полностью, а отключить его можно только параметром ядра selinux=0. Если сервис не работает из-за SELinux, переведите систему в permissive, посмотрите отказы в /var/log/audit/audit.log (ausearch -m AVC -ts recent) и поправьте метки или булевы переключатели.
В Debian и Ubuntu SELinux по умолчанию не используется (в Ubuntu работает AppArmor), поэтому эта причина там почти не встречается.
Проверка результата
uname -r # загружено нужное ядро
systemctl --failed # нет упавших юнитов
journalctl -b -p err # ошибки текущей загрузки
journalctl -b -1 -p err # ошибки прошлой загрузки (если журнал постоянный)
getenforce # на AlmaLinux: Enforcing
Перезагрузитесь ещё раз в ядро по умолчанию, не выбирая его вручную. Если всё работает, восстановление закончено. Чтобы подобное не повторялось, держите в /boot место минимум под два-три ядра, не прерывайте обновление ядра и имейте на сервере консоль через IPMI или KVM провайдера.
Документация: Using SELinux (RHEL 9), параметры ядра (kernel.org).
Частые вопросы
Чем «Attempted to kill init» отличается от «VFS: Unable to mount root fs»?
Вторая паника случается раньше: ядро вообще не может смонтировать корень, обычно из-за отсутствия initramfs или драйвера диска. «Attempted to kill init» означает, что init уже запустился, но завершился. На практике причины пересекаются, и порядок проверки один: initramfs, root=, файловая система.
Старое ядро грузится, новое — нет. Можно так и оставить?
Временно — да, но лучше разобраться. Обычно достаточно пересобрать initramfs для нового ядра или переустановить пакет ядра. Если новое ядро не работает с вашим оборудованием, закрепите старое по умолчанию: в RHEL-ветке grubby --set-default, в Debian и Ubuntu — GRUB_DEFAULT в /etc/default/grub и update-grub.
Что делать, если меню GRUB не появляется?
Удерживайте Shift при загрузке в режиме BIOS или нажимайте Esc в режиме UEFI. Чтобы меню показывалось всегда, задайте GRUB_TIMEOUT_STYLE=menu и GRUB_TIMEOUT=5 в /etc/default/grub. В RHEL-ветке меню скрывается после успешной загрузки; вернуть его можно командой grub2-editenv - unset menu_auto_hide.
Паника случилась на виртуальной машине после переноса. Почему?
Чаще всего в initramfs нет драйвера нового дискового контроллера: была VirtIO, стала SATA или наоборот. Временно переключите тип диска ВМ на прежний, загрузитесь и пересоберите initramfs с нужными модулями (в AlmaLinux помогает dracut -f --no-hostonly). Второй вариант — изменились UUID дисков при конвертации образа.
Как получить текст паники, если он не помещается на экран?
Уберите из параметров ядра quiet и rhgb (или splash), чтобы видеть весь вывод. Для серверов настройте последовательную консоль (console=ttyS0,115200) и смотрите её через IPMI Serial-over-LAN. Для постоянного сбора дампов используйте kdump.