我已经用谷歌搜索了很多这个问题。我发现这,但这并没有解决我的问题。其他解决方案建议我重新安装 grub(运行 grub-install),但这也不起作用。
这是我正在做的:(我的 grub 版本是 2.02)
- 我使用 grub2-mkrescue 来制作我的 X.iso
- 我从 X.iso 启动 VMWareWorkstation 虚拟机,该虚拟机具有 1.0GB SATA 磁盘
- 我在磁盘上安装了X.iso,详细信息是:
3.1.擦除 /dev/sda,以防其上有旧分区:
dd if=/dev/zero of=/dev/sda bs=1M count=1
3.2.在 /dev/sda 上创建 3 个主分区 dev/sda1,sda2,sda3(大小分别为 100M、30M 和 70M),并将 sda1 切换为可引导
Disk /dev/sda: 1024 MB, 1073741824 bytes, 2097152 sectors
130 cylinders, 255 heads, 63 sectors/track
Units: sectors of 1 * 512 = 512 bytes
Device Boot StartCHS EndCHS StartLBA EndLBA Sectors Size Id Type
/dev/sda1 * 0,1,1 12,191,50 63 204862 204800 100M 83 Linux
/dev/sda2 12,191,51 16,147,2 204863 266302 61440 30.0M 83 Linux
/dev/sda3 16,147,3 25,127,37 266303 409662 143360 70.0M 83 Linux
3.3.将3个分区格式化为ext2,并挂载/dev/sda1
mkfs.ext2 /dev/sda1
mkfs.ext2 /dev/sda2
mkfs.ext2 /dev/sda3
ROOTFS_PATH=/var/.rootfs
mkdir $ROOTFS_PATH
mount /dev/sda1 $ROOTFS_PATH
3.4 复制文件...
for i in bzImage initrd.img vmlinuz-*; do
cp -rf /boot/$i $ROOTFS_PATH/boot
done
cp -f /boot/grub/device.map $ROOTFS_PATH/boot/grub/device.map
for i in init linuxrc; do
cp -rf /$i $ROOTFS_PATH
done
for i in bin etc lib sbin share usr; do
cp -a /$i $ROOTFS_PATH
done
for i in dev var proc sys tmp data log; do
mkdir -p $ROOTFS_PATH/$i
done
3.5 安装grub并制作grub配置文件
chroot $ROOTFS_PATH <<EOF
mount -a
mdev -s
grub-install $tdisk
grub-install --recheck $tdisk
grub-mkconfig -o /boot/grub/grub.cfg
exit
EOF
- 重启
它说:
.
error: disk 'hd0,msdos1' not found
Entering rescue mode...
grub rescue>
最奇怪的是,该ls
命令在 grub-rescue cli 中没有显示任何内容 ---- 正如有人所说,它应该显示磁盘列表。
答案1
cp -f /boot/grub/device.map $ROOTFS_PATH/boot/grub/device.map
那么,您是否将 GRUBdevice.map
文件从 GRUB 救援 ISO 映像复制到了磁盘?它可能会强制grub-install
将 GRUB 设备标识符hd0
与/dev/sda
.
在运行之前grub-install
,请验证该device.map
文件是否确实hd0
与您要安装 GRUB 的磁盘(即/dev/sda
您的情况)关联。
另外,你为什么要做这一切?看起来您正在尝试制作一个grub2-mkrescue
虚拟机映像,该映像可用于拯救其他丢失引导加载程序的虚拟机 - 这是您打算做的吗?如果是这样,只需使用任何 Live CD/DVD Linux 发行版的 ISO 映像来启动有问题的 VM,就会为您提供更广泛的工具集和更舒适的环境来修复原始问题,无论是缺少引导加载程序还是其他问题。
如果您特别需要grub2-mkrescue
,您已经拥有了X.iso
- 为什么您要尝试将其转换为基于虚拟磁盘的安装?