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.