我正在尝试从 USB 驱动器启动 Linux 内核版本 3.2.0。
我用 ext4 分区格式化了 USB 驱动器。我在上面安装了 GRUB,并将两个文件 vmlinuz-3.2.0-29-generic 和 initrd.img-3.2.0-29-generic 从笔记本电脑的 /boot 文件夹复制到 USB 驱动器的启动文件夹中。
然后,我将 USB 驱动器挂载到 /mnt 并运行 grub-mkconfig -o /mnt/boot/grub/grub.cfg 以在其中创建 grub.cfg 文件。
然后,我尝试将我的内核详细信息添加到 grub.cfg 文件中,如下所示:
menuentry "my kernel" --class gnu-linux --class gnu --class os
recordfail
insmod gzio
insmod part_msdos
insmod ext4
set root='(hd0)'
echo "Loading my kernel"
linux /boot/vmlinuz-3.2.0-29-generic root=UUID=db2687dc-8c42-485e-a152-ef821590b113 ro quiet splash
echo 'Loading initial ramdisk ...'
initrd /boot/initrd.img-3.2.0-29-generic
但是,当我从笔记本电脑硬盘启动 GRUB 时,GRUB 列表不显示我的内核,而只是列出相同的操作系统列表。内核真的在 (hd0) 上吗?如何在 USB 驱动器的 GRUB 菜单中添加内核的条目?此外,从 USB 驱动器启动内核的这种方式正确吗?当我将内核复制到 USB 驱动器时,/boot 目录中的 initrd.img 文件是否仍然有效?如果不是,如何为 USB 上的内核生成新的 initrd.imf 文件?
答案1
我曾经遇到过这个问题。
这是因为从我的硬盘启动并稍后添加 USB,而不是使用 USB 启动,这意味着设备的枚举方式不同。
通过在 BIOS 中手动分配启动设备顺序来解决这个问题。
答案2
我觉得
设置根='(hd0)'
是没有必要的 — — (“set root” 指的是 grub 所在的磁盘 — — 我认为 grub 默认是这么认为的)并且可能会在启动时混淆 grub。
没有它,也尝试一下。