Linux Kamarada

Como reinstalar o GRUB

O GRUB é o carregador de inicialização (boot loader), que é o primeiro programa a ser carregado do disco, responsável por carregar o kernel e iniciar o sistema operacional. Ele é conhecido pelo menu que apresenta quando o computador é ligado, especialmente útil em computadores com dual boot, ou seja, em que dois (ou mais) sistemas operacionais estão instalados (por exemplo, Linux e Windows) e o usuário precisa escolher qual sistema iniciar.

Em algumas situações, pode ser que esse menu deixe de funcionar. Como aconteceu comigo, enquanto testava o openSUSE Leap 15.3 Beta. Após baixar atualizações para o sistema usando o comando zypper up e reiniciar, o menu do GRUB não apareceu, apresentando a seguinte mensagem de erro:

1
2
3
4
5
Welcome to GRUB!

error: symbol 'grub_verify_string' not found.
Entering rescue mode...
grub rescue>

O que me fez reportar o bug boo#1183884, no qual ainda trabalho junto ao Projeto openSUSE.

Isso me fez pesquisar como reinstalar o GRUB. Encontrei duas possíveis soluções — uma delas funcionou pra mim — e as compartilho a seguir, caso sejam úteis para mais alguém.

Para tentar ambas as situações, já que você não consegue acesso ao sistema operacional instalado no seu computador, vai precisar de uma imagem Live gravada em um DVD ou em um pendrive. Você pode baixar o Linux Kamarada 15.2 na página Download.

Comece dando o boot pelo sistema Live e identificando as partições do seu disco. Você pode fazer isso, por exemplo, com o comando fdisk:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# fdisk -l
Disco /dev/sda: 447,1 GiB, 480103981056 bytes, 937703088 setores
Modelo de disco: KINGSTON SA400S3
Unidades: setor de 1 * 512 = 512 bytes
Tamanho de setor (lógico/físico): 512 bytes / 512 bytes
Tamanho E/S (mínimo/ótimo): 512 bytes / 512 bytes
Tipo de rótulo do disco: gpt
Identificador do disco: C5E68EC3-1350-4E0C-A335-252FF0FDD675

Dispositivo    Início       Fim   Setores Tamanho Tipo
/dev/sda1        2048    206847    204800    100M Sistema EFI
/dev/sda2      206848    239615     32768     16M Microsoft reservado
/dev/sda3      239616 208864604 208624989   99,5G Microsoft dados básico
/dev/sda4   208865280 209919999   1054720    515M Windows ambiente de recuperaçã
/dev/sda5   209920000 419635199 209715200    100G Linux sistema de arquivos
/dev/sda6   902049792 937701375  35651584     17G Linux sistema de arquivos
/dev/sda7   419635200 902049791 482414592    230G Linux sistema de arquivos

Partições lógicas fora da ordem do disco.

No meu caso, as informações que interessam são:

  • o sistema operacional está instalado na partição /dev/sda5
  • a partição EFI é a /dev/sda1
  • portanto, o disco com que estamos trabalhando é o /dev/sda

Nos exemplos a seguir, eu considero essas partições. Se atente para mudar os comandos conforme a realidade do seu computador.

1) Sistema instalado e Live coincidem

A solução um pouco menos trabalhosa (que requer a execução de menos comandos) deve funcionar quando você dispõe da imagem Live referente ao sistema que está instalado no computador. Por exemplo, quando você instalou o Linux Kamarada 15.2 no seu computador, e agora o GRUB está com problema, e você tem a imagem Live do Linux Kamarada 15.2.

Crie um ponto de montagem para a partição do sistema e monte-a:

1
2
# mkdir -p /mnt/opensuse
# mount /dev/sda5 /mnt/opensuse -o subvol=@

Depois, monte dentro dela a partição EFI, caso você tenha uma:

1
# mount /dev/sda1 /mnt/opensuse/boot/efi/

Finalmente, execute o comando a seguir, que vai reinstalar o GRUB:

1
2
3
# grub2-install --root-directory=/mnt/opensuse /dev/sda
Instalando para a plataforma x86_64-efi.
Instalação terminada. Sem erros reportados.

(aqui, estou considerando Linux Kamarada e openSUSE, caso seu cenário seja outro — por exemplo, você está usando uma imagem Live do Ubuntu para reinstalar o GRUB em uma instalação do Ubuntu — o comando acima pode ser diferente)

Por fim, desmonte as partições e reinicie o computador:

1
2
3
# umount /mnt/opensuse/boot/efi/
# umount /mnt/opensuse/
# reboot

2) Sistema instalado diferente do Live

Essa solução, na teoria, funciona até mesmo entre distribuições Linux diferentes. Por exemplo, se o sistema instalado no computador é o Linux Kamarada mas a imagem Live que você dispõe é do Ubuntu (ou vice-versa). Isso funciona porque essa solução usa o comando chroot para entrar no sistema instalado. Então o GRUB que será reinstalado é o GRUB da distribuição instalada, não importando, para isso, qual é a distribuição da imagem Live.

Crie um ponto de montagem para a partição do sistema e monte-a:

1
2
# mkdir -p /mnt/opensuse
# mount /dev/sda5 /mnt/opensuse -o subvol=@

Depois, monte dentro dela a partição EFI, caso você tenha uma:

1
# mount /dev/sda1 /mnt/opensuse/boot/efi/

Agora vamos “emprestar” alguns sistemas de arquivos do sistema Live para o sistema instalado, usando a opção -B (ou --bind) do comando mount:

1
2
3
4
5
# mount -B /dev /mnt/opensuse/dev
# mount -B /dev/pts /mnt/opensuse/dev/pts
# mount -B /proc /mnt/opensuse/proc
# mount -B /run /mnt/opensuse/run
# mount -B /sys /mnt/opensuse/sys

Então, entre no sistema instalado usando o comando chroot:

1
# chroot /mnt/opensuse

Com isso, todos os comandos a partir de agora serão executados no sistema instalado, não no sistema Live. A partição a que antes você se referia como /mnt/opensuse agora é a própria /.

Finalmente, execute o comando a seguir, que vai reinstalar o GRUB:

1
2
3
# grub2-install /dev/sda
Instalando para a plataforma x86_64-efi.
Instalação terminada. Sem erros reportados.

(aqui, estou considerando que o sistema instalado é o Linux Kamarada ou o openSUSE, não importando qual é o sistema Live usado, caso seu cenário seja outro — por exemplo, você está usando uma imagem Live do Linux Kamarada para reinstalar o GRUB em uma instalação do Ubuntu — o comando acima pode ser diferente)

Aproveite para recriar o initrd, que pode ser parte do problema também:

1
2
3
4
5
6
7
8
9
10
11
# mkinitrd
Creating initrd: /boot/initrd-5.3.18-47-default
dracut: Executing: /usr/bin/dracut --logfile /var/log/YaST2/mkinitrd.log --force /boot/initrd-5.3.18-47-default 5.3.18-47-default

[...]

dracut: *** Store current command line parameters ***
dracut: Stored kernel commandline:
dracut:  root=UUID=d9dd0940-6312-456a-b769-ccbea177fdc2 rootfstype=btrfs rootflags=rw,relatime,ssd,space_cache,subvolid=256,subvol=/@,subvol=@
dracut: *** Creating image file '/boot/initrd-5.3.18-lp152.63-preempt' ***
dracut: *** Creating initramfs image file '/boot/initrd-5.3.18-lp152.63-preempt' done ***

(esse comando pode demorar alguns minutos)

Por fim, saia do sistema instalado, desmonte as partições e reinicie o computador:

1
2
3
4
5
6
7
8
9
# exit
# umount /mnt/opensuse/sys
# umount /mnt/opensuse/run
# umount /mnt/opensuse/proc
# umount /mnt/opensuse/dev/pts
# umount /mnt/opensuse/dev
# umount /mnt/opensuse/boot/efi/
# umount /mnt/opensuse/
# reboot

Conclusão

Remova a mídia Live para que o sistema seja iniciado a partir do disco do próprio computador e voilà: o menu do GRUB volta a aparecer.

No meu caso, dado que eu tinha o openSUSE Leap 15.3 Beta no computador, mas só dispunha da imagem Live do Linux Kamarada 15.2, na teoria eu deveria resolver meu problema com essa solução 2. Foi a primeira que eu tentei, mas não funcionou. Daí eu tentei a solução 1 e funcionou. É bem verdade que agora eu estou com todos os pacotes, kernel, etc. do openSUSE Leap 15.3 Beta e só o GRUB do Leap 15.2 (até o pacote RPM grub é o do Leap 15.3, mas o GRUB efetivamente instalado na partição EFI é o do Leap 15.2). Mas está funcionando. Desconfio que o problema esteja no GRUB do Leap 15.3, que não está reconhecendo minha configuração, ou no instalador do Linux Kamarada 15.2, que na época da instalação fez algo diferente do que deveria.

Seja como for, espero que consigamos descobrir onde está o problema, e que ele seja corrigido para que não aconteça nas próximas versões.

Referências

Me paga um café?
Se você gostou muito, se foi muito útil pra você, será que vale um café? Se quiser, você pode "me pagar um café" pelo PayPal ou contribuir com o projeto de outras formas.

Comentários

Sobre

O Projeto Linux Kamarada visa divulgar e promover o Linux como um sistema operacional robusto, seguro, versátil e fácil de usar, adequado para o uso diário seja em casa, no trabalho ou no servidor. Os focos do projeto são principalmente distribuição e documentação.

Anúncios

Facebook

Autor