Быстрая перезагрузка 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 остается единственным механизмом, позволяющим свести к минимуму время простоя сервера. Однако, это не единственная его возможность.
Подробнее о механизме можно почитать здесь.