如果 Grub2 安装到文件中,则无法检测分区

如果 Grub2 安装到文件中,则无法检测分区

我正在尝试准备一个可以写入磁盘或使用 PXE 启动的映像。

一些背景信息:我创建了一个映像,使用 sfdisk(MBR)对其进行分区,为整个磁盘和主分区创建循环设备,将主分区格式化为 ext4,挂载它并使用 debootstrap 安装基本系统 + 内核和 grub-pc 包,然后生成 initramfs,将 dev、proc 和 sys 挂载到分区根目录并安装 grub。

fdisk -l/dev/loop0(整个图像的循环设备)的输出:

Disk /dev/loop0: 1,1 GiB, 1211572224 bytes, 2366352 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xfdf8e68d

Device       Boot   Start     End Sectors  Size Id Type
/dev/loop0p1 *       2048 2097151 2095104 1023M 83 Linux
/dev/loop0p2      2097152 2359295  262144  128M 82 Linux swap / Solaris

Grub 安装命令:

chroot $ROOT grub-install --target=i386-pc /dev/loop0
chroot $ROOT update-grub

Grub 配置似乎已正确生成,并且检测到了内核和 initramfs。但是当我尝试使用生成的映像启动系统时,grub2 找不到任何分区:

Loading boot sector... booting...
error: no such device: some-file-system-UUID
error: unknown filesystem.
Entering rescue mode...
grub rescue> ls
(hd0)
grub rescue> insmod ext2
grub rescue> ls
(hd0)

我的 grub 安装步骤可能出了什么问题?为什么 grub2 看不到 fdisk 输出中存在的分区?

PS:BIOS 设置为传统模式。我还用 kvm 测试了我的图像,结果完全相同。

答案1

这可能太晚了,但对我来说,我需要使用以下方法挂载 /dev/loopX 分区

losetup -P -n /dev/loop0 test.img

这样就创建了一个 /dev/loop0p1,我可以在上面挂载并安装 grub。你还应该确保已经在镜像中安装了 Linux 内核,如下所示:

sudo chroot /mnt apt-get install linux-image

然后就可以在/dev/loop0上重新安装grub并update-grub成功运行了。

相关内容