O nosso amigo (e desenvolvedor gentoo
) bbj nos mandou o excelente artigo sobre o kexec.
Ao se inicializar o computador, sinais mínimos de hardware passam o comando do computador ao seu software embarcado BIOS, que transfere o comando ao gerenciador de boot (bootloader: grub, lilo, silo, etc) - carregado no disco-rígido ou em alguma mídia qualquer - que, por sua vez, transfere o controle dos dispositivos do computador ao sistema operacional.
Todo esse processo de inicialização demanda tempo, pois há o reconhecimento de dispositivos, carregamento do gerenciador de boot, carregamento da imagem do kernel e módulos, sua execução mais a acomodação de um ambiente operacional funcional ao usuário.
Existem duas funcionalidades no Linux que permitem diminuir o tempo de inicialização (e reinicialização) do sistema operacional: kexec e software suspend 2.
O kexec foi projetado para permitir ao usuário carregar uma nova imagem do kernel sem a necessidade de passar por uma reinicialização completa do hardware. O software suspend 2 exerce a função de hibernar o sistema operacional (funcionalidade conhecida pelo Windows). O funcionamento dessas funcionalidades é independente.
O Linux 2.6.21 possui o kexec como uma implementação oficial já incluída em seus códigos-fonte. Quanto ao segundo, por ainda estar em fase de desenvolvimento e conter possíveis bugs, sua funcionalidade precisa ser adicionada ao kernel através de um patch, aplicado em seus códigos-fonte.
Para a utilização desses recursos, é necessário instalar alguns softwares:
emerge kexec-tools suspend2-sources hibernate-script
rc-update add kexec default
rc-update add hibernate-cleanup default
O kexec-tools fornece ferramentas para a utilização do kexec. A instalação do suspend2-sources oferece ao usuário os códigos-fonte do kernel (já contém o kexec) com patches do Gentoo mais os do software suspend 2 aplicados. O hibernate-script oferece uma coleção de scripts para ajudar o usuário a hibernar seu sistema operacional.
Após a instalação dos softwares, configura-se o kernel para dar suporte ao kexec e ao software suspend 2:
Processor type and features --->
[ * ] kexec system call
Power management options (ACPI, APM) --->
[ * ] Power Management support
[ * ] Suspend2 --->
[ * ] Swap Allocator
[ * ] Compression support
(/dev/hdxy) Default resume device name
No lugar de /dev/hdxy, coloca-se o caminho para o node de acesso à partição swap (onde será salvo o conteúdo da memória RAM antes do sistema operacional ser hibernado). Recompila-se a imagem do kernel, colocando-a em /boot, por exemplo. Edita-se o arquivo /etc/conf.d/kexec, que contém algumas variáveis utilizada pelo kexec. Se o usuário seguir o padrão (comentado dentro deste arquivo), não precisará alterar qualquer variável, com exceção da KPARAM, que deverá conter o seguinte:
KPARAM="resume2=swap:/dev/hdxy"
Esta variável indicará ao kexec o parâmetro que mostra o caminho da partição swap. Quanto ao gerenciador de boot, este também precisa de alteração. No grub:
title Hibernar
kernel /boot/bzImage-suspend2 resume2=swap:/dev/hdxy
No lilo:
image = /boot/bzImage-suspend2
label = Hibernar
append = "resume2=swap:/dev/hdxy"
Neste ponto, o usuário pode reinicializar seu computador com a nova imagem do kernel da forma que quiser, como pelo comando reboot.
Para testar a funcionalidade do kexec, experimente o comando reboot novamente e verá que o Gentoo carregará a imagem do kernel, interromperá os serviços e executará essa imagem do kernel sem a inicialização completa do hardware. O usuário deve se lembrar que, para fazer a inicialização completa do hardware novamente, é preciso interromper o kexec pelo comando /etc/init.d/kexec stop antes de executar o comando reboot.
O hibernate-script possui vários arquivos de configuração em /etc/hibernate. Talvez o usuário necessite alterar (ou queira ajustar) alguma configuração. Em geral, não há a necessidade de alterações. Para testar a funcionalidade do software suspend 2, pode-se utilizar o comando hibernate, como super-usuário (root).