Não é possível recuperar o grub devido à falta de vmlinuz e intrd.img

2

Eu tinha uma partição dedicada do grub, ao tentar diagnosticar este problema , eu decidi mudar a partição padrão para o sistema Ubuntu.

Mas não funcionou, Então, eu inicializei a partir do live cd, formatei a partição de inicialização antiga e fiz uma nova instalação do grub, copiei grub.cfg pensando que seria suficiente para inicializar o sistema.

Mas eu estava errado, Agora estou menu grub, que aparece, mas o que eu não sabia era vmlinuz e intrd.img também é necessário para inicializar um sistema.

Qual não é onde? Como posso sair desse problema idiota?

    
por Starx 29.03.2012 / 14:51

2 respostas

5

Sinto muito em saber que você precisou reinstalar ... mas, para futuros leitores dessa pergunta, aqui está minha resposta.

A causa no meu caso:

Eu estava brincando com a minha bota ... pensei que eu fiz o backup com:

# cd /
# tar czf boot.tgz boot

Em seguida, excluí e reformatei minha partição de inicialização. Então eu ia colocar os arquivos de volta, mas não havia boot.tgz: /

# file /initrd.img  /vmlinuz 
/initrd.img: broken symbolic link to '/boot/initrd.img-3.2.0-23-generic'
/vmlinuz:    broken symbolic link to 'boot/vmlinuz-3.2.0-23-generic

Então eu tive o mesmo problema que você.

E a solução:

Reinstale o material initramfs (que gera o arquivo initramfs em / boot; não tenho certeza qual deles é o mais importante, então eu fiz tudo, foi rápido):

# aptitude reinstall grub2-common grub-pc-bin grub-gfxpayload-lists grub-common

FYI para obter a lista de pacotes para o meu comando acima, eu fiz isso:

# aptitude search grub | grep -E "^i"

Reinstale o material do kernel (que coloca o kernel em / boot; isso leva muito tempo; use a pesquisa primeiro para encontrar o nome do pacote correto):

# aptitude reinstall linux-image-3.2.0-23-generic

Os links não estavam mais quebrados. :)

# file /initrd.img  /vmlinuz 
/initrd.img: symbolic link to '/boot/initrd.img-3.2.0-23-generic'
/vmlinuz:    symbolic link to 'boot/vmlinuz-3.2.0-23-generic'

Para evitar um erro "cat: /boot/grub/video.lst: Nenhum arquivo ou diretório como esse" executando o update-grub, executei o grub-install. (Eu tive que correr em vários discos desde que eu estou usando raid):

grub-install /dev/sda
grub-install /dev/sdb
...

Então, só para ter certeza ... update-grub novamente (que o grub de reinstalação também deveria ter feito, mas não possuía video.lst, e talvez fosse necessário o arquivo do kernel ou outros também):

# update-grub
Generating grub.cfg ...
Found linux image: /boot/vmlinuz-3.2.0-23-generic
Found initrd image: /boot/initrd.img-3.2.0-23-generic
done

Então, para terminar, certifico-me de que minha inicialização e fstab estejam corretas:

# umount /boot
# mount -a
# ls /boot
abi-3.2.0-23-generic  config-3.2.0-23-generic  grub  initrd.img-3.2.0-23-generic  lost+found  System.map-3.2.0-23-generic  vmlinuz-3.2.0-23-generic

(não faço ideia do que abi-3.2.0-23-generic é. Eu não tinha esse arquivo antes)

E gere o initramfs novamente caso ele gere algumas mensagens de erro relevantes (substitua o nome do arquivo pelo correto no seu sistema).

# mkinitramfs -o /boot/initrd.img-3.2.0-23-generic
(no output if it works)

Por exemplo, antes de consertar minha inicialização e configurar meu arquivo mdadm.conf, eu receberia esta mensagem:

grep: /boot/config-3.2.0-23-generic: No such file or directory
W: mdadm: the array /dev/md0 with UUID 656eb2a6:21526b55:a6f1834a:d3cc95e4
W: mdadm: is currently active, but it is not listed in mdadm.conf. if
W: mdadm: it is needed for boot, then YOUR SYSTEM IS NOW UNBOOTABLE!
W: mdadm: please inspect the output of /usr/share/mdadm/mkconf, compare
W: mdadm: it to /etc/mdadm/mdadm.conf, and make the necessary changes.

Depois disso, testei a inicialização e funcionou. :)

E algumas informações básicas básicas ... , que é tudo o que é necessário para reunir a solução acima:

  • O Grub precisa ser instalado no MBR para informar ao BIOS o que inicializar. (criado com o grub-install)
  • O MBR aponta para o código de inicialização do grub (criado com o grub-install) no disco em algum lugar fora das partições. (no meu caso com o GPT, esta é uma partição do bios_grub).
  • Então este código de inicialização encontra / boot para carregar o grub.cfg. (criado com o grub-mkconfig -o ou update-grub que também cria outros arquivos importantes)
  • Quando você seleciona uma opção de inicialização, o grub é removido, substituído pelo kernel do Linux (vmlinuz). O kernel começa a usar o arquivo initramfs (criado com o mkinitramfs), que eu acho que contém algumas informações sobre o sistema (raid, lvm, etc. com alguns uuids de partições ou volumes raid / lvm) e também os módulos que você precisa (ext3, ext4 , lvm, raid, etc).
  • em algum momento ele monta o sistema regular e seu material rc.d assume

Então é por isso que você precisa de todos esses arquivos.

    
por Peter 09.05.2012 / 09:50
0

Se o que você diz é verdade, a reconstrução do seu sistema pode ser mais problemática do que vale a pena. Você pode tentar reinstalar o kernel, que também deve atualizar o grub no disco, mas desde que você tenha sobrescrito o antigo grub.cfg que pode nem funcionar. Para começar, você precisará chroot seu disco a partir do instalador ao vivo e, em seguida, apt-get install --reinstall qualquer versão do kernel que você teve por último. O resto é realmente com você, isso é uma bagunça que você fez para si mesmo. Você poderia aproveitar isso como uma oportunidade de aprender mais sobre como a distro inicializa e consertá-la, ou pode fazer backup de seus dados e começar tudo de novo. Boa sorte.

    
por ppetraki 29.03.2012 / 15:15