Problema no GRUB no Debian Squeeze 6.0.7 [Resolvido]

Resolvendo o problema no GRUB: "Error: file not found. Error: you need to load the kernel first. Press any key to continue..." (Erro: arquivo não encontrado. Erro: você precisa carregar o kernel primeiro. Pressione qualquer tecla para continuar...).

[ Hits: 15.686 ]

Por: Buckminster em 03/04/2013


Corrigindo o problema



Error: file not found
Error: you need to load the kernel first
Press any key to continue...

Traduzindo:

Erro: arquivo não encontrado
Erro: você precisa carregar o kernel primeiro
Pressione qualquer tecla para continuar...

Esse problema é causado pelo fato de que o GRUB (gerenciador de boot) reconheceu o outro sistema durante a instalação, mas perdeu o caminho da imagem do kernel e do initrd (/boot/vmlinuz-x.x e /boot/initrd.img-x.x).

O por quê de isso acontecer, encontramos no manual do GRUB:
"O GRUB tem dois métodos distintos de inicialização: carregar um sistema operacional diretamente e carregar outro gerenciador de bootm que por sua vez, irá carregar o sistema operacional. O primeiro é mais desejável, no entanto, o outro método é necessário às vezes já que o GRUB não suporta nativamente todos os sistemas operacionais existentes."

O procedimento normal de inicialização do GRUB envolve a configuração da variável de ambiente 'prefix' para um valor definido na imagem do kernel pela execução de 'grub-install' que seta a variável 'root' para carregar o módulo 'normal' a partir de 'prefix' e executar o comando 'normal'.

Este comando é responsável por ler o /boot/grub/grub.cfg e fazer com que o GRUB funcione. Se em vez disso você tem somente um shell de resgate, significa que o GRUB não conseguiu carregar o módulo 'normal'...

A ordem de inicialização do drive do sistema operacional pode não ser a mesma que a ordem de boot utilizada pelo firmware. Não se deve assumir que o primeiro disco rígido (por exemplo, /dev/sda) é o mesmo que o firmware irá carregar... O melhor é usar UUIDs ou rótulos do sistema de arquivos. Se instalar o GRUB numa partição, mas o GRUB já estiver instalado no MBR, a instalação na partição será ignorada.

É melhor evitar a instalação do GRUB numa partição (a menos que seja uma partição especial para o GRUB sozinho, como a partição de inicialização do BIOS usada em GPT). Instalar na partição significa que o GRUB pode deixar de ser capaz de ler a imagem do kernel devido ao sistema de arquivos mover seus blocos, como durante a desfragmentação ou fazendo checagens. É mais robusto instalar no disco todo.

O GRUB não é capaz de ler a partir de dispositivos criptografados e nem a partir de sistemas de arquivos para os quais o suporte ainda não foi adicionado a ele."

Trocando em miúdos, toda instalação GNU/Linux sempre vai pedir a instalação de um gerenciador de boot, no caso, o GRUB, e o GRUB nem sempre vai reconhecer o outro gerenciador de boot, no caso, o GRUB de outra instalação, e você deverá configurá-lo manualmente.

Ainda, na instalação de mais de um sistema operacional no mesmo HD ou em dois HDs, o firmware de um HD pode querer inicializar antes de um sistema que estiver marcado para inicializar por primeiro no GRUB, e você deverá configurar o GRUB manualmente de novo.

No meu caso, em especial, o que houve foi que o GRUB se confundiu com o UUID do HD, pois teve duas instalações no mesmo HD e com a mesma versão do mesmo sistema operacional.

Onde conclui-se: o melhor e mais aconselhável é ter somente um GNU/Linux em um HD para evitar problemas. Ou, no máximo, o GNU/Linux e o Windows em dual-boot.

Eu mesmo já instalei seis sistemas operacionais em um mesmo HD: cinco GNU/Linux e um Windows, e mais dois kernels compilados. Foi por questões de estudo. Mas foi a mesma coisa que pedir para se incomodar.

Dois Squeeze no mesmo HD: fiz a instalação do primeiro sistema com sete partições (/boot[no MBR], /[raiz], /usr, swap, /tmp, /var e /home com /boot como ext3 e as demais como ext4).

Na instalação do segundo sistema, escolhi a opção "Particionar o espaço livre restante contínuo" com as partições raiz, /usr, /var, /tmp e /home com ext4. O GRUB foi instalado no MBR nas duas instalações. A instalação da segunda, logicamente, sobrescreveu a instalação da primeira. O HD tem 500 GB, cortei bem no meio.

Entrei no sistema que não estava dando erro e fiz o seguinte, como root:

# fdisk -l  #Para ver as partições

O GRUB que estava inicializando, estava em /dev/sda11 (marcado com um asterisco *). A partição raiz do sistema que estava dando erro na inicialização estava em /dev/sda5.

Entrei em /etc/grub.d/40_custom:

# vim /etc/grub.d/40_custom

E acrescentei o seguinte no final do arquivo de poucas linhas:

menuentry "Debian" {
     set root=(hd0,msdos11)
     linux /boot/vmlinuz-2.6.32-5-amd64 root=/dev/sda5 ro quiet
     initrd /boot/initrd.img-2.6.32-5-amd64
}


Salvei e saí. Depois executei:

# grub-install /dev/sda --no-floppy  #ENTER
# grub-mkconfig -o /boot/grub/grub.cfg  #ENTER

E depois reiniciei:

# shutdown -r now

Ao reiniciar, entrei em "Debian" e tudo funcionou. Isto pode ser feito com um Live-CD também.

Vejam bem, em "set root=(hd0,msdos11)", indiquei a partição "/boot" com o GRUB instalado no MBR. # em "...root=/dev/sda5", indiquei a partição raiz do sistema que estava dando erro.

A sistemática é a seguinte: o GRUB reconheceu o outro sistema, mas não encontrou o caminho para o kernel dele, daí: "error: file not found"

Se o outro sistema estivesse em outro HD ficaria: "set root=(hdX,msdosXX)". Onde os X seriam o HD e a partição do GRUB.

Em configurações de sistemas operacionais, é importante entender o que se está fazendo. Decorar comandos é secundário. Até um símio pode decorar comandos.

Em defesa dos desenvolvedores do GRUB: é difícil fazer um programa sucinto, como um gerenciador de boot, que dê suporte a diferentes sistemas operacionais, diferentes firmwares, diferentes drivers, etc. Por isso, a opção de configurar manualmente.

O Windows só teve gerenciador de boot depois de anos, a partir do Windows Vista.

Página anterior    

Páginas do artigo
   1. Introdução
   2. Corrigindo o problema
Outros artigos deste autor

Compilando o Squid3

IPv6, DNSv6 e DHCPv6

O Kernel Linux

Configuração do sistema, DHCP, compartilhamento e DNS no Debian Squeeze

Encapsulando BIND 9 e Apache 2 para obter maior segurança

Leitura recomendada

Subversion (SVN) com autenticação pelo LDAP

Rust - Uma nova linguagem de programação

Agendando tarefas com o crontab

Biometria: Processamento de imagens capturadas em leitores de impressão digital

Visual Studio no Linux

  
Comentários
[1] Comentário enviado por removido em 03/04/2013 - 22:54h

boa dica!
tive esse problema hoje, mas, nem esquentei muito, pois de qualquer forma, ia desinstalar esse grub 2, pois não gosto dele, prefiro o grub-legacy, bem mais estável.

[2] Comentário enviado por Buckminster em 04/04/2013 - 00:40h


[1] Comentário enviado por Piu em 03/04/2013 - 22:54h:

boa dica!
tive esse problema hoje, mas, nem esquentei muito, pois de qualquer forma, ia desinstalar esse grub 2, pois não gosto dele, prefiro o grub-legacy, bem mais estável.


Obrigado. Esse artigo serve para um maior entendimento do GRUB.

[3] Comentário enviado por lcavalheiro em 04/04/2013 - 11:26h

Excelente artigo, meu caro, favoritado! Mas é por isso que eu prefiro o LILO, muito mais simples e fácil de configurar.

[4] Comentário enviado por Buckminster em 04/04/2013 - 12:06h


[3] Comentário enviado por lcavalheiro em 04/04/2013 - 11:26h:

Excelente artigo, meu caro, favoritado! Mas é por isso que eu prefiro o LILO, muito mais simples e fácil de configurar.


Obrigado. E concordo com você. Eu também prefiro o LILO, mas como se tratava de várias instalações e o GRUB
vem por padrão na maioria das distribuições, acaba-se optando por ele.

[5] Comentário enviado por rootgerr em 04/04/2013 - 16:32h

O método mais prático a meu ver, é instalar o pacote os-prober, disponível em todas as distros que utilizam o grub2.

Monte antes as partições que julgar necessárias

# modprobe dm-mod (localiza partições encriptadas)


#os-prober (assim ele irá reconhecer os outros OS instalados e armazenar as partições e caminhos).


Após faça:


# grub-install --recheck /dev/sdX (onde X corresponde ao seu hd)


# grub-mkconfig -o /boot/grub/grub.cfg


Até hoje nunca falhou em minhas máquinas




[6] Comentário enviado por Buckminster em 04/04/2013 - 18:02h


[5] Comentário enviado por rootgerr em 04/04/2013 - 16:32h:

O método mais prático a meu ver, é instalar o pacote os-prober, disponível em todas as distros que utilizam o grub2.

Monte antes as partições que julgar necessárias

# modprobe dm-mod (localiza partições encriptadas)


#os-prober (assim ele irá reconhecer os outros OS instalados e armazenar as partições e caminhos).


Após faça:


# grub-install --recheck /dev/sdX (onde X corresponde ao seu hd)


# grub-mkconfig -o /boot/grub/grub.cfg


Até hoje nunca falhou em minhas máquinas





Deve ser porque eu gosto de sofrer, gosto de instalar tudo no braço, à moda Linux mesmo. Além disso, na tua maneira também são quatro comandos para digitar. Empatamos.
Mas enfim, existem várias maneiras de se fazer as coisas não só em informática, mas em tudo na vida.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts