13 de nov de 2015

Reparando GRUB após atualizar o Debian sem Live CD




Já fazia um tempo que eu estava passando por problemas no meu Debian 7 (wheezy). O principal dele era a libstdc++. Alguns programas que eu tentava instalar requeriam uma versão dessa biblioteca mais recente da que eu tinha instalada, mas eu estava com bastante medo de "forçar" uma atualização e acabar quebrando um monte de pacotes. Então resolvi que iria fazer o upgrade pro Debian 8 (jessie). Então eu fiz o upgrade, mas quando reiniciei, me deparei com uma linda tela do GRUB Rescue. Como estava sem nenhum Live CD e não queria esperar até o próximo dia, resolvi tentar resolver o problema por ali mesmo. Seguem abaixo os passos que realizei.


Primeiro, precisei alterar uma configuração na BIOS. Precisei trocar a opção de boot de Legacy para UEFI. Existe uma opção de selecionar um arquivo para o boot. Então selecionei um que já existia para EFI do debian (essa parte foi só ir procurando as opções de boot na BIOS).
Depois dessa configuração, reiniciei o computador. Me deparei com a tela do grub_rescue. Então, utilizei o comando ls para listar as partições disponíveis.
Isso me mostrou algo como o seguinte:

(hd0)  (hd0,msdos5)  (hd0,msdos6)  (hd0,msdos8)  ...

Mas eu ainda precisava descobrir em qual delas estavam os arquivos do grub e em qual estava o linux, porque me lembro que deixei a partição de boot e a raiz do linux separados. Para isso, eu fui testando um por um, até achar a partição de boot e a partição do linux, com os seguintes comandos:

ls (hd0)/
ls (hd0,msdos5)/
ls(hd0,msdos6)/

...

Atenção: Você não pode esquecer dessa barra no final. Eu perdi um bom tempo porque não estava colocando.

Então, baseando-me nos erros ou nos arquivos que eram exibidos, consegui distinguir em qual partição está cada coisa, e então anotei pra não esquecer. 

Depois, só precisei digitar os comandos abaixo:

set prefix=(hd0,msdos5)/grub.bak
set root=(hd0,msdos8)
insmod normal
normal

Onde (hd0,msdos5) é a partição de boot, e (hd0,msdos8) é a partição onde está a raiz do linux.

PRONTO!

Quer dizer, quase pronto. Depois que digitei o comando normal, o grub iniciou e mostrou aquela tela clássica com os SO's disponíveis.

O ponto a destacar aqui é que, eu já havia tentado os comandos acima, mas nenhum funcionou enquanto eu não mudei as configurações na BIOS. Portanto, os passos na BIOS foram essenciais. 

Mas isso não significa que eu havia reparado o grub ainda. Na verdade só havia conseguido iniciar ele. Se eu não reparasse, iria precisar fazer isso toda vez. E eu reparei que a versão do kernel disponível ainda era a 3.2, diferente do kernel do Debian 8 que é a versão 3.16. 

Então, depois que o sistema iniciou, fui para um tty diferente da interface gráfica usando CTRL+ALT+F2, fiz login e digitei o seguinte comando como root:

grub-install --root-directory=/ /dev/sda

E então o grub foi reinstalado. No meu caso, eu tenho o Windows instalado em Dual Boot. Então tive que fazer o comando abaixo (como root também) pra poder encontrá-lo na lista do grub de novo. 

update-grub


E agora sim o grub está funcionando normalmente de novo.

2 comentários:

  1. Bacana, sempre utilizei um live-cd para recuperar o boot. Sei que o GRUB tem algumas ferramentas, porém como não invento muito, normalmente não tenho problemas e acabo não tendo que utiliza-las. Espero lembrar de explorá-las quando tiver algum problema.

    ResponderExcluir
    Respostas
    1. Sim. Com um live-cd é mais fácil, mas não é sempre que temos um, como foi o meu caso.

      Excluir