Rage Against GRUB

Até certo tempo atrás - coisa de semanas - minha cópia do Windows 7 era "pirata", "ilegal" e "criminosa". Pra que tudo rodasse direito eu utilizava um crack que - através de algum procedimento que desconheço - realizava o famoso "transforme seu windows em original".

O 7 Loader (crack em questão) tem algumas interessantes funcionalidades, além de ativar o Windows ele insere o logo do fabricante que você desejar na página Sistema, no Painel de Controle. Ele costuma funcionar, até travar todo o seu sistema sem nenhuma explicação, ou ser pego por alguma ferramenta de detecção que a Microsoft põe nas atualizações, e que você - tôlo ingênuo - instala confiante e feliz.

Pois aconteceu do Windows travar e levar meu PC junto. O sistema travava durante o boot corrompendo também as entradas de boot do GRUB, ou seja, nada de Ubuntu e nada de Windows 7, o que significa nada de computador, e sem computador eu sou um homem triste.

Reparando o boot do Windows:

Para corrigir o problema utilizei o disco de instalação do Windows, rodei as ferramentas de reparo (que de nada serviram) e após algum tempo usei o prompt para para executar o fixboot e o fixmbr, além de executar uma verificação de disco.

Pois bem, o fixmbr simplesmente sobrescreveu o MBR (Master Boot Record) do disco rígido - sim, eu sou um idiota -, sumindo com o GRUB e as entradas de boot do Ubuntu. Sem contar que o crack foi embora após a correção do erro e as petulantes mensagens de alerta de falsificação de software começaram a perturbar minha paz. Com isso resolvi sair da pirataria e adquirir - legalmente, é claro - uma chave de ativação do Windows. Não sou mais um pirata.

Reparando o boot do Ubuntu:

Para "reinstalar" o GRUB é necessário utilizar algum recurso que possibilite a execução da sua ferramenta de linha de comando. Para isto basta utilizar um LiveCD qualquer e através dele rodar o GRUB a partir de um emulador de terminal (como root, naturalmente). Contudo, os procedimentos abaixo funcionam apenas se a versão do GRUB for a legacy (0.97).

Basta seguir os seguintes procedimentos:
  1. Abra um terminal e como super usuário digite grub, o que fará com o que prompt grub> surja;
  2. Digite find /boot/grub/stage1. Isto retornará um valor semelhante a (hd0,0). Guarde este valor;
  3. Digite root (hd0,0). Onde (hd0,0) é o valor que foi descoberto no passo anterior (e.g.: (hd0,4));
  4. Digite setup (hd0,0). Lembre-se, o valor da partição (hd0,0) deve ser o mesmo retornado no segundo passo; 
  5. Digite quit.
Após isto, basta reiniciar o computador e ser feliz.

Mas este não foi o meu caso, pois desde o Ubuntu 9.04 a Cannonical resolveu adotar o GRUB 2 como bootloader padrão. E como essa nova versão é um GRUB completamente reescrito, com praticamente nada em comum com a versão legacy, é mais do que natural que eu não entenda nada de GRUB 2.

Posto isto, me utilizei do tradicional recurso da gambiarra para solucionar este certame entre mim e a máquina. Lembrei-me que há certo tempo atrás li este interessante artigo no GuiaDoHardware.net falando sobre um aplicativo capaz de configurar o bootloader do próprio Windows, é o bem quisto EasyBCD:

(clica que fica grande)

Após ter instalado o EasyBCD basta ir em Add New Entry e Selecionar a guia Linux/BSD, conforme mostrado abaixo:


Observe que em Type eu selecionei GRUB (Legacy), e é nisto que reside a gambiarra, pois ao rebootar o sistema a versão legacy será iniciada dando acesso à linha de comando e permitindo que o Ubuntu seja iniciado após algumas configurações. No campo Name digite qualquer coisa que achar conveniente e clique na caixa "GRUB isn't installed do MBR/bootsector" conforme a figura acima. Após isso vá em Edit Boot Menu, clique em Save Settings e reinicie o computador.

Quando o computador reiniciar surgirá a tela de seleção de boot do Windows, selecione a que foi adicionada pelo EasyBCD e espere o GRUB carregar. Após a carga do GRUB surgirão alguns alertas informando que alguns arquivos de configuração não foram encontrados, conforme a figura abaixo:


Ao pressionar qualquer tecla, surgirá a seguinte tela, contendo as atuais (e inválidas) entradas de boot:

O bonequinho na base do monitor é um power ranger verde. :)
Pressione e tecla 'c' para habilitar a linha de comando, conforme demonstra a figura:


Aqui começa a festa.
  • Primeiramente precisamos descobrir a partição onde está instalado o kernel, para fazê-lo basta digitar "find /vmlinuz" o que exibirá um valor que chamaremos de partição_do_kernel. 
  • Após isso digite "root partição_do_kernel", o que retornará algo semelhante a:
    1. grub> find /vmlinuz
    2.   (hd0,4)
    3. grub> root (hd0,4)
  • Se durante a instalação da sua distro não foi especificada nenhuma partição  específica para o boot digite:
    • kernel partição_do_kernel/(boot/nome_do_kernel root=partição_do_kernel_2
  •  O nome_do_kernel pode ser descoberto pressionando a tecla tab, que habilitará o recurso de autocompletar indicando os nomes possíveis. Portanto, basta simplesmente digitar "kernel partição_do_kernel/boot/vml" e pressionar tab. Observe a lista que surgirá e termine de digitar o nome do kernel instalado.
  • O parâmetro root=partição_do_kernel_2 indica a partição onde está instalado o kernel só que utilizando uma nomenclatura diferente da utilizada pelo GRUB. Neste caso o parâmetro informa qual a partição correta utilizando a formatação do próprio kernel Linux.

Onde:
  • sda = primeiro disco SATA;
  • sdb = segundo disco SATA;
  • sda1 = primeira partição do primeiro disco SATA;
  • hda = primeiro disco IDE;
  • hdb = segundo disco IDE;
  • hda1 = primeira partição do primeiro disco IDE.
Já o GRUB utiliza o seguinte formato:
  • (hd0) = primeiro disco;
  • (hd1) = segundo disco;
  • (hd0,0) = primeira partição do primeiro disco.
Logo, se com o find o valor retornado foi (hd0,4) o valor correspondente para o parâmetro root será /dev/sda5. Dev (de devices) é o diretório que contém os arquivos que apontam para os dispositivos do computador.

Após isso basta digitar boot e esperar o sistema iniciar.

Resumidamente, os comandos que executei foram:
  1. find /vmlinuz
  2. root (hd0,4)
  3. kernel (hd0,4)/boot/vmlinuz-2.6.32.25-generic root=/dev/sda5
  4. boot
Com o Ubuntu já iniciado basta utilizar algum aplicativo para reparar o MBR - sugiro o Startup Manager - salvar as configurações e rebootar o PC. Não esqueça de retirar a linha do bootloader do Windows adicionada pelo EasyBCD.

Aqui encerro a aula de GRUB for dummies, abraços.
Licença Creative Commons

Este blog é licenciado com a Licença Creative Commons - Atribuição - Uso Não Comercial - Obras Derivadas Proibidas 3.0 Não Adaptada.
Você pode reproduzir o conteúdo aqui encontrado, mas não pode vendê-lo ou alterá-lo.