Kexec : optimisez vos temps de boot

From Deimos.fr / Bloc Notes Informatique
Jump to: navigation, search

1 Introduction

kexec es un outil permettant de rebooter une machine sans passer par toute la couche hardware. C'est à dire qu'il va couper tous les services, descendre les init (sysV) pour arriver au bootloader. Ensuite il démarrera normalement et nous nous serons alors affranchit de la partie reboot hardware.

Cette technique peut s'avérer très pratique sur des systèmes de Haute Disponibilité ou le temps de downtime est très précieux.

2 Installation

2.1 Debian

Sur Debian, vous devez disposer de ce package :

Command
aptitude install kexec-tools

2.2 Red Hat

Sur Red Hat, vous devez avoir ce package installé :

Command
yum install kexec-tools

3 Configuration

3.1 Debian

Il existe un fichier de configuration qui va permettre de faire quelques modifications comme le chargement d'un kernel plus récent s'il en existe un. Cette technique n'est pas spécialement recommandée car certaines applications le vivent mal, même si c'est assez rare. Cette option n'est donc pas activée par défaut, néanmoins, sachez que vous pouvez l'activer :

Configuration File /etc/default/kexec
# Defaults for kexec initscript
# sourced by /etc/init.d/kexec and /etc/init.d/kexec-load
 
# Load a kexec kernel (true/false)
LOAD_KEXEC=true
 
# Kernel and initrd image
KERNEL_IMAGE="/vmlinuz"
INITRD="/initrd.img"
 
# If empty, use current /proc/cmdline
APPEND=""
 
# Load the default kernel from grub config (true/false)
USE_GRUB_CONFIG=false

3.2 Red Hat

Tout comme Debian, Red Hat a sa configuration pour kexec :

Configuration File /etc/sysconfig/kdump
# Kernel Version string for the -kdump kernel, such as 2.6.13-1544.FC5kdump
# If no version is specified, then the init script will try to find a
# kdump kernel with the same version number as the running kernel.
KDUMP_KERNELVER=""
 
# The kdump commandline is the command line that needs to be passed off to
# the kdump kernel.  This will likely match the contents of the grub kernel
# line.  For example:
#   KDUMP_COMMANDLINE="ro root=LABEL=/"
# If a command line is not specified, the default will be taken from
# /proc/cmdline
KDUMP_COMMANDLINE=""
 
# This variable lets us append arguments to the current kdump commandline
# As taken from either KDUMP_COMMANDLINE above, or from /proc/cmdline
KDUMP_COMMANDLINE_APPEND="irqpoll nr_cpus=1 reset_devices cgroup_disable=memory"
 
# Any additional /sbin/mkdumprd arguments required.
MKDUMPRD_ARGS=""
 
# Any additional kexec arguments required.  In most situations, this should
# be left empty
#
# Example:
#   KEXEC_ARGS="--elf32-core-headers"
KEXEC_ARGS=""
 
#Where to find the boot image
KDUMP_BOOTDIR="/boot"
 
#What is the image type used for kdump
KDUMP_IMG="vmlinuz"
 
#What is the images extension.  Relocatable kernels don't have one
KDUMP_IMG_EXT=""

Les options par défaut, n'ont pas besoin d'être touchées.

4 Utilisation

4.1 Debian

Lorsque kexec est installé, la commande reboot fait appel à kexec et donc reboot nativement via kexec. Donc voici les commandes utiles :

  • reboot : exécute un reboot rapide de la machine via kexec
  • coldreboot : effectue un reboot standard comprenant le reboot hardware

4.2 Red Hat

Pour Red Hat, lancez cette commande :

Command kexec
kexec -l /boot/vmlinuz-`uname -r` --initrd=/boot/initramfs-`uname -r`.img --command-line="`sed 's/ rhgb\| quiet//g' /proc/cmdline`"

Maintenant, pour lancez un fast reboot, utilisez le reboot standard.

J'ai fais un petit script permettant de faire tout ça :

Configuration File fast_reboot.sh
#!/bin/sh
# Made by Pierre Mavro (Deimosfr) | 15/03/2012
 
echo "Do you want to perform a fast reboot (without hardware reboot) ? (y/n)"
read ans
if [ $ans = 'y' ] ; then
   echo "Fast reboot in progress..."
   kexec -l /boot/vmlinuz-`uname -r` --initrd=/boot/initramfs-`uname -r`.img --command-line="`sed 's/ rhgb\| quiet//g' /proc/cmdline`"
   reboot
   exit 0
fi
echo "Fast reboot cancelled"

5 Ressources

http://wiki.debian.org/BootProcessSpeedup#Using_kexec_for_warm_reboots
http://archive09.linux.com/feature/150202.html
http://fedoraproject.org/wiki/Kernel/kexec
http://fedoraproject.org/wiki/Archive:FC6KdumpKexecHowTo