Quando eu compilo meu próprio kernel, basicamente o que faço é o seguinte:
Faço o download das fontes em www.kernel.org e descompacto.
Copio o meu anterior
.config
para as fontes e faço ummake menuconfig
para observar as novas opções e modifico a configuração de acordo com a nova política do kernel.Então, eu compilo:
make -j 4
Finalmente, eu instalá-lo:
su -c 'make modules_install && make install'
.Após alguns testes, removo o kernel antigo (de
/boot
e/lib/modules
) e corro completamente com o novo (este último passo salvou minha vida várias vezes! É uma dica profissional !).
O problema é que eu sempre recebo um /boot/initrd.img-4.x.x
que é enorme comparado aos da minha distribuição. Aqui o conteúdo do meu /boot/
diretório atual como um exemplo:
# ls -alFh
total 243M
drwxr-xr-x 5 root root 4.0K Mar 16 21:26 ./
drwxr-xr-x 25 root root 4.0K Feb 25 09:28 ../
-rw-r--r-- 1 root root 2.9M Mar 9 07:39 System.map-4.4.0-1-amd64
-rw-r--r-- 1 root root 3.1M Mar 11 22:30 System.map-4.4.5
-rw-r--r-- 1 root root 3.2M Mar 16 21:26 System.map-4.5.0
-rw-r--r-- 1 root root 170K Mar 9 07:39 config-4.4.0-1-amd64
-rw-r--r-- 1 root root 124K Mar 11 22:30 config-4.4.5
-rw-r--r-- 1 root root 126K Mar 16 21:26 config-4.5.0
drwxr-xr-x 5 root root 512 Jan 1 1970 efi/
drwxr-xr-x 5 root root 4.0K Mar 16 21:27 grub/
-rw-r--r-- 1 root root 19M Mar 10 22:01 initrd.img-4.4.0-1-amd64
-rw-r--r-- 1 root root 101M Mar 12 13:59 initrd.img-4.4.5
-rw-r--r-- 1 root root 103M Mar 16 21:26 initrd.img-4.5.0
drwx------ 2 root root 16K Apr 8 2014 lost+found/
-rw-r--r-- 1 root root 3.5M Mar 9 07:30 vmlinuz-4.4.0-1-amd64
-rw-r--r-- 1 root root 4.1M Mar 11 22:30 vmlinuz-4.4.5
-rw-r--r-- 1 root root 4.1M Mar 16 21:26 vmlinuz-4.5.0
Como você deve ter notado, o tamanho dos meus initrd.img
arquivos é cerca de 10 vezes maior que o da minha distribuição.
Então, faço algo errado ao compilar meu kernel? E como posso reduzir o tamanho do meu initrd.img
?
fonte
Respostas:
Isso ocorre porque todos os módulos do kernel não são removidos. Você precisa reduzi-lo ao tamanho.
Use este comando:
Isso reduzirá drasticamente o tamanho. Após executar o comando acima, você pode continuar criando o initramfs / initrd
fonte
initrd
imagem por 10 ... Muito obrigado, funcionou bem!{}
e+
.Eu fiz uma pesquisa extra sobre o problema para saber qual é a melhor maneira de remover os módulos e aqui está o processo completo que encontrei (o SHW ainda trouxe a resposta, mas o processo que encontrei é de alguma forma mais padronizado):
Baixe as fontes
www.kernel.org
e descompacte-as.Copie seu anterior
.config
para as fontes e faça ummake menuconfig
para observar as novas opções e modifique a configuração de acordo com a nova política do kernel.Em seguida, compile-o:
Por fim, instale-o:
Após alguns testes, remova o kernel antigo dos diretórios
/boot
e/lib/modules
.O
INSTALL_MOD_STRIP
quando definido para1
adicionar umstrip --strip-debug
ao instalar o módulo, o que é suficiente para reduzir drasticamente o tamanho.Consulte: INSTALL_MOD_STRIP in
Documentation/kbuild/kbuild.txt
.fonte
Você também pode alterar a configuração do seu
initramfs.conf
Encontre o arquivo em
/etc/initramfs-tools/initramfs.conf
Há uma configuração que diz que
MODULES=most
isso inclui a maioria dos módulos da sua imagem initrd.Altere para que
MODULES=dep
isso faça o gerador initramfs adivinhar quais módulos incluir.Confira a página de manual do initramfs.conf aqui .
NOTA 1: Após executar as etapas acima, o tamanho da minha imagem initramfs reduziu de 282 MB para 99 MB (ainda é grande o suficiente, mas é uma melhoria significativa)
NOTA 2: Eu também tentei remover os módulos do kernel em
/lib/modules/<kernel version>
. Os módulos fornecidos pelas atualizações do sistema operacional são removidos (tamanho = 211 MB) e, portanto, a imagem intiramfs correspondente é de cerca de 15 MB. Depois de remover os módulos do kernel vanilla que eu compilei, o tamanho da pasta era 185 MB e a imagem intramfs era 16 MB. Então, depois de todas as otimizações, o tamanho caiu de 282 MB para 16 MB !! Para retirar use este códigoNo código acima, substitua
<kernel_release>
pela versão do kernel da qual você deseja remover os módulos.Para mais discussão, veja este link .
O código acima deve ser executado como
sudo
ousu
fonte