Linux, Instalando um novo Kernel através de Livecd
Introdução
Existem certas situações que precisamos atualizar o kernel do sistema devido à problemas no boot. No meu caso, após restaurar um sistema de uma máquina antiga para um servidor mais novo, através de uma imagem dd, tive problemas para bootar o sistema no novo servidor devido ao kernel do sistema antigo não identificar o novo hardware.
Para solucionar essa questão, tive que instalar um novo kernel do Linux no servidor novo. Para ajudar utilizei um Livecd do Ubuntu. Segue abaixo o procedimento que usei para instalar o novo kernel.
Procedimento
- Bootar o Livecd do Ubuntu.
- Instalação de um novo kernel no livecd.
- Montando a partição de boot.
- Montando a partição raiz.
- Copiando os arquivos
- Criando o initrd
- Criando nova entrada no menu do grub
- Bootando o novo kernel
- Referências
$ sudo apt-get update
$ sudo apt-get install linux-image
Somente com o boot do livecd não temos todos os arquivos do kernel disponíveis em /boot. Para isso instalamos um novo kernel dentro do livecd. Após a instalação acima, o importante é verificar que o arquivo vmlinuz-<versao kernel> existe no diretório /boot e os módulos do kernel dentro de /lib/modules/<versao kernel>.
Pode ser que ocorra um erro nesse processo de instalação do kernel no livecd. Ignore o erro e continue o processo, pois o que interessa são os arquivos vmlinuz e os módulos do kernel. (Mesmo com o erro eles são instalados corretamente).
$ sudo mkdir /mnt/boot
$ sudo mount /dev/sda1 /mnt/boot
No caso acima o /dev/sda1 é a partição onde estão os arquivos de kernel do seu servidor e do gerenciador de boot do grub. É nesse diretório que vamos instalar o novo kernel.
Lembre-se que o acesso às partições variam de acordo como esta instalado o seu Linux.
$ sudo mkdir /mnt/raiz
$ sudo mount /dev/sda2 /mnt/raiz
No caso acima o /dev/sda2 é a partição root do seu sistema. Precisamos montar essa partição para copiar os módulos do novo kernel.
Lembre-se que o acesso às partições variam de acordo como esta instalado o seu Linux.
$ sudo cp /boot/vmlinuz-<versao kernel> /mnt/boot/
$ sudo cp /boot/System.map-<versao kernel> /mnt/boot/
$ sudo cp -a /lib/modules/<novo versao kernel> /mnt/raiz/lib/modules/
Copiando a imagem do kernel, o System.map e os módulos, respectivamente, para os diretórios do seu servidor Linux.
Temos que criar um novo initrd para o novo kernel. Vamos aproveitar o initrd do kernel atual do seu sistema Linux para criar o novo. O initrd vai ajudar o novo kernel montar corretmente a partição root do seu Linux.
Perceba que removemos os módulos do kernel atual que esta no initrd antes de copiar os módulos do kernel novo.
$ sudo mkdir ~/initrd
$ cd ~/initrd
$ sudo gzip -dc /mnt/boot/initrd.img-<versao kernel atual> | cpio -id
$ sudo rm -rf lib/modules/<versao kernel atual>
$ sudo cp -a /lib/modules/<novo versao kernel> lib/modules/
$ find . | cpio --quiet --dereference -o -H newc | gzip -9 > /mnt/boot/initrd-<novo versao kernel>
Para concluir nosso processo, vamos criar uma nova entrada no menu.lst do grub para que seja possível bootar o novo kernel. Edite o arquivo /mnt/boot/grub/menu.lst e inclua uma nova opção no menu:
title Novo Kernel
root (hd0,0)
kernel /vmlinuz-<novo versao kernel> root=/dev/sda2 ro quiet
initrd /initrd.img-<novo versao kernel>
Pronto, você já esta pronto para testar o novo kernel e bootar corretamente o seu sistema Linux. Desmonte as partições e reinicie o sistema, dessa vez, boote sem o livecd. No menu do grub escolha a nova opção e boa sorte!
$ sudo umount /mnt/boot/
$ sudo umount /mnt/raiz/
$ sudo shutdown -r now
http://askubuntu.com/questions/94156/installing-with-a-different-kernel
http://www.indiangnu.org/2009/how-to-create-editextract-initrd-in-ubuntudebian-and-redhatfedora-linux/