Criando um disquete ou CD de recuperação do GRUB

Criando um disquete ou CD de recuperação do GRUB
O gerenciador de boot (boot loader) é o programa responsável de carregar o sistema operacional, permitindo escolher qual deles será inicializado, se mais de um estiver presente. No Kurumin (a partir da versão 7), como assim também no Ubuntu, Mandriva, Fedora, SuSE e na maioria das demais distribuições Linux ele é o GRUB (GRand Unified Boot loader).

O gerenciador de boot é um programa normalmente residente no setor de inicialização (boot sector) da partição ativa ou no registro principal de inicialização, o MBR (do inglês “Master Boot Record”), do disco rígido.

Problemas com o MBR tornam a inicialização de qualquer sistema inviável. Por exemplo, existem virus que atacam o MBR de maneira específica. Uma outra fonte de problemas, que aparece com frequência quando algum novo sistema operacional é instalado, consiste na sobrescrita do MBR.

O Windows não é o único sistema operacional que ao ser instalado sobrescreve ostensivamente o MBR. Isso acontece também com o Ubuntu, por exemplo. Contudo, existe uma grande diferença em cada um desses casos.

No Windows, qualquer referência a algum outro sistema operacional será completamente obliterada, embora tais sistemas possam continuar a existir fisicamente intactos no HD. A menos que alguma ação corretiva seja providenciada, não será mais possível dar boot com eles.

Já no Ubuntu, o registro dos outros sistemas operacionais previamente instalados vai ser preservado no arquivo de configuração do seu próprio gerenciador de boot, o que possibilita escolher qual de todos esses sistemas operacionais vai ser carregado na hora de inciar o computador (dual-boot):
index_html_3e763af6
Ainda que o Ubuntu possibilite o dual-boot, a sobrescrita do MBR pode gerar problemas. Com efeito, considere-se a seguinte situação, bastante comum na prática. Para simplificar suponha-se existir apenas um HD com duas partições, hda1 e hda2. Na primeira partição existe algum sistema operacional instalado, que pode ser qualquer um: Windows, Ubuntu, Kurumin, etc. Quando a nova versão do Ubuntu é lançada, você decide instalar ele na segunda partição hda2 “apenas para testar” se você gosta dessa nova versão ou não. Como foi dito antes, o Ubuntu vai sobrescrever o MBR, mas o sistema vai ficar em dual-boot. O problema aparece se você decidiu que não gosta daquela nova versão e, por esse ou algum outro motivo, resolve apagar completamente o conteúdo da segunda partição hda2. Nesse caso, da próxima vez que tentar dar boot, vai aparecer uma mensagem de erro logo no início, na tela do Grub.

Isso acontece porque o Ubuntu instalado em último termo (nem precisa ser a versão mais nova) aparentemente sempre instrui o GRUB do MBR para procurar as configurações do sistema na mesma partição onde ele foi instalado, no caso do exemplo na hda2 cujo conteúdo foi completamente removido. Nesse ponto, também não será mais possível inicializar o sistema a menos que alguma ação corretiva seja providenciada.

Diga-se de passagem que o Kurumin é uma distribuição que não agride o MBR dessa maneira, pois durante a instalação no HD ele reserva a instalação do gerenciador de boot no MBR apenas como opção para o usuário decidir. Na minha opinião, isso é um ponto muito positivo a favor do Kurumin. Com tantas distribuições GNU/Linux que já existem e que alguem gostaria testar, além das novas que continuam a aparecer, mais as versões novas daquelas já conhecidas que aparecem periodicamente (a cada 6 meses no caso do Ubuntu), ficar instalando e removendo distribuições da maneira descrita no exemplo acima pode converter-se em uma prática bastante frequente e ninguém quer o MBR bagunçado dessa maneira.

O que fazer quando, pela sobrescrita ou por algum outro motivo, o GRUB no MBR resulta danificado? Existem diversas alternativas:

  • Usar o grub-install

Após dar boot com um live-CD (preferentemente aquele da distribuição que está tentando recuperar), abra um terminal e digite o comando:

# grub-install /dev/hda

por exemplo, se você deseja restaurar o grub no MBR do hda. No entanto, isso não é sempre que funciona. Se esse for o caso, você pode seguir o seguinte método alternativo. No terminal aberto digite o comando:

$ grub

Isso vai abrir dentro do mesmo terminal um outro interpretador de comandos (shell), só que exclusivo do GRUB. Essa “shell do GRUB” diferencia-se facilmente da Bash ou qualquer outra “shell do Linux” por causa do seu prompt, que tem o seguinte aspecto:

grub>

Uma vez dentro da shell do Grub, para reinstala-lo digite os seguintes
comandos:

grub> root (hd0,0)
grub> setup (hd0)

Para sair da shell do grub digite:

grub> quit

Os detalhes você pode conferir em um par de excelentes guias do GdH sobre o assunto:

1) Configurando o grub.
https://www.hardware.com.br/dicas/configurando-grub.html

2) Instalando o Grub GFXBoot.
https://www.hardware.com.br/dicas/instalando-grub-gfxboot.html

  • Restaurar a MBR a partir de um backup prévio

Se antes do problema acontecer você teve a precaução de fazer um backup do MBR, então pode entrar com um CD ao vivo e restaurar o MBR a partir do seu backup.

Os detalhes você pode conferir também em um outro guia do GdH sobre o assunto:

3) Fazendo backup e recuperando a MBR e tabela de partições.
https://www.hardware.com.br/dicas/fazendo-backup-recuperando-mbr-tabela-particoes.html

Os métodos descritos acima baseiam-se em dar boot com um live-CD. Isso pode ser um processo bastante demorado. Na verdade, no live-CD você tem muito mais do que precisa para apenas restaurar o gerenciador de boot.

Uma solução alternativa, que torna o boot muito mais rápido consiste em
inicializar o sistema com um disquete ou CD contendo apenas uma cópia
do Grub. Como fazer isso, é a matéria do presente guia.

Criar um disquete com a shell do GRUB

Uma solução consiste em criar um disquete apenas contendo uma cópia da shell do grub. Para isso, basta entrar em um terminal e digitar os comandos:

# dd if=/usr/lib/grub/i386-pc/stage1 of=/dev/fd0 bs=512 count=1
# dd if=/usr/lib/grub/i386-pc/stage2 of=/dev/fd0 bs=512 seek=1

Nas versões antigas do Grub (por exemplo a fornecida com o Ubuntu 6.06) os arquivos copiados estão localizadas em um local diferente e você precisaria digitar:

# dd if=/lib/grub/i386-pc/stage1 of=/dev/fd0 bs=512 count=1
# dd if=/lib/grub/i386-pc/stage2 of=/dev/fd0 bs=512 seek=1

Na verdade, você não precisa se preocupar com isso, pois o GRUB possui uma ferramenta própria que faz o mesmo serviço. Basta digitar o comando:

$ grub-floppy /dev/fd0

Obviamente, para todo isso funcionar você deve ter fornecido antes um disquete no driver especificado no argumento desses comandos, o /dev/fd0 em todos os exemplos acima.

Dando boot com o disquete assim criado colocado no drive, você vai cair logo na shell do grub. Essa solução, embora viável, não é muito prática, principalmente para usuários iniciantes ou com pouca familiaridade com os comandos na shell do GRUB. Mesmo que esse não seja seu caso, você ainda vai precisar lembrar exatamente das seguintes informações:

  • Os nomes das partições e “traduzi-las” para a sintaxe do grub;
  • Os nomes das imagens de boot (kernel e initrd, se houver);
  • As opções para o kernel, se houver; etc. para fornece-las na shell do grub.

Para carregar o Kurumin 7 na primeira partição do primeiro HD, por exemplo, do jeito que ele está configurado no menu.lst, seria necessário digitar os seguintes comandos na shell do grub:

grub> root (hd0,0)
grub> kernel /boot/vmlinuz-2.6.18.1-slh-up-2 ro nomce quiet apm=power-off vga=791
grub> boot

Se você tiver algum sistema operacional residente em outra partição, digamos na hda5 que na linguagem do GRUB seria (hd0,4), e supondo que esse outro sistema operacional tiver o seu próprio gerenciador de boot instalado no setor de boot *da partição* hda5 (e não no MBR do HD, que está danificado, segundo a nossa hipótese de trabalho), então você poderia dar boot nesse segundo sistema alternativo diretamente a partir da shell do Grub de maneira um pouco mais simples:

grub> root (hd0,4)
grub> chainloader +1
grub> boot

Isso vai redirecionar o Grub “do disquete” para o Grub que sobrevive intacto no setor de boot da partição hda5 ou (hd0,4), no caso do exemplo acima, para que ele faça todo o trabalho de inicialização do sistema. Observe-se que nesse caso você não precisa se preocupar mais com as images de boot, opções para o kernel, etc., nada disso, pois o Grub da partição já sabe disso. Se sistema alternativo for o Windows, você teria que digitar alguns comandos adicionais, dependendo de onde ele estiver instalado, mas a idéia é a mesma. Vide para os detalhes.

Criar um disquete ou CDROM de recuperação do GRUB

Esta segunda solução alternativa, além do acesso à shell do Grub, acrescenta suporte ao arquivo de configuração do Grub, o famoso arquivo “menu.lst”. Isso permite criar uma mídia (floppy disk ou CDROM) bootable com um comportamento muito parecido ao do Grub originalmente instalado no MBR do HD.

Esta solução requer um pouco mais de trabalho, mas, na minha opinião, resulta bem mais satisfatória e compensa em termos de custo/benefício. Esta dica consta no Guia Foca GNU/Linux, Capítulo 6 “Gerenciadores de Partida” (de passagem, trata-se de um excelente guia, na minha opinião, de leitura recomendável, em português).

A idéia é muito simples: dado que o floppy disk é reconhecido pelo Grub como mais um dispositivo de bloco (block device), a mesma instalação do Grub feita no MBR do HD você pode repetir no setor do boot do disquete.

Como na prática isso pode resultar um tanto complicado, o processo será divido nas seguintes etapas:

1) Coloque um disquete no drive. Ao longo deste exemplo vamos supor que o drive utilizado é identificado pelo sistema como o dispositivo /dev/fd0. Use um disquete em boas condições, sem conteúdo nenhum ou com dados que você não se importe em perder, pois o disquete será reformatado. O ideal para essa tarefa consiste em usar um disquete novo.

2) Reformate o disquete criando um sistema de arquivos Ext2:

mke2fs -q -L Grub_Recovery /dev/fd0

A opção “-q” (de “quiet”, sigiloso, sossegado) é suportada por muitos comandos e ela simplesmente instrui o comando para fazer o seu trabalho sem reportar nenhuma mensagem nem escrever nada no terminal. Isso é muito útil quando o comando é usado em modo “não-interativo” por assim dizer, por exemplo, dentro de um shell script. No presente caso, a opção -q pode ser omitida sem problema nenhum, se você confia no bom estado da mídia fornecida. Caso contrário, você não vai conseguir visualizar mensagens de erro.

A opção “-L Grub_Recovery” simplesmente define um Label para o disquete. Ela também pode ser omitida sem problema nenhum. Se desejar, você pode trocar o string “Grub_Recovery” pelo nome da sua preferencia, mas o label será truncado para os primeiros 16 caracteres se você usar um nome mais longo do que isso.

Ao reformatar, nunca está demais lembrar que:

  • O dispositivo deve estar desmontado.
  • Todos os dados que porventura estejam contidos no disquete serão perdidos definitivamente.

3) Após ter sido reformatado com sucesso, monte o disquete. No Kurumin (versão 7.0b6 light) você precisa executar o seguinte comando:

$ sudo mount -t ext2 /dev/fd0 /mnt/floppy

Isso é assim de complicado, pois o dispositivo /dev/fd0, correspondente à primeira unidade de disquete, aparece no arquivo /etc/fstab com a especificação “vfat” no campo correspondente ao sistema de arquivos e você precisa montar agora um disquete cujo sistema de arquivos é “ext2” em lugar de vfat.

Digressão: Se desejar, você pode mudar esse comportamento, trocando a linha:

/dev/fd0 /mnt/floppy vfat users,rw,noauto 0 0

no arquivo /etc/fstab pela seguinte nova linha:

/dev/fd0 /mnt/floppy auto users,rw,noauto 0 0

Observe-se que a única mudança foi a troca do “vfat” no terceiro campo, correspondente ao sistema de arquivos, pela especificação “auto”, no caso da segunda linha. Com isso, você vai poder montar sempre qualquer disquete sem precisar se preocupar se o sistema de arquivos no mesmo é vfat ou ext2. Basta apenas dar o comando:

$ mount /dev/fd0

4) Copie os arquivos convenientes nos lugares certos:

# mkdir /mnt/floppy/grub
# cp /boot/grub/stage[12] /mnt/floppy/grub/
# cp /boot/grub/menu.lst /mnt/floppy/grub/

O ponto de montagem /mnt/floppy pode variar de acordo com seu sistema. Ao longo de todo o presente guia, será adotado como exemplo o padrão do Kurumin 7, salvo indicação explícita em contrário.

5) Desmonte o disquete:

$ sudo umount /dev/fd0

Se você modificou o arquivo fstab na forma indicada acima, o “sudo” no comando acima pode ser omitido.

6) Esta é a etapa crítica de todo o processo: no terminal de caracteres, abra uma instância da shell do Grub digitando o comando:

$ grub

Você vai ver que aparece o prompt “grub>” dentro do mesmo terminal. Para
instalar o Grub no disquete, dentro da shell do Grub digite:

grub> install (fd0)/grub/stage1 d (fd0) (fd0)/grub/stage2 p (fd0)/grub/menu.lst

Tudo deve formar apenas uma *única* linha de comando. Tome extremo cuidado para não cometer erros de digitação, pois eles podem ser fatais, principalmente se errar no “fd0”. Se desejar, você pode copiar a linha acima colorizando ela com o botão esquerdo do mouse e depois colar ela na janela do grub apenas clicando no botão do meio do mouse. Quando tiver absoluta certeza que o comando foi corretamente digitado ou copiado, aperte “Enter”.

Fique atento para possíveis mensagens de erro na shell do GRUB. Se não aparecer nenhum, então o disquete de recuperação terá sido criado com sucesso.

Depois que o comprido comando acima tenha sido processado, você verá o prompt “grub>” voltar na shell do Grub. Digite:

grub> quit

… e aperte “Enter” para sair dela.

Da próxima vez que tiver algum problema com o grub no HD, reinicie o micro com o disquete de recuperação colocado no drive.

A mídia magnética do disquete é extremamente pouco confiável. Ela degrada-se rapidamente com o uso, e isso acontece mais rápido do que você imagina.

Criar um CDROM de recuperação seria a solução ideal nesse caso, desde que você não se importe em queimar um CD de 700MB para gerar uma cópia bootable de 250KB contendo apenas o Grub. O preço de um CD não é tão caro assim, e também sempre existe a possibilidade de você acrescentar mais itens: um kernel do Linux, um bom programa particionador, ferramentas de diagnóstico para HD, etc, e montar seu próprio kit de recuperação completo. Você pode encontrar muitas alternativas criativas, usando as dicas do GdH por exemplo 😉

Contudo, uma coisa assim pode chegar a ser mais onerosa em termos de horas de trabalho, além do fato que, se acrescentar coisas de mais você vai estar de fato recuperando o sistema tendo que dar boot com seu novo CD ao vivo, etc., voltando assim ao ponto de partida.

Para criar um CD de recuperação do Grub existem também várias alternativas:

  • Usar o grub-disk

Nos repositórios do Ubuntu existe um pacote denominado “grub-disk”. Ele fornece uma imagem Ext2 para um disquete e uma imagem ISO 9660 para um CD de recuperação do Grub.

O pacote fornece apenas as imagens. Não existe nem sequer um comando executável denominado grub-disk, por exemplo.

Depois de ter que pensar onde elas foram instaladas, você terá que abrir essas imagens e substituir o arquivo de configuração “genérico” fornecido no pacote, pelo arquivo menu.lst instalado no seu próprio sistema. Caso contrário, não adianta de muito gerar a mídia bootable com tais imagens.

Fazendo várias tentativas, posso dizer que: gerar o disquete a partir da imagem ext2 não é recomendável, principalmente se o disquete não estiver em boas condições e for relativamente novo. Mesmo assim, o disquete gerado com a imagem ext2 do grub-disk pode resultar simplesmente inoperável na hora do boot. Já o processo descrito na seção anterior para criar um floppy disk de recuperação do Grub deu resultado sempre, mesmo com um disquete quase nas últimas.

  • Usando o gruby

O processo de abrir as imagens, substituir o arquivo de configuração, fechar outra vez e gerar a mídia bootable, embora não seja um processo complicado tecnicamente, pode demandar algo de tempo.

Existe, porém, um outro programa que faz todo isso: gera as novas imagens com o menu.lst instalado no seu sistema, além de gravar a mídia, automatizando completamente o processo de criação do disquete ou CD de recuperação do grub.

Uma vez instalado o pacote, basta colocar a mídia alvo no seu respectivo driver e digitar o comando:

$ gruby

Testei ele no Kurumin 7 e resultou bastante eficiente, tanto para a criação do disquete quanto o CD. A mídia gerada sempre conseguiu carregar o Grub e dar boot no micro. A única observação no caso do CD, é que a tela inicial do gfxboot não entrou, mas apenas o menu normal do Grub. Achei um tanto estranho, pois com disquete entra a imagem inicial do gfxboot inclusive. De qualquer maneira, tanto o disquete como o CD gerado conseguem dar boot muito bem.

O gruby consegue exibir mensagens em português e funciona igualmente bem no KDE ou no Gnome. Funciona também em modo texto, desde que seja rodado com a opção “-t”. Você pode obter o gruby aqui: http://www.uspleste.usp.br/auil/kurumix/kurumix.html

Considerações Finais

Criando mídia bootable de recuperação do Grub você pode inicializar o micro bem mais rápido do que entrando pelo live-CD. Também não precisa ficar horas a fio sem acesso ao computador e tentando descobrir o significado daquela enigmática mensagem “Error 15: File not found” logo no inicio do boot.

Contudo, usar o Grub a partir do disquete ou CD é apenas uma solução precária, que deve ser usada apenas para quebrar um galho em caso de urgência ou extrema necessidade. Simplesmente, não é assim que as coisas funcionam.

O Grub instalado no HD deve inicializar o sistema corretamente. Se não faz isso, tem algo errado, que pode ser sintoma de um problema maior ainda, e que precisa ser corrigido.

Se você teve de recorrer à mídia de recuperação do Grub, tente detectar a causa do problema e providenciar uma solução o mais brevemente possível.

Sobre o Autor

Redes Sociais:

Deixe seu comentário

X