[Dica/Tuto] Initramfs mínimo( Arch e etc...)

[Dica/Tuto] Otimizando Initramfs mínimo( Arch e etc…)

https://wiki.archlinux.org/index.php/Minimal_initramfs
http://blog.falconindy.com/articles/optmizing-bootup-with-mkinitcpio.html

Para o Debian e etc…: [Dica/Tuto] Otimizando initramfs ( Debian) e adicionado Initramfs mínimo( menos 6s no boot em um Celeron®) - 03/09
[Dica/Tuto] Initramfs mínimo (Debian e etc...) utilizando o dracut

No Arch diferentemente do Debian, utiliza o HOOK base que vem com o mínimo possível de drivers carregados por padrão. Por isso, você terá que informar o mínimo necessário para carregar o boot.

Então aqui colocarei o procedimento que acredito ser o necessário para a maioria dos usuários.

Assumindo que o /dev/sda1 seja o root

Vamos ver o drivers necesário de dispositvos que precisam ser carregados.

$ udevadm info --attribute-walk -n /dev/sda1 | grep 'DRIVERS=="[^"]'
    DRIVERS=="sd"
    DRIVERS=="ahci" 

Vendo pelo comando lsmod

$ lsmod | grep sd
sd_mod                 57344  6
scsi_mod              249856  4 sd_mod,libata,sg,sr_mod

Os drivers são sd_mod e ahci.
Os drivers scsi_mod, libata,sg,sr_mod já são carregados por padrão.

Lembrando que se você usa lvm, criptografia, raid e entre outros recursos deverá também ser informado, por exemplo os drivers mdadm, lvm e crypto. Isso pode ser visto com o comando lsmod.
Já vimos os dispositivos (devices), agora vamos ver o teclado. Sim precisamos do teclado
para caso você precise dele no boot.

Para notebooks, acredito que só o drive hid resolsavel pelo teclado sirva.

Saida do lsmod

 ~ $ lsmod | grep -Ei 'hid'
mac_hid                16384  0
hid_generic            16384  0
usbhid                 65536  0
hid                   143360  2 usbhid,hid_generic

Vendo pela saida só presimmos de 2 drivers: hid e hid_generic

Caso seja um PC com um teclado USB conectado. Vamos ver o teclado com o comando lsusb

Saída:

~ $ lsusb
....
Bus 001 Device 002: ID 045e:0745 Microsoft Corp. Nano Transceiver v1.0 for Bluetooth
.....

Vemos que o teclado está no Bus 001 . Com o mesmo comando inserindo a opção -t podemos ver os drivers.

~ $ lsusb -t
/:  Bus 01.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/14p, 480M
    |__ Port 12: Dev 2, If 0, Class=Human Interface Device, Driver=usbhid, 12M
    |__ Port 12: Dev 2, If 1, Class=Human Interface Device, Driver=usbhid, 12M
    |__ Port 12: Dev 2, If 2, Class=Human Interface Device, Driver=usbhid, 12M

Vimos que precisamos dos drivers: xhci_hcd e usbhid.

Utilizando o lsmod veremos todos os drivers necessários.

~ $ lsmod | grep -Ei 'xhci_hcd|usbhid'
usbhid                 65536  0
hid                   143360  2 usbhid,hid_generic
xhci_hcd              278528  1 xhci_pci

Precisaremos dos drivers: hid, hid_generic, usbhid, xhci_hcd, xhci_pci

Concluímos os módulos necessários:

Abra o arquivo /etc/mkinitcpio.conf
E edite os MODULES.

Caso tenha placa de video intel insira também o módulo i915

Com o comando lsblk -f vimos o tipo do sistema de arquivo, no caso neste exemplo é o ext4

Para notebook
MODULES="ahci sd_mod ext4 hid usbhid hid_generic"

Para pc com teclado usb:
MODULES="ahci sd_mod ext4 xhci_hcd xhci_pci hid usbhid hid_generic"

Finalizamos os módulos.
Vamos ver agora o BINARIES. que seriam os executáveis.

Aqui segue exemplos de binários necessários para o tipo de sistema de arquivos,

Para dispositivos ext[2|3|4]:

BINARIES="fsck fsck.ext[2|3|4] e2fsck"

Para partição vfat (UEFI boot):

BINARIES="fsck fsck.vfat dosfsck"

Para dispositivos de disco único btrfs:

BINARIES="fsck fsck.btrfs btrfsck"

Para dispositivos multi disco btrfs:

BINARIES="fsck fsck.btrfs btrfs btrfsck"

Para dispositivos xfs 

BINARIES="fsck fsck.xfs xfs_repair"

Como estamos usando o ext4 neste exemplo:

Vamos deixar deste modo:

BINARIES=(fsck fsck.ext4 e2fsck)

Acabamos os binários.

Vamos ver agora o HOOKS.

Aqui é simples, só deixe o base. Caso queira colocar o systemd para ver uma saída diferente com o comando systemd-analyze.

HOOKS="base"
ou
HOOKS="base systemd"

Para acabar vamos ver a COMPRESSION.

OK.

Aqui recomendo usar o lz4 ou cat ( sem compressão), descomente o que for usar.
Lembrando que para funcionar tem que instalar

sudo pacman -S lz4

COMPRESSION="lz4"
#COMPRESSION="cat"

Caso use o lz4, modifique também o COMPRESSION_OPTIONS.DEscomente para funcionar.

COMPRESSION_OPTIONS=(-l -9)

-l : compress using Legacy format (Linux kernel compression)
-9 : High compression

Você pode usar o máximo que é o -12, mas é bem mais lento para comprimir e a diferença é mínima no tamanho final.

Acabamos com a edição do arquivo /etc/mkinitcpio.conf.

Agora vamos criar a imagem do boot. Caso só tenha um kernel, recomendo fazer o backup da imagem atual.

Exemplo:
boot $ sudo mv initramfs-5.2-x86_64.img initramfs-5.2-x86_64.img.backup

Para criar ou atualizar a imagem.

Exemplo.
sudo mkinitcpio -p linux52

Veja em boot o tamanho final da imagem.
Por exemplo:
boot $ ls -lh initramfs-5.2-x86_64.img
-rw-r–r-- 1 root root 14M set 10 16:02 initramfs-5.2-x86_64.img

Ficou em 14M.

Pronto acabou.

Veja com o comando systemd-analyze o tempo do boot atual.
Reinicie e veja o tempo com o Initramfs mínimo.

Para testar o teclado
Ao iniciar a tela do grub, selecione uma imagem e tecle a tecla e.

Procure por

linux /vmlinuz-linux-zen root=UUID=e450be32-....

E adicone a seguinte opção no final

init=/bin/bash

Pressione o F10

E veja se o teclado funciona.

3 Curtidas