Solução revisada com base no código acima
A solução acima não funcionará totalmente sem problemas porque monta a partição de inicialização no / (root) do sistema de arquivos. Isso faz o grub reclamar que o boot não existe, é claro. Isso consertará esse problema:
mkdir /mnt/chrootdir
mkdir /mnt/chrootdir/boot
mount /dev/sda1 /mnt/chrootdir/boot
for dir in proc dev sys etc bin sbin var usr lib lib64 tmp; do mkdir /mnt/chrootdir/$dir && mount --bind /$dir /mnt/chrootdir/$dir ; done
chroot /mnt/chrootdir
update-grub2 # inside chroot
Como você vê, eu também removi as quebras de linha para facilitar a execução para todos.
Outra solução (mais simples)
Se você continuar tendo problemas para fazê-lo funcionar, deve copiar a partição / boot na partição / (root). Para isso, inicie o seu sistema com o Ubuntu live boot dvd e abra o terminal. Dentro digite:
sudo su
fdisk -l
Para descobrir quais partições você tem. No meu caso, o sda1 é a minha partição / boot, que tem cerca de 250MB de tamanho e um sda5, que é de cerca de 500GB. Eu uso esses valores nos comandos abaixo:
mkdir /mnt/boot/
mount /dev/sda1 /mnt/boot/
mkdir /mnt/root/
mount /dev/sda5 /mnt/root/
cp -R /mnt/boot/ /mnt/root/boot/
Defina o sinalizador de inicialização para a partição de dados e remova-a para a partição de inicialização:
fdisk /dev/sda
b -> 1 (unset the bootable flag for the first partition)
b -> 5 (set the bootable flag for the fifth partition)
w -> write changes to the MBR
O seu computador irá agora olhar dentro do sda5 para os arquivos de inicialização. Hora de fazer o chrooting novamente, desta vez com algumas pastas necessárias para o grub e que já são geradas pelo seu disco Ubuntu:
mkdir /mnt/chrootdir/
mkdir /mnt/chrootdir/dev/
mkdir /mnt/chrootdir/proc/
mkdir /mnt/chrootdir/sys/
mount /dev/sda5 /mnt/chrootdir/
mount --bind /dev/ /mnt/chrootdir/dev/
mount --bind /proc/ /mnt/chrootdir/proc/
mount --bind /sys/ /mnt/chrootdir/sys/
chroot /mnt/chrootdir/
grub-install /dev/sda
Instalação concluída. Nenhum erro foi relatado.
Se você não vir uma mensagem informando que o arquivo grub.cnf foi gerado, execute o comando update:
update-grub2 /dev/sda
Agora, você pode reinicializar com segurança e ver o menu de inicialização bem conhecido aparecer novamente.
Essa solução foi a única que estava funcionando para mim depois da migração de um servidor físico para uma máquina virtual. Espero que alguém ache isso útil!