Déplacer / démarrer vers une nouvelle partition produit: file '/boot/grub/i386-pc/normal.mod' introuvable

Je tente de déplacer mon dossier /boot de la partition / , vers /dev/sdb . Le script suivant:

 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 

produit cette erreur:

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

Des idées?

Edit : Il semble que le script ci-dessus fonctionne correctement, si le directory original /boot trouve sur une partition séparée (par exemple /dev/sda2 ). Il échoue seulement s'il se trouve sur la même partition que la partition /dev/sda1 ( /dev/sda1 ).

J'ai essayé beaucoup de variantes du script ci-dessus, sur Ubuntu 13.04 et Fedora 19, et je n'ai pas encore trouvé le file '/boot/grub/i386-pc/normal.mod' not found erreur file '/boot/grub/i386-pc/normal.mod' not found .

D'autres idées?

Le problème est que grub search /boot/grub/i386-pc/normal.mod sur la nouvelle partition . Comme la racine de cette partition est maintenant montée dans /boot , le file se trouve actuellement dans /grub/i386-pc/normal.mod sur la nouvelle partition. Vous devez réinstaller grub sur cette partition ou, à titre de mesure temporaire, vous pouvez créer un lien symbolique en appelant ln -s . /boot/boot ln -s . /boot/boot , ce qui permettra de find le file sous n'importe quel nom.

Faites un "ls" pour find votre partition de démarrage (nouvelle qui est) dire (hdX, Y).

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

Voyez-vous le file là-bas?

Probablement, vous devez démarrer avec un CD de secours ou USB, et réinstaller grub. Quelque chose est corrompu.

Cela arrive parce que la variable prefix , qui est codée en dur dans l'image core.img par grub-install ne correspond plus à la disposition de la partition. Vous pouvez replace temporairement cette variable manuellement et charger GRUB une fois en exécutant les commands suivantes dans le shell de secours:

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

Le préfixe doit être le path vers où résident les files de GRUB (grub.cfg, etc), c'est généralement quelque chose comme (hdX,Y)/boot/grub dans le cas d'une seule partition racine, ou (hdX,Y)/grub si vous avoir une partition dédiée /boot . Dans le cas de RAID géré par mdadm, le hdX,Y serait probablement md/xxx ou mduuid/xxxx...

Si tout se passe bien, GRUB devrait pouvoir charger ses modules et charger son grub.cfg et vous devriez être capable de démarrer votre operating system. Une fois démarré, lancez grub-install pour régénérer un core.img (qui sera incorporé dans le MBR du disque) avec le nouveau préfixe.

Plus d'infos dans leur (terrible) documentation .