Mover /boot a una nueva partición produce: archivo '/boot/grub/i386-pc/normal.mod' no encontrado

Mover /boot a una nueva partición produce: archivo '/boot/grub/i386-pc/normal.mod' no encontrado

Estoy intentando mover mi /bootcarpeta de la /partición a /dev/sdb. El siguiente guión:

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

produce este error:

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

¿Algunas ideas?

Editar: Parece que el script anterior funciona bien, si el /bootdirectorio original está en una partición separada (por ejemplo /dev/sda2). Sólo falla si está en la misma partición que la /partición ( /dev/sda1).

Probé muchas, muchas variaciones del script anterior, tanto en Ubuntu 13.04 como en Fedora 19, y todavía tengo que evitar el file '/boot/grub/i386-pc/normal.mod' not founderror.

¿Alguna otra idea?

Respuesta1

El problema es que grub está buscando/boot/grub/i386-pc/normal.mod en la nueva partición. Como la raíz de esa partición ahora está montada en /boot, el archivo se encuentra actualmente /grub/i386-pc/normal.moden la nueva partición. Debe reinstalar gruben esa partición o, como medida temporal, puede crear un enlace simbólico llamando a ln -s . /boot/boot, lo que permitirá que el archivo se encuentre con cualquier nombre.

Respuesta2

Haga un "ls" para encontrar su partición de arranque (es decir, una nueva), diga (hdX,Y).

Entonces ls (hdX,Y)/usr/lib/grub/i386-pc

¿Ves el archivo allí?

Probablemente necesites arrancar con un CD o USB de rescate y reinstalar grub. Algo está corrupto.

Respuesta3

Esto sucede porque la prefixvariable, que está codificada en la core.imgimagen, grub-installya no coincide con el diseño de su partición. Puede anular temporalmente esta variable manualmente y cargar GRUB una vez ejecutando los siguientes comandos en el shell de rescate:

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

El prefijo debe ser la ruta donde residen los archivos de GRUB (grub.cfg, etc.), generalmente es algo así como (hdX,Y)/boot/gruben el caso de una única partición raíz o (hdX,Y)/grubsi tiene una /bootpartición dedicada. En el caso de un RAID administrado por mdadm, hdX,Yprobablemente sería md/xxxo mduuid/xxxx....

Si todo va bien, GRUB debería poder cargar sus módulos y cargarlos grub.cfgy usted debería poder iniciar su sistema operativo. Una vez iniciado, ejecute grub-installpara regenerar un core.img(que estará incrustado en el MBR del disco) con el nuevo prefijo.

Más información en su (horrible)documentación.

información relacionada