воскресенье, 15 ноября 2015 г.

Перезагрузка сервера без нервов

Последнее поколение серверов с большим количеством аппаратных ресурсов, тратят много времени на проверку оборудования при старте системы. Порой это может занять 20 минут и более. Для систем, где окно техобслуживания составляет не больше часа, обновление ОС может быть очень затруднено. Выйти из положения позволяет kexec. Kexec - это системный вызов, который загружает в память новое ядро и производит загрузку ОС с этим ядром. Фактически, kexec выполняет функцию загрузчика ОС. Естественно данный процесс загрузки отличается от нормального тем, что не производится инициализация оборудования на аппаратном уровне (UEFI), за счет этого и достигается выигрыш времени.
Синтаксис команды для загрузки нового ядра:

kexec -l kernel-image --append=command-line-options --initrd=initrd-image

где:

  • -l - путь к новому ядру
  • --append - параметры, используемые при загрузке, можно использовать текущие параметры, содержащиеся в /proc/cmdline, для этого вместо этого параметра укажите --reuse-cmdline
  • --initrd - путь к initrd/initramfs образу.

После чего необходимо дать команду на запуск нового ядра:

kexec -e

Пример:

# kexec -l /boot/vmlinuz-3.10.0-229.20.1.el7.x86_64 --reuse-cmdline --initrd=/boot/initramfs-3.10.0-229.20.1.el7.x86_64.img
# kexec -e