
Я пытаюсь переместить свою /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 диска) с новым префиксом.
Более подробная информация в их (ужасно)документация.