Recentemente parti a instalação de Arch Linux no meu portátil ao realizar uma atualização de sistema com pouca bateria. Uma receita para o desastre, eu sei. O portátil ficou sem bateria durante a atualização do kernel, por isso, quando o voltei a ligar, deparei-me com esta mensagem intimidadora do bootloader:

1error: file '/boot/vmlinuz-linux' not found.
2
3Entering rescue mode...
4
5grub rescue>

Isto acontece porque o sistema crashou durante o update do kernel, o que fez que com que imagem vmlinuz na partição de boot desaparecesse ou ficasse corrompida. Este guia contém os passos que segui para reparar o procedimento de boot usando a minha USB de recuperação do Arch. Provavelmente vou voltar a precisar de fazer isto no futuro. Estes passos também já me foram úteis para reparar a partição /boot quando ela ficou sem espaço.

Guia de recuperação

Passo 1: Ligação ao Wifi

Isto é necessário para o pacman encontar os mirrors dos pacotes e atualizar corretamente o sistema. Recomendo a utilização do iwd.

Começamos por lançar a ferramenta de controlo:

1iwctl

Dentro da ferramenta verificamos o nome do dispositivo de wifi:

1[iwd]# device list

Depois, começamos a procura de redes no dispositivo. Neste guia, uso wlan0 como um exemplo da placa wifi:

1[iwd]# station wlan0 scan

Assim, podemos listar as redes que foram encontradas:

1[iwd]# station wlan0 get-networks

Finalmente, podemos ligar à nossa rede:

1[iwd]# station wlan0 connect <rede_wifi>

Depois disto, deveremos conseguir fazer ping a um website:

1ping www.google.com

Passo 2: Chroot no sistema de ficheiros

Começamos por descobrir o nome da partição de ficheiros no disco. Aqui utilizamos /dev/nvme0n1p2 como exemplo:

1lsblk
2
3NAME             MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
4nvme0n1          259:0    0 476.9G  0 disk 
5├─nvme0n1p1      259:1    0   512M  0 part /boot
6└─nvme0n1p2      259:2    0 476.4G  0 part /

Agora podemos montar tanto o sistema de ficheiros como a partição /boot:

1mount /dev/nvme0n1p2 /mnt
2mount /dev/nvme0n1p1 /mnt/boot

E assim podemos entrar no sistema com chroot:

1arch-chroot /mnt

Passo 3: Reparar a instalação

Começamos por remover o bloqueio do pacman que ficou da atualização inacabada:

1rm /var/lib/pacman/db.lck

E depois podemos fazer a atualização outra vez para garantir que todos os pacotes ficam consistentes:

1pacman -Syu

Depois, podemos forçar a reinstalação do kernel:

1sudo pacman -S linux

Finalmente, por segurança, podemos reconstruir o initramfs, o que vai reparar o ambiente de boot:

1mkinitcpio -P

Opcional: Atualizar a configuração do bootloader

Este passo é necessário quando reparamos completamente a partição de boot devido a um bootloader partido. Começamos por garantir que o pacote grub está instalado:

1pacman -S grub

Depois, podemos reinstalar o grub e voltar a gerar a configuração:

1grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=GRUB
2grub-mkconfig -o /boot/grub/grub.cfg

Passo final: Sair e reiniciar

1exit 
2umount /mnt
3reboot

Depois de reiniciar, o grub deverá iniciar normalmente.