0

Reconstruindo o initial ramdisk – initramfs

0 Flares 0 Flares ×

O initial ramdisk  (também conhecido como initrd ou initramfs) é um cpio ( “copy in e out”) do arquivo do primeiro sistema de arquivo que é carregado na memória durante o processo de inicialização do Linux. O Linux copia o conteúdo do arquivo para o built-in rootfs que quer é baseada em ramfs, ou os mais regulamentados tmpfs e em seguida, tenta executar o resultante /init programa. O programa init destina-se a completar certas tarefas antes que o sistema de arquivos root “real” ou final seja montado sobre rootfs. Assim, initramfs precisa conter todos os drivers de dispositivos e ferramentas necessárias para montar o sistema de arquivos raiz final.

O initrd é projetado principalmente para permitir a inicialização do sistema em duas fases, onde o kernel vem com um conjunto mínimo de controladores compilados-in, e onde os módulos adicionais são carregados a partir de initrd.

É necessário reconstruir as imagens initrd nos seguintes cenários para incluir os módulos, arquivos e diretivas de configuração adequados do kernel.

  • Se adicionar um novo hardware para um sistema que pode ser usado muito cedo no processo de inicialização.
  • O /etc/lvm/lvm.conf e sistema de arquivos root reside em um volume lógico. Como garantir que as alterações sejam aplicadas após a reinicialização?
  • O /etc/multipath.conf e meu sistema de arquivos root reside em um multipath devices. Como garantir que as alterações sejam aplicadas após a reinicialização?
  • Se alterar os arquivos de configuração que podem ser utilizados anteriormente no processo de inicialização.
  • Se alterar as opções em um módulo do kernel.

 

NOTA:
Nos exemplos abaixo você verá o uso de $ (uname -r), que é uma maneira de passar a versão atual do kernel para um comando sem realmente digitá-lo. Se você estiver trabalhando com uma versão do kernel diferente do que se encontra em execução, em seguida, substitua $(uname -r)com a versão do kernel real, como 2.6.18-274.el5.

 

Reconstruindo o initrd (RHEL 3.x, 4.x e 5.x)

Utilitário mkinitrd pode ser usado para recriar uma imagem initrd. O mkinitrd cria uma primeira imagem usada pelo kernel para pré-carregar os módulos de dispositivo de bloco (como IDE, SCSI ou RAID), que são necessários para acessar o sistema de arquivos root. mkinitrd carrega automaticamente os módulos do sistema de arquivos (como ext3 e jbd), módulos de IDE, todas as entradas scsi_hostadapter em /etc/modprobe.conf.

É recomendável que você faça uma cópia de segurança do initrd no caso da nova versão ter um problema inesperado

$ cp /boot/initrd-$(uname -r).img /boot/initrd-$(uname -r).img.$(date +%m-%d-%H%M%S).bak

Agora crie o initrd:

$ mkinitrd -f -v /boot/initrd-$(uname -r).img $(uname -r)

A opção -v verbose mostrar os nomes de todos os módulos que ele está incluindo no initial ramdisk.
A opção -f irá forçar uma substituição de qualquer initial ramdisk image existente no caminho que você especificou

Se você estiver em uma versão do kernel diferente:

$ mkinitrd -f -v /boot/initrd-2.6.18-348.2.1.el5.img 2.6.18-348.2.1.el5

 

Reconstruindo o initrd (RHEL 6.x, 7.x)

O utilitário dracut pode ser usado no RHEL 6 para reconstruir uma imagem initramfs, Ele cria uma imagem inicial utilizado pelo kernel para pré-carregar os módulos de dispositivo de bloco (como IDE, SCSI ou RAID), que são necessários para acessar o sistema de arquivos root “real”.

Assim como mencionado anteriormente, recomenda-se que você faça uma cópia de backup do initramfs.

$ cp /boot/initramfs-$(uname -r).img /boot/initramfs-$(uname -r).img.$(date +%m-%d-%H%M%S).bak

Agora reconstrua o initramfs a partir da verão do kernel atual.

$ dracut -f -v

Se você estiver em uma versão do kernel diferente do initrd que você está construindo (incluindo se estiver no modo rescue), você deve especificar a versão completa do kernel, incluindo a arquitetura:

$ dracut -f /boot/initramfs-2.6.32-220.7.1.el6.x86_64.img 2.6.32-220.7.1.el6.x86_64

 

Trabalhando com backups (Todas as versões do RHEL)

Se algum erro ocorreu com a nova imagem initramfs, podemos a partir do backup gerado da imagem ramdisk inicial criar uma entrada separada em grub.conf para escolher a versão antiga no momento da inicialização sem a necessidade de restaurar o backup. Esta configuração de exemplo permite a seleção da imagem nova do inicial ramdisk ou antiga, no menu do grub.

title Red Hat Enterprise Linux 5 (2.6.18-274.el5)
root (hd0,0)
kernel /vmlinuz-2.6.18-274.el5 ro root=LABEL=/ 
initrd /initrd-2.6.18-274.el5.img

title Red Hat Enterprise Linux 5 w/ old initrd (2.6.18-274.el5)
root (hd0,0)
kernel /vmlinuz-2.6.18-274.el5 ro root=LABEL=/ 
initrd /initrd-2.6.18-274.el5.img.bak

Ou Alternativamente, você pode entrar em modo edit no grub é escolher o antigo initrd. Mas lembre-se este procedimento não é persistente. Na próxima inicialização vai continuar a usar a configuração original do grub.conf a menos que você atualize apontando para a nova ou antiga imagem do inicial ramdisk.

Jonatas Lopes

Sempre aprendendo coisas novas e passando o conhecimento adiante !!!

Dúvidas? Deixe seu comentário ou entre em contato.