Mover /boot para uma nova partição produz: arquivo '/boot/grub/i386-pc/normal.mod' não encontrado

Mover /boot para uma nova partição produz: arquivo '/boot/grub/i386-pc/normal.mod' não encontrado

Estou tentando mover minha /bootpasta da /partição para /dev/sdb. O seguinte roteiro:

parted -s /dev/sdb mklabel msdos mkpart primary ext2 1M 100% set 1 boot on
mkfs.ext2 /dev/sdb1
mkdir /mnt/boot
mount /dev/sdb1 /mnt/boot
cd /boot
find . -depth -print0 | \
    cpio --null --sparse --make-directories --pass-through --verbose /mnt/boot
cd /
umount /mnt/boot
mv /boot /boot.orig
mkdir /boot
echo "/dev/sdb1 /boot ext2 ro 0 2" >>/etc/fstab
mount /dev/sdb1 /boot
parted /dev/sda set 1 boot off
grub-install /dev/sdb
update-grub
reboot

produz este erro:

error: file '/boot/grub/i386-pc/normal.mod' not found.
grub rescue>

Alguma ideia?

Editar: Parece que o script acima funciona bem, se o /bootdiretório original estiver em uma partição separada (digamos /dev/sda2). Só falha se estiver na mesma partição que a /partição ( /dev/sda1).

Eu tentei muitas variações do script acima, tanto no Ubuntu 13.04 quanto no Fedora 19, e ainda não consegui evitar o file '/boot/grub/i386-pc/normal.mod' not founderro.

Alguma outra ideia?

Responder1

A questão é que o grub está procurando/boot/grub/i386-pc/normal.mod na nova partição. Como a raiz dessa partição agora está montada em /boot, o arquivo está atualmente localizado em /grub/i386-pc/normal.modna nova partição. Você precisa reinstalar grubessa partição ou, como medida temporária, pode criar um link simbólico chamando ln -s . /boot/boot, o que permitirá que o arquivo seja encontrado com qualquer um dos nomes.

Responder2

Faça um "ls" para encontrar sua partição de inicialização (nova), digamos (hdX,Y).

Então ls (hdX,Y)/usr/lib/grub/i386-pc

Você vê o arquivo aí?

Provavelmente você precisará inicializar com um CD de resgate ou USB e reinstalar o grub. Algo está corrompido.

Responder3

Isso acontece porque a prefixvariável, que está codificada na core.imgimagem, grub-installnão corresponde mais ao layout da sua partição. Você pode substituir temporariamente esta variável manualmente e carregar o GRUB uma vez executando os seguintes comandos no shell de resgate:

set prefix=(hd0,1)/boot/grub
insmod normal
normal

O prefixo deve ser o caminho para onde residem os arquivos do GRUB (grub.cfg, etc), geralmente é algo como (hdX,Y)/boot/grubno caso de uma única partição raiz ou se você tiver uma partição (hdX,Y)/grubdedicada . /bootNo caso de RAID gerenciado pelo mdadm, hdX,Yprovavelmente seria md/xxxou mduuid/xxxx....

Se tudo correr bem, o GRUB deverá ser capaz de carregar seus módulos e carregá-los grub.cfge você poderá iniciar seu sistema operacional. Uma vez inicializado, execute grub-installpara regenerar um core.img(que será incorporado no MBR do disco) com o novo prefixo.

Mais informações em seu (horrível)documentação.

informação relacionada