Перемещение /boot на новый раздел приводит к следующему результату: файл '/boot/grub/i386-pc/normal.mod' не найден

Перемещение /boot на новый раздел приводит к следующему результату: файл '/boot/grub/i386-pc/normal.mod' не найден

Я пытаюсь переместить свою /bootпапку из /раздела в /dev/sdb. Следующий скрипт:

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

выдает такую ​​ошибку:

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

Есть идеи?

Редактировать: Похоже, что приведенный выше скрипт работает нормально, если исходный /bootкаталог находится на отдельном разделе (например, /dev/sda2). Он терпит неудачу только в том случае, если он находится на том же разделе, что и /раздел ( /dev/sda1).

Я перепробовал множество вариаций приведенного выше скрипта как в Ubuntu 13.04, так и в Fedora 19, и до сих пор не смог избежать этой file '/boot/grub/i386-pc/normal.mod' not foundошибки.

Есть еще идеи?

решение1

Проблема в том, что grub ищет/boot/grub/i386-pc/normal.mod на новом разделе. Поскольку корень этого раздела теперь смонтирован в /boot, файл в настоящее время находится /grub/i386-pc/normal.modв новом разделе. Вам нужно либо переустановить его grubна этот раздел, либо, в качестве временной меры, создать символическую ссылку ln -s . /boot/boot, вызвав , что позволит найти файл под любым именем.

решение2

Выполните команду «ls», чтобы найти ваш загрузочный раздел (то есть новый), скажем (hdX,Y).

Затем ls (hdX,Y)/usr/lib/grub/i386-pc

Видите ли вы там файл?

Вероятно, вам нужно загрузиться с помощью спасательного компакт-диска или USB-накопителя и переустановить grub. Что-то повреждено.

решение3

Это происходит из-за того, что prefixпеременная, которая жестко закодирована в core.imgобразе, grub-installбольше не соответствует вашей схеме раздела. Вы можете временно переопределить эту переменную вручную и загрузить GRUB один раз, выполнив следующие команды в оболочке восстановления:

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

Префикс должен быть путем к месту расположения файлов GRUB (grub.cfg и т. д.), обычно это что-то вроде (hdX,Y)/boot/grubв случае одного корневого раздела или (hdX,Y)/grubесли у вас есть выделенный /bootраздел. В случае RAID, управляемого mdadm, hdX,Yвероятно, будет md/xxxили mduuid/xxxx....

Если все пойдет правильно, GRUB должен загрузить свои модули и загрузить их, grub.cfgи вы сможете запустить свою ОС. После загрузки запустите grub-installдля повторной генерации core.img(которая будет встроена в MBR диска) с новым префиксом.

Более подробная информация в их (ужасно)документация.

Связанный контент