我正在尝试将/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
你看到那里的文件了吗?
您可能需要使用救援 CD 或 USB 启动,然后重新安装 grub。有些东西已损坏。
答案3
发生这种情况是因为在图像prefix
中硬编码的变量不再与您的分区布局匹配。您可以临时手动覆盖此变量并通过在救援 shell 中运行以下命令来加载 GRUB 一次:core.img
grub-install
set prefix=(hd0,1)/boot/grub
insmod normal
normal
前缀应该是 GRUB 文件(grub.cfg 等)所在的路径,通常类似于(hdX,Y)/boot/grub
单个根分区,或者(hdX,Y)/grub
如果您有专用/boot
分区。如果是 mdadm 管理的 RAID,则hdX,Y
可能是md/xxx
或mduuid/xxxx...
。
如果一切顺利,GRUB 应该能够加载它的模块并加载它grub.cfg
,您应该能够启动您的操作系统。启动后,运行grub-install
以新前缀重新生成 a core.img
(将嵌入到磁盘的 MBR 中)。
更多信息在他们的(可怕的)文档。