Во избежание потенциальных проблем с удаленным обновлением ядра, я пользуюсь механизмом fallback, реализованном в grub уже довольно давно.
В данном случае используется grub2, принятый по умолчанию в Debian Wheezy.
Обязательные элементы конфига загрузчика:
GRUB_DEFAULT=saved GRUB_CMDLINE_LINUX_DEFAULT="panic=30"
В случае kernel panic сервер будет автоматически возвращен в последнее стабильное ядро. Мой конфиг загрузчика:
# grep ^[^#] /etc/default/grub GRUB_DEFAULT=saved GRUB_TIMEOUT=15 GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian` GRUB_CMDLINE_LINUX_DEFAULT="intel_iommu=on panic=30" GRUB_CMDLINE_LINUX="" GRUB_DISABLE_OS_PROBER=true
Просматриваем доступные загрузчику ядра:
# grub-mkconfig 2>/dev/null | perl -ne 'print "$1\n" if m/^menuentry.+?'\''(.+?)'\''/' Debian GNU/Linux, with Linux 3.11.0-031100rc5-generic Debian GNU/Linux, with Linux 2.6.32-23-pve
Текущее ядро - стабильное, при проблемах мы вернемся именно в него:
# uname -rs Linux 2.6.32-23-pve
Выставляем его в fallback:
# grub-set-default 'Debian GNU/Linux, with Linux 2.6.32-23-pve'
Ядро 3.11-rc5 является релиз-кандидатом, но в нем на данный момент наиболее полно реализована поддержка новых чипсетов под процессоры Haswell.
Команда grub-reboot разрешит загрузиться этому ядру только один раз. Реальной перезагрузки не произойдет.
# grub-reboot 'Debian GNU/Linux, with Linux 3.11.0-031100rc5-generic'
Инсталляции Debian, произведенные не через debian-installer, зачастую не содержат в себе post-hook на перегенерацию initrd.
Поэтому выполняем его вручную:
# update-initramfs -k all -u
Обновляем конфиг загрузчика:
# update-grub2
Перезагружаем сервер в новое ядро:
# reboot
В случае успешной загрузки нового ядра сообщаем grub'у что теперь будем использовать обновленную версию:
# grub-set-default 'Debian GNU/Linux, with Linux 3.11.0-031100rc5-generic'