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.