Com exceção do Slackware, que continua a utilizar o Lilo devido à
simplicidade, praticamente todas as outras distribuições migraram para o
Grub ao longo da década passada. O Grub é um gerenciador de boot bem
mais moderno, que oferece mais opções e remedia muitas das limitações do
antigo Lilo.
Conforme os PCs foram avançando, entretanto, mesmo o Grub começou a
parecer antiquado em algumas situações, levando surgimento do Grub 2, um
sucessor modular que se tornou o gerenciador default no Ubuntu a partir
do 9.10 e aos poucos vem sendo adotado também em outras distribuições. O
gerenciador de boot é um componente tão importante do sistema que vale a
pena estudar um pouco sobre ele para ser capaz de solucionar problemas.
Já vimos detalhes sobre a configuração do Lilo e do Grub, vamos agora
conhecer um pouco sobre o Grub 2.
Com o lançamento do Grub 2, o Grub original passou a ser chamado de
"Grub Legacy". Ele continua sendo mantido, mas vem recebendo basicamente
correções de bugs. O desenvolvimento de novas funções passou a ser
concentrado no Grub 2. Você pode checar qual versão está sendo usada
usando o comando "grub-install -v":
$ grub-install -v
grub-install (GRUB) 1.99-18ubuntu1
Neste caso estou rodando a versão 1.99-18, que é a versão usada por
default no Ubuntu 12.04. As versões do Grub original vão até a 0.97,
enquanto o Grub 2 começa a partir da 1.98.
O Grub 2 trás vários novos recursos, incluindo a possibilidade de
carregar módulos para acesso a diferentes sistemas de arquivos,
possibilidade de personalização através de shell-scripts, bem como o uso
de temas visuais e assim por diante. Ele é capaz até mesmo de
inicializar imagens ISO de distribuições Live-CD ou outros sistemas
diretamente a partir do HD, sem que você precise gravá-las num CD ou
pendrive. Como sempre, ms recursos significam uma configuração mais
complexa, o que faz com que, embora bem organizado, os recursos do Grub 2
acabem sendo mais difíceis de dominar.
No Grub 2, o arquivo "/boot/grub/menu.lst" de lugar ao
"/boot/grub/grub.cfg". Entretanto, este é um arquivo gerado como produto
da execução de diversos scripts situados na pasta "
/etc/grub.d/"
que são executados ao instalar ou atualizar o Grub 2 e, diferente do
menu.lst, nunca deve ser editado manualmente. O arquivo editável de
configuração passou a ser o "
/etc/default/grub/", onde
vão as preferências e configurações pessoais, que são salvas no
/boot/grub/grub.cfg quando as alterações são aplicadas. Tudo isso é lido
pelo sistema ao executar o comando "sudo update-grub", que se encarrega
de executar todos estes scripts e configurações, gerando o arquivo
/boot/grub/grub.cfg e instalando os outros componentes do grub.
Para entender melhor como funciona este processo de geração, o primeiro passo é dar uma olhada no conteúdo da pasta
/etc/grub.d:

Como pode ver, esta pasta é populada por vários scripts, numerados
sequencialmente. Sempre que o update-grub é executado, estes scripts são
executados na ordem em que são numerados, fazendo com que um novo
arquivo /boot/grub/grub.cfg seja gerado e a configuração atualizada.
Este é mais um motivo para que você não perca tempo tentando editar este
arquivo diretamente, já que além de muito complexo, qualquer
configuração feita nele será perdida ao atualizar a configuração do
Grub. A ideia é exatamente que a configuração seja gerada e atualizada
automaticamente, aplicando as suas configurações, definidas no
/etc/default/grub.
O primeiro script, o "00_header" lê as variáveis de ambiente e ajusta
vários parâmetros e configurações, preparando o terreno para a execução
dos outros scripts. O seguinte é o "05_debian_theme", que aplica o tema
visual, carregando a imagem de background, definindo as cores do menu e
assim por diante.
Os demais scripts são dedicados à detecção e inserção dos diferentes
sistemas operacionais, gerando a lista que permite escolher qual usar
durante o boot. O "10_linux" adiciona as entradas do sistema principal,
incluindo as diferentes versões do kernel que estejam instaladas. O
"10_linux_xen" faz o mesmo com versões do kernel com suporte ao Xen
(caso alguma esteja instalada). O "20_memtest86+" adiciona a entrada do
Memtest, enquanto o "30_os-prober" detecta e adiciona entradas para
outros sistemas operacionais instalados, incluindo o Windows. Os dois
últimos, "40_custom" e "41_custom" são dedicados à inserção de scripts
personalizados com outras funções que você queira executar.
A ordem com que as diferentes entradas aparecem na tela de boot é
definida pela ordem com a qual estes scripts são executados. Ao rodar o
"sudo update-grub " neste PC, por exemplo, obtenho:
$ sudo update-grub
Generating grub.cfg …
Found background image: /usr/share/images/desktop-base/desktop-grub.png
Found linux image: /boot/vmlinuz-3.2.0-21-generic
Found initrd image: /boot/initrd.img-3.2.0-21-generic
Found linux image: /boot/vmlinuz-3.2.0-19-generic
Found initrd image: /boot/initrd.img-3.2.0-19-generic
Found memtest86+ image: /boot/memtest86+.bin
Found Windows 7 (loader) on /dev/sda2
done
Veja que ele inclui um total de 4 entradas: duas para o sistema
principal (incluindo uma versão antiga do kernel que ainda está
instalada), uma para o Memtest e outra para uma cópia do Windows 7
esquecida em uma partição no início do HD.
Se retiro a permissão de execução do script do Memtest (chmod -x
/etc/grub.d/20_memtest86+), fazendo com que ele deixe de ser executado,
as outras entradas continuarão sendo adicionadas, mas o Memtest será
deixado de fora:
$ sudo chmod -x /etc/grub.d/20_memtest86+
$ sudo update-grub
Generating grub.cfg …
Found background image: /usr/share/images/desktop-base/desktop-grub.png
Found linux image: /boot/vmlinuz-3.2.0-21-generic
Found initrd image: /boot/initrd.img-3.2.0-21-generic
Found linux image: /boot/vmlinuz-3.2.0-19-generic
Found initrd image: /boot/initrd.img-3.2.0-19-generic
Found Windows 7 (loader) on /dev/sda2
done
Caso renomeie o script "30_os-prober", para "09_os-prober" (fazendo
com que ele seja executado antes do "10_linux" que adiciona as entradas
referentes ao Linux) faço com que o Windows apareça no topo da lista:
$ sudo mv 30_os-prober 09_os-prober
$ sudo update-grub
[sudo] password for gdh:
Generating grub.cfg …
Found background image: /usr/share/images/desktop-base/desktop-grub.png
Found Windows 7 (loader) on /dev/sda2
Found linux image: /boot/vmlinuz-3.2.0-21-generic
Found initrd image: /boot/initrd.img-3.2.0-21-generic
Found linux image: /boot/vmlinuz-3.2.0-19-generic
Found initrd image: /boot/initrd.img-3.2.0-19-generic
done
Da mesma forma, é possível editar o conteúdo dos scripts ou adicionar
outros que executem funções adicionais. Esta acaba sendo a principal
vantagem do Grub 2 e o grande motivo da mudança.
Como pode imaginar, a melhor forma de adicionar entradas
personalizadas no menu do grub, sem depender da detecção automática é
adicionar as instruções desejadas no final do arquivo
"/etc/grub.d/40_custom", o que faz com que a sua entrada personalizada
apareça no final da lista.
Basta adicionar as entradas da forma como quer que elas sejam
incluídas no arquivo, após a linha "exec tail -n +3 $0" dentro do
arquivo. Para adicionar uma entrada que carrega o Windows em chainload
(como a que vimos no capítulo sobre o Mandriva), por exemplo, você
adicionaria as seguintes linhas ao arquivo "40_custom":
menuentry "Windows 7 em chainload" {
set root=(hd0,1)
chainloader +1
}
A linha "set root=(hd0,1) " especifica qual é a partição. Uma
diferença entre o Grub 2 e o Grub antigo é que no Grub 2 as partições
são numeradas a partir do 1 (e não mais a partir do zero), de forma que
"set root=(hd0,1) " especifica que o Windows está instalado na primeira
partição do HD.
Para que seja adicionada uma entrada para o boot de uma imagem ISO
localizada em uma partição do HD (que é uma das possibilidades
interessantes do novo grub), você adicionaria as linhas a seguir no
"40_custom"
menuentry "ISO do Ubuntu" {
loopback loop (hd0,1)/home/gdh/ubuntu.iso
linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=home/gdh/ubuntu.iso noprompt noeject quiet splash
initrd (loop)/casper/initrd.lz
}
Veja que esta entrada já é mais complicada, especificando a partição
do HD onde está o ISO, como em "(hd0,1)", que se refere à primeira
partição do primeiro HD e o caminho para o arquivo dentro da partição
(/home/gdh/ubuntu.iso). A linha "linux..." inclui opções diversas para
que o sistema inicialize através do CD; veja que ela inclui novamente a
localização do arquivo dentro da partição.
Incluindo as duas entradas, seu arquivo "/etc/grub.d/40_custom"
ficaria como o a seguir e depois de executar o "sudo update-grub" você
veria as duas novas entradas no final da lista.
#!/bin/sh
exec tail -n +3 $0
# This file provides an easy way to add custom menu entries. Simply type the
# menu entries you want to add after this comment. Be careful not to change
# the 'exec tail' line above.
menuentry "Windows 7 em chainload" {
set root=(hd0,1)
chainloader +1
}
menuentry "ISO do Ubuntu" {
loopback loop (hd0,1)/home/gdh/ubuntu.iso
linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=home/gdh/ubuntu.iso noprompt noeject quiet splash
initrd (loop)/casper/initrd.lz
}
É importante enfatizar que o boot de imagens ISO só funciona em
distribuições Linux que suportem a inicialização a partir do ISO (o que
inclui a grande maioria dos live-CDs atuais). Devido a esta dependência
de suporte por parte do hóspede, esta função não funciona para dar boot
em ISOs com outros sistemas operacionais, incluindo imagens de
instalação do Windows.
Em seguida, temos o arquivo "
/etc/default/grub" que concentra muitas das opções que no Grub legacy estão concentradas no menu.lst. A primeira delas é a linha "
GRUB_DEFAULT", que permite definir qual será o sistema inicializado por padrão. Por default a linha é:
GRUB_DEFAULT=0
… o que faz com que o primeiro sistema operacional da lista seja
inicializado por default. Se você quer que o sistema da quarta entrada
da lista passe a ser o default, você trocaria o valor para "3"
(lembre-se, os sistemas são contados a partir do zero, o que faz com que
a quarta linha seja "3" e assim por diante:
GRUB_DEFAULT=3
Você pode também alterar esta configuração diretamente a qualquer
momento, sem precisar editar o arquivo e rodar o update-grub usando o
comando "grub-set-default", como em:
$ sudo grub-set-default 3
A linha "
GRUB_TIMEOUT=10" especifica o tempo de
espera antes de inicializar o sistema default (em segundos). Por default
são 10 segundos, mas você pode aumentar ou reduzir o valor como
desejado. O valor "0" faz com que o boot ocorra imediatamente, sem a
exibição do menu (nesse caso é necessário manter a tecla Shift
pressionada das vezes que você queira que o menu seja exibido), enquanto
o valor "-1" faz com que ele espere indefinidamente.
É possível também fazer com que o grub espere um tempo especificado
porém sem exibir o menu de seleção, o que é útil em casos em que o micro
for usado por outras pessoas e você não quer que elas vejam os outros
sistemas instalados. Nesse caso o grub espera o tempo especificado, em
segundos, mas você vê a tela de seleção apenas caso pressione a tecla
Shift dentro do tempo especificado, como em:
GRUB_HIDDEN_TIMEOUT=5
Em seguida temos a opção "
GRUB_CMDLINE_LINUX_DEFAULT", que permite inserir parâmetros a serem passados para o kernel, como o noapic, noacpi, nolapic, etc., como em:
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
Ela é usada em conjunto com a opção "GRUB_CMDLINE_LINUX". Estas duas
opções existem por que o grub adiciona duas entradas para cada versão do
kernel encontrada, uma para boot normal e outra para o modo de
recuperação. A opção "GRUB_CMDLINE_LINUX_DEFAULT" inclui parâmetros que
são passados ao kernel apenas durante um boot normal, enquanto a
"GRUB_CMDLINE_LINUX" inclui opções que são passadas em ambos os casos.
Como pode ser, as duas opções existem exatamente para permitir que as
opções do modo de recuperação sejam diferentes.
Se você nunca usa as entradas de recuperação e quer desativá-las para
gerar uma lista com menos entradas e consequentemente mais organizadas,
adicione (ou descomente) a linha "
GRUB_DISABLE_RECOVERY", configurando-a com o valor true:
GRUB_DISABLE_RECOVERY="true"
Se você quiser desabilitar o script 30_os-prober, desabilitando a
detecção de outros sistemas operacionais instalados, pode adicionar a
linha "GRUB_DISABLE_OS_PROBER=true".
Outra configuração que pode ser útil em algumas situações é a
"GRUB_INIT_TUNE", que toca um beep no início da exibição do menu do
grub. Ela é útil no caso de deficientes visuais, que precisam de uma
notificação audível para poderem escolher o sistema, bem como para
desatentos:
GRUB_INIT_TUNE="480 440 1"
Esta opção pode ser usada para incluir músicas inteiras (experimente
por exemplo: GRUB_INIT_TUNE="480 900 2 1000 2 800 2 400 2 600 3"), mas
tenha em mente que a soneta vai atrasar a exibição do menu.
Lembre-se de sempre executar o comando "
sudo update-grub"
ao fazer alterações, do contrário elas não entrarão em vigor. Caso ele
retorne algum erro, verifique a configuração e tente solucionar o
problema antes de reiniciar o micro, caso contrário o grub pode ficar em
um estado não-funcional, dificultando ou impossibilitando o boot.
Concluindo, caso o grub seja danificado e o sistema deixe de inicializar, você pode recuperá-lo seguindo as instruções a seguir:
a) Dê boot usando o live-CD do Ubuntu, executando um boot normal do sistema
b) Rode o comando "sudo fdisk -l" para verificar quais são as partições do HD. Verifique qual é a partição do sistema.
c) Monte a partição em uma pasta. Se a partição é a "/dev/sda1", por exemplo, os comandos seriam: sudo mkdir /mnt/sda1; sudo mount /dev/sda1 /mnt/sda1
d) Use o gerenciador de arquivos para checar o conteúdo da pasta e ver se esta é mesma a partição de instalação do sistema.
e) Reinstale o grub, especificando o
diretório onde a partição do sistema foi instalada. Como estamos
instalando o grub no gerenciador de boot, especificamos o device do HD
(e não da partição). Veja que o comando usa a opção "--root-directory",
que especifica a pasta onde a partição foi montada: sudo grub-install --root-directory=/mnt/sda1 /dev/sda
f) Verifique a saída do comando. Se houver
algum erro, verifique os arquivos de configuração para localizar o
problema (em geral será alguma entrada personalizada adicionada por
você). Verifique se os arquivos não foram perdidos ou corrompidos (você
pode restaurá-los a partir de outra máquina, ou do próprio CD caso
esteja dando boot na mesma versão do sistema que está instalada).
f) Desmonte a partição e reinicie o micro: sudo umount /mnt/sda1; reboot
Em casos em que você precise restaurar o boot de uma instalação do
Windows no HD, que deixou se ser inicializável depois de remover uma
distribuição Linux instalada no HD, você pode usar o Lilo para regravar o
MBR, removendo o grub e permitindo que o Windows volte a inicializar.
Depois de dar boot com o Live-CD do Ubuntu, instale o pacote via apt-get
e use o comando "lilo -M", especificando o device do HD e o parâmetro
"MBR" para que ele seja gravado:
$ sudo apt-get update; sudo apt-get install lilo
$ sudo lilo -M /dev/sda mbr
obtido de:
http://www.hardware.com.br/tutoriais/ubuntu-entendendo-configurando-grub2/dicas-recuperacao-solucao-problemas.html