Как стать автором
Обновить

Быстрая перезагрузка Linux на примере CentOS

Предисловие

Бывает так, что останавливать работу сервера даже на несколько минут критично. Раньше на помощь приходил сервис Ksplice, позволяющий без перезагрузки обновлять ядро. В июле этого года компания Oracle купила Ksplice и лишила поддержки часть дистрибутивов, в числе прочих оказался CentOS. Теперь обновить ядро без перезагрузки нельзя, но сократить время простоя можно, и в этом нам поможет kexec.


Описание

Kexec — механизм ядра, позволяющий загрузить новое ядро «поверх» уже запущенного. Kexec пропускает выполнение аппаратной инициализации (BIOS) и передаёт управление новому ядру.

Kexec состоит из двух частей: пользовательская часть и часть, описанная в ядре. В стоковом ядре CentOS уже имеется поддержка kexec, для других ядер нужно активировать CONFIG_KEXEC=y.

Действие

Итак, первым делом устанавливаем kexec-tools.
#yum install kexec-tools

Загружаем новое ядро.
#yum update kernel

Для загрузки нового ядра в ручном режиме нужно:
Загрузить новое ядро в память
#kexec -l kernel.img --initrd=initrd
Например
#kexec -l /boot/vmlinuz-2.6.18-274.3.1.el5 --initrd=/boot/initrd-2.6.18-274.3.1.el5.img
Так же можно указать дополнительные опции ядра через опцию --append.

Выполнить загрузку нового ядра
#kexec -e

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

Спустя некоторое время получаем рабочую систему с новым ядром и обнулённым аптаймом.У меня время такой перезагрузки заняло примерно 15 секунд. Все сервисы поднялись и успешно выполняли свои задачи.

Заключение

Таким образом, kexec остается единственным механизмом, позволяющим свести к минимуму время простоя сервера. Однако, это не единственная его возможность.

Подробнее о механизме можно почитать здесь.
Теги:
Хабы:
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.