[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.