10 de ago de 2009

Restaurando o Grub no Ubuntu e enganando o Windows

Segue a dica do Sr.Wander Barbato, publicado no site do Dicas-L.

Tenho um computador com dual boot há algum tempo (Ubuntu + Windows), porém faz uns 2 anos que não uso mais o Windows nele. No entanto, outro dia formatei (sem querer) a partição do Windows e, como estava precisando de um espaço para meu /home, resolvi montá-lo nesta "nova" partição :-)

Até aí tudo bem. Coloquei outro HD no micro e resolvi instalar o Windows, pois periodicamente preciso instalar e homologar alguns softwares "for Windows" que usamos na nossa instituição.

Como era de se esperar eu perdi meu Grub. Usei um Live CD do Ubuntu, conferi o arquivo de configuração do Grub e restaurei o mesmo (vide o artigo Como reinstalar ou restaurar o GRUB.

O problema é que o meu Ubuntu estava instalado no HD mestre (/dev/sda); já o Windows eu instalei no HD escravo (/dev/sdb). Descobri que o Windows só funciona se estiver instalado no primeiro HD (que maravilha, hein...).

Foi aí que descobri a opção map do Grub. No Grub, o primeiro HD é identificado por hd0, o segundo é identificado por hd1 e assim por diante. Na configuração do ponto de partida para o Windows (que está em hd1), eu acrescentei a linha de comando:

 
map (hd1) (hd0)

Dessa forma, quando é invocado o boot através do Windows, este comando mapeia hd1 em hd0, enganando o Windows.

Veja como ficou o meu arquivo de configuração do Grub (/boot/grub/menu.lst):

  
default 0
timeout 10
password --md5 senha_cifrada

# Boot pelo Linux
title Ubuntu 8.04
root (hd0,2)
kernel /boot/vmlinuz-2.6.24-24-generic root=/dev/sda3 ro quiet splash locale=pt_PT
initrd /boot/initrd.img-2.6.24-24-generic
quiet

# Boot pelo Windows
title Windows XP
rootnoverify (hd1,0)
map (hd1) (hd0)
makeactive
chainloader +1