Безопасно обновить ядро Debian можно без героизма: не смешивать stable с unstable без нужды, заранее оставить старое ядро в GRUB, проверить место в /boot и понимать, как откатиться, если сервер после перезагрузки ведет себя странно. Само обновление kernel обычно занимает несколько команд, но риск появляется не в командах, а в отсутствии плана возврата.
Эта статья написана по мотивам практической заметки про обновление ядра Debian, но с другим углом: не просто «как поставить ядро поновее», а как сделать это спокойно на рабочей машине или сервере. Разберем backports, firmware-предупреждения, проверку после ребута, rollback через старое ядро и rescue-сценарий через Live ISO.

Когда вообще стоит обновлять ядро Debian
Debian ценят за предсказуемость. Если система работает, железо определяется, сеть стабильна, а нужных исправлений безопасности уже хватает из обычных репозиториев, гонка за свежим kernel чаще не нужна. Обновлять ядро разумно, когда есть конкретная причина.
- новое железо плохо поддерживается текущим ядром: сетевой адаптер, Wi-Fi, NVMe, контроллер, видеокарта;
- нужен драйвер или исправление, появившееся в более свежем kernel;
- есть проблема со стабильностью, которая уже исправлена в новой ветке;
- требуется функция ядра для виртуализации, контейнеров, файловой системы или безопасности;
- вы осознанно тестируете новое ядро на стенде перед переносом на production.
Для обычного сервера лучший путь обычно такой: сначала обновить систему в рамках stable, затем смотреть backports. Репозитории testing, unstable и experimental лучше оставить для тестовой машины. Они рабочие, но это уже не «безопасное обновление», а контролируемый риск.
Перед началом: короткий план безопасности
Перед установкой нового ядра нужно зафиксировать текущее состояние. Это скучная часть, зато именно она экономит час ночной паники, когда после ребута машина не поднимает сеть.
uname -r
cat /etc/debian_version
dpkg --print-architecture
df -h /boot /
dpkg -l "linux-image*" "linux-headers*" | awk '/^ii/ {print $2, $3}'
ip -br addr
ip routeЕсли это удаленный сервер, отдельно проверьте доступ к консоли провайдера: VNC, KVM, rescue mode или serial console. SSH сам по себе не считается планом восстановления. Если новое ядро не поднимет сеть, SSH как раз и пропадет.
- Сделайте бэкап важных данных или снимок виртуальной машины.
- Убедитесь, что в
/bootесть свободное место хотя бы под несколько initramfs и образов ядра. - Не удаляйте старое рабочее ядро перед первой успешной загрузкой нового.
- Проверьте, что GRUB видит несколько ядер и показывает меню при необходимости.
- Для серверов запланируйте окно обслуживания, даже если команда выглядит безобидно.
Шаг 1. Обновите систему в пределах текущего Debian
Начните с обычных обновлений stable. Иногда нужное исправление уже приехало в текущую ветку, и более свежий kernel из backports не нужен.
sudo apt update sudo apt full-upgrade sudo reboot
После перезагрузки проверьте, какое ядро загружено. Если проблема решилась обычным обновлением, дальше можно не идти.
uname -r systemctl --failed journalctl -p err -b --no-pager
Шаг 2. Подключите backports, а не unstable
Для безопасного сценария используйте backports под свою версию Debian. Backports собирают новые версии пакетов под stable, поэтому этот путь заметно аккуратнее, чем подмешивать testing или unstable. Официальное описание есть в Debian Wiki: Backports.
Ниже пример для Debian 12 Bookworm. Для Debian 11 используйте bullseye-backports, для Debian 13 — свою актуальную кодовую ветку. Кодовое имя можно посмотреть командой VERSION_CODENAME.
. /etc/os-release echo "$VERSION_CODENAME"
echo "deb http://deb.debian.org/debian bookworm-backports main contrib non-free non-free-firmware" | sudo tee /etc/apt/sources.list.d/bookworm-backports.list sudo apt update
На Debian 12 компонент non-free-firmware важен для firmware-пакетов. На Debian 11 структура репозитория другая, там чаще встречается main contrib non-free. Не копируйте строку вслепую между разными релизами.
Шаг 3. Посмотрите доступные версии ядра
Не ставьте случайный пакет вида linux-image-6.x.y-..., если не понимаете, откуда он приехал. Удобнее ставить метапакеты: они подтянут актуальный образ и headers из выбранной ветки.
apt-cache policy linux-image-amd64 linux-headers-amd64 apt list -a linux-image-amd64 linux-headers-amd64
Если в выводе видна версия из bookworm-backports, можно ставить ее точечно через -t. Это не переключает всю систему на backports, а просит apt взять именно эти пакеты из указанной ветки.
sudo apt install -t bookworm-backports linux-image-amd64 linux-headers-amd64
Headers нужны не всегда, но на серверах с DKMS-модулями они часто обязательны: VirtualBox, ZFS, сторонние сетевые или storage-драйверы, некоторые агенты виртуализации. Без headers модуль может не собраться под новое ядро.
Что делать с Possible missing firmware
Во время сборки initramfs можно увидеть предупреждения вроде Possible missing firmware. Это не всегда фатальная ошибка. Смысл простой: модуль ядра знает о firmware-файле, но не нашел его в /lib/firmware.
W: Possible missing firmware /lib/firmware/i915/tgl_guc_70.bin for module i915 W: Possible missing firmware /lib/firmware/i915/adlp_dmc.bin for module i915
Если это firmware для устройства, которого у вас нет, система может нормально загрузиться. Если предупреждение касается сетевой карты, storage-контроллера, GPU на рабочей станции или другого реального устройства, лучше поставить firmware-пакеты до перезагрузки.
sudo apt install firmware-linux firmware-misc-nonfree firmware-linux-free sudo update-initramfs -u -k all
На Debian 12 часть firmware лежит в компоненте non-free-firmware, поэтому при странных предупреждениях сначала проверьте репозиторий, а уже потом скачивайте отдельные .bin вручную. Ручное копирование в /lib/firmware оставьте как запасной вариант для редкого железа.
Шаг 4. Проверьте GRUB до перезагрузки
Новое ядро должно появиться в меню GRUB, а старое должно остаться в Advanced options. Если старое ядро удалено, откат усложняется.
grep -E "menuentry |submenu " /boot/grub/grub.cfg | sed -n "1,40p" sudo update-grub
На удаленном сервере с быстрым автозапуском полезно увеличить таймаут GRUB хотя бы на время работ. Это даст шанс выбрать старое ядро через консоль провайдера.
sudo cp /etc/default/grub /etc/default/grub.bak.$(date +%F) sudo nano /etc/default/grub
GRUB_TIMEOUT_STYLE=menu GRUB_TIMEOUT=5
sudo update-grub
Шаг 5. Перезагрузитесь и проверьте новое ядро
Теперь можно перезагружаться. После входа не ограничивайтесь uname -r. Нужно проверить, что загрузились службы, поднялась сеть, нет грубых ошибок в журналах и DKMS-модули собраны.
sudo reboot
uname -r systemctl --failed journalctl -p err -b --no-pager ip -br addr lsmod | head dkms status 2>/dev/null || true
Если это сервер, проверьте именно прикладной сервис: nginx, база данных, контейнеры, VPN, мониторинг. Успешная загрузка ядра еще не означает, что весь стек жив.
systemctl status nginx --no-pager ss -tulpn docker ps 2>/dev/null || true
Rollback: как вернуться на старое ядро
Главное правило отката: сначала загрузитесь на старом рабочем ядре, и только потом удаляйте новое. Старое ядро выбирается в GRUB: Advanced options for Debian → нужная версия kernel.
Когда система загрузилась на старой версии, убедитесь в этом командой:
uname -r
Дальше посмотрите установленные пакеты и удалите проблемный образ. Не удаляйте текущее загруженное ядро.
dpkg -l "linux-image*" "linux-headers*" | awk '/^ii/ {print $2, $3}'
# пример: замените версию на проблемную в вашей системе
sudo apt remove linux-image-6.1.0-0.deb12.1-amd64 linux-headers-6.1.0-0.deb12.1-amd64
sudo update-grubЕсли ставили backports только ради ядра и больше он не нужен, можно отключить файл репозитория. Это не удалит уже установленные пакеты, но защитит от случайных установок из backports в будущем.
sudo mv /etc/apt/sources.list.d/bookworm-backports.list /etc/apt/sources.list.d/bookworm-backports.list.disabled sudo apt update
Rescue-сценарий: система не загрузилась вообще
Если сервер не загружается или уходит в kernel panic, действуйте от простого к сложному. Сначала попробуйте выбрать старое ядро в GRUB. Если меню скрыто, откройте VNC/KVM/serial console у провайдера и перезагрузите машину еще раз.
- Откройте консоль провайдера или локальный экран.
- В меню GRUB зайдите в Advanced options for Debian.
- Выберите предыдущую версию ядра, которая точно работала.
- После загрузки удалите проблемное ядро и обновите GRUB.
Если старое ядро тоже не грузится или GRUB поврежден, используйте Live ISO или rescue mode. Общая схема такая: найти корневой раздел, смонтировать систему, зайти в chroot и переустановить ядро или GRUB. Команды ниже примерные: имена дисков у вас могут отличаться.
lsblk -f sudo mount /dev/sda2 /mnt sudo mount /dev/sda1 /mnt/boot/efi # только если EFI-раздел отдельный sudo mount --bind /dev /mnt/dev sudo mount --bind /proc /mnt/proc sudo mount --bind /sys /mnt/sys sudo chroot /mnt
Внутри chroot можно переустановить стабильное ядро, пересобрать initramfs и обновить GRUB.
apt update apt install --reinstall linux-image-amd64 grub-efi-amd64 update-initramfs -u -k all update-grub exit sudo reboot
Для BIOS-систем вместо grub-efi-amd64 обычно используется grub-pc, а установка GRUB выполняется на диск, например grub-install /dev/sda. Не ставьте GRUB на раздел вроде /dev/sda1, если не уверены, что делаете.
Почему testing, unstable и experimental лучше не смешивать с production
В исходной заметке показаны варианты через experimental и testing/unstable. Они действительно могут дать более свежее ядро, но для рабочего сервера это плохая привычка. Одной строкой репозитория можно нечаянно подтянуть не только kernel, но и libc, systemd, драйверы, утилиты и половину пользовательского пространства.
Если без testing или unstable никак, делайте это на стенде и используйте pinning. На production безопаснее держаться stable + security + backports.
apt-cache policy cat /etc/apt/preferences /etc/apt/preferences.d/* 2>/dev/null
Очистка старых ядер после успешной проверки
Удалять старые ядра можно только после нескольких успешных перезагрузок и проверки сервисов. Оставьте минимум одно предыдущее рабочее ядро. Это ваш быстрый откат без Live ISO.
uname -r
dpkg -l "linux-image*" | awk '/^ii/ {print $2, $3}'
sudo apt autoremove --purge
sudo update-grubЕсли apt autoremove предлагает удалить слишком много, не соглашайтесь автоматически. Сначала прочитайте список. На серверах лучше лишний раз оставить старый пакет, чем потерять простой rollback.
Короткий чек-лист
- Проверили текущую версию ядра, Debian и свободное место в
/boot. - Сделали бэкап или snapshot.
- Проверили доступ к rescue/KVM/консоли провайдера.
- Подключили backports под свою версию Debian, а не testing/unstable.
- Поставили
linux-image-amd64и при необходимостиlinux-headers-amd64. - Разобрались с firmware-предупреждениями до перезагрузки.
- Убедились, что старое ядро осталось в GRUB.
- После ребута проверили
uname -r, службы, сеть и журналы. - Старое ядро удалили только после успешной проверки нового.
Если нужен максимально безопасный подход, сначала повторите процедуру на тестовой ВМ с тем же релизом Debian. Ядро — не тот пакет, где приятно узнавать про несовместимость уже после перезагрузки production-сервера.
Дополнительно можно свериться с официальной документацией Debian: разделом Installing a kernel в Debian Handbook и заметкой Compiling a New Kernel в руководстве Debian.



