grub-mkrescue 未生成可启动映像

grub-mkrescue 未生成可启动映像

我正在尝试使用该grub-mkrescue命令来生成救援磁盘。我像这样调用它:

grub-mkrescue -o grub.iso

这样会生成 .iso 文件,但当我尝试使用 VirtualBox 从该文件启动时,系统提示无法读取启动介质。当我使用存档程序打开该文件时,.iso 中只有一个空的 /boot/grub 目录。

我还注意到有些人使用这样的命令:

grub-mkrescue -o grub.iso /boot/grub

但随后它抱怨该目录不存在。(也许这与我在 Debian VPS 上生成此文件有关,因为我目前无法访问实际的 Linux PC。)

是什么原因导致了这个问题?是缺少要存储到可启动映像中的 GRUB 文件,还是我使用命令的方式错误?

答案1

以下步骤为我生成了一个工作图像:

  • 创建一个 Multiboot hello worldmain.elf文件。GRUB 知道如何启动这些文件(GRUB 也知道如何启动 Linux 内核,尽管它不是 Multiboot)

  • 创建一个iso/boot/grub/grub.cfg包含以下内容的文件:

    menuentry "main" {
        multiboot /boot/main.elf
    }
    

    放置main.elfiso/boot/

  • 在 Ubuntu 17.10 的 UEFI 机器上:

    sudo apt-get install grub-pc-bin
    

    如上所述https://wiki.osdev.org/Bare_Bones否则它根本不起作用而且你也不知道怎么办。

    TODO OMG 真的吗?!我必须学会从源代码构建 GRUB 才能摆脱这种疯狂。

  • 生成图像并运行:

    grub-mkrescue -o main.img iso
    qemu-system-x86_64 -hda main.img
    

我已将这个示例的确切代码发布在:https://github.com/cirosantilli/x86-bare-metal-examples/tree/d217b180be4220a0b4a453f31275d38e697a99e0/multiboot/hello-world

答案2

事实证明,当您运行此命令的系统没有(可访问的)/boot/grub目录时,就会发生这种情况。它会默默失败并生成一个空的 ISO 文件。

在 Linux 的普通桌面安装上运行相同的命令时,该命令会生成一个可运行的可启动映像。

相关内容