User Tools

Site Tools


Sidebar


Tags Cloud
kernel_upgrade

Безопасное обновление ядра через ssh в Debian

Во избежание потенциальных проблем с удаленным обновлением ядра, я пользуюсь механизмом 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'
kernel_upgrade.txt · Last modified: 2013/12/20 23:34 by kyxap