将 /boot 移动到新分区会产生:找不到文件“/boot/grub/i386-pc/normal.mod”

Ros*_* II 3 boot grub2

我正在尝试将我的/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
Run Code Online (Sandbox Code Playgroud)

产生这个错误:

error: file '/boot/grub/i386-pc/normal.mod' not found.
grub rescue>
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

编辑:如果原始/boot目录位于单独的分区上(例如/dev/sda2),上面的脚本似乎可以正常工作。仅当它与/分区 ( /dev/sda1)位于同一分区时才会失败。

我已经在 Ubuntu 13.04 和 Fedora 19 上尝试了上述脚本的很多很多变体,但还没有避免这个file '/boot/grub/i386-pc/normal.mod' not found错误。

还有其他想法吗?

Jon*_*len 6

问题是 grub 正在寻找/boot/grub/i386-pc/normal.mod 新分区。由于该分区的根现在安装在/boot,该文件当前位于/grub/i386-pc/normal.mod新分区上。您要么需要重新安装grub到该分区,或者作为临时措施,您可以通过调用创建一个符号链接ln -s . /boot/boot,这将允许在任一名称下找到该文件。