[Dica/Tuto] Initramfs mínimo (Debian e etc…) utilizando o dracut
Para o Debian e etc…: [Dica/Tuto] Otimizando initramfs ( Debian) e adicionado Initramfs mínimo( menos 6s no boot em um Celeron®) - 03/09
Para Arch: [Dica/Tuto] Initramfs mínimo( Arch e etc...)
Com a dica do @anon58028541 fui pesquisar sobre o dracut. Vi o manual, e fiz alguns testes. Alguns deram certo, e outros não.
Este procedimento foi feito no Linux Mint Mate. Ao instalar o dracut, ele automaticamente remove o pacote initramfs-tools…
Para ler:
https://wiki.gentoo.org/wiki/Dracut
Para instalar:
apt install dracut
O primeiro comando que vamos ver é para listar os módulos instalados.
$ dracut --list-modules | sort
dracut: Executing: /usr/bin/dracut --list-modules
aufs
base
bash
biosdevname
bootchart
btrfs
busybox
caps
cio_ignore
console-setup
convertfs
crypt
crypt-gpg
crypt-loop
dasd
dasd_mod
dasd_rules
dash
debug
dm
dmraid
dmsquash-live
dracut-systemd
drm
ecryptfs
fips
fips-aesni
fs-lib
fstab-sys
gensplash
img-lib
integrity
kernel-modules
lunmask
lvm
lvmmerge
masterkey
mdraid
modsign
multipath
multipath-hostonly
overlay-root
plymouth
pollcdrom
qemu
rescue
resume
rootfs-block
securityfs
selinux
shutdown
syslog
systemd
systemd-initrd
terminfo
udev-rules
usrmount
watchdog
Tem bastante módulo, mas só iremos precisar de dois para carregar o boot. Lembrando se usa lvm, raid e etc… terá que adicionar, por exemplo o dmraid.
OK
Para inicializar um sistema de arquivos ext (2,3,4), btrfs, xfs e etc…
Como falei só precisamos de dois o rootfs-block e o base.
Estes módulos irão carregar mais dois como dependência: udev-rules e fs-lib
Vamos começar a configurar, lembrando que o exemplo utiliza o sistema de arquivo ext4.
Vamos ver os drivers necessários de dispositivos que precisam ser carregados.
Assumindo que o /dev/sda1 seja o root
$ udevadm info --attribute-walk -n /dev/sda1 | grep 'DRIVERS=="[^"]'
DRIVERS=="sd"
DRIVERS=="ahci"
Os drivers são sd_mod e ahci.
No dracut só sobem alguns drivers por padrão, então só precisamos adicionar o ahci.
Abra o arquivo para edição:
/etc/dracut.conf
E adicione
dracutmodules+=“rootfs-block base”
add_drivers+="ahci "
Caso tenha placa de vídeo Intel tem que adicionar o i915
add_drivers+="ahci i915 "
OK.
Vamos adicionar os seguintes opções também.
do_prelink=no
hostonly=yes
hostonly_cmdline="yes"
show_modules="yes"
Estas opções servem para otimizar ainda mais.
Recomendo ler o manual
man dracut.conf
http://manpages.ubuntu.com/manpages/bionic/man5/dracut.conf.5.html
Seguem as informações
do_prelink="{yes|no}"
Prelink de Binários no initramfs (padrão = yes)
hostonly="{yes|no}"
Modo somente host: instale apenas o necessário para inicializar o host local em vez de um host genérico e gera configuração específica do host.
hostonly_cmdline="{yes|no}"
Se definido como "yes", armazene os argumentos da linha de comando do kernel necessários no initramfs
show_modules="{yes|no}"
Mostra o nome dos módulos incluídos na saída padrão durante a compilação.
Outras opções
omit_dracutmodules+=“systemd-initrd”
compress=“lz4 -l -9”
A opção omit_dracutmodules é para omitir módulos. O módulo systemd-initrd vem carregado por padrão. Ele serve para habilitar a exibição completa do comando
~$ systemd-analyze
Caso não queira, insira no omit_dracutmodules+="
O **compress**, é a compressão utilizada na imagem.
compress="{bzip2|lzma|xz|gzip|lzo|lz4|zstd|<compressor [args ...]>}"
Compacta o initramfs gerado usando o programa de compactação informado. Se você informar apenas o nome de um programa de compactação, ele o programa. Se você informar os argumentos, ele será chamado exatamente com esses argumentos.
Dependendo do que você informa, isso pode resultar em um initramfs que o kernel não pode descomprimir.
**LZ4**
compress="lz4 -l -9"
-l : compress using Legacy format (Linux kernel compression)
-9 : High compression
OK. Acabamos a configuração.
No exemplo , ficou assim
dracutmodules+="rootfs-block base"
add_drivers+="ahci hid hid_generic i915 "
#omit_dracutmodules+="systemd-initrd"
compress="lz4 -l -9"
do_prelink=no
hostonly=yes
hostonly_cmdline="yes"
show_modules="yes"
Caso queira habilitar o #omit_dracutmodules+, é só descomentar.
Pronto.
Agora vamos criar o imagem.
Caso use um só kernel recomendo fazer backup
sudo mv /boot/initrd.img-4.15.0-60-generic /boot/initrd.img-4.15.0-60-generic.backup
Faça com o mesmo nome.
sudo dracut -f /boot/initrd.img-4.15.0-60-generic
A opção -f é para se existir o arquivo, substituir.
Se não entrar
Ao iniciar a tela do grub, selecione uma imagem e tecle a tecla e.
Procure pelo initrd
initrd.img-4.15.0-60-generic
e substitua
initrd.img-4.15.0-60-generic.backup
Pressione o F10
e irá entrar. Remova a configuração no /etc/dracut.conf, e execute novamente.
sudo dracut -f /boot/initrd.img-4.15.0-60-generic
Só para finalizar.
Se quiser ver se tem o drive na imagem, utilize o comando lsinitrd
$ lsinitrd /boot/initrd.img-4.15.0-60-generic | grep ext4
lrwxrwxrwx 1 root root 6 Sep 9 15:31 sbin/fsck.ext4 -> e2fsck
O arquivo final da imagem ficou em torno de 10M