grub-mkrescue 不生成可启动映像

Ove*_*erv 5 linux boot virtualbox grub

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

grub-mkrescue -o grub.iso
Run Code Online (Sandbox Code Playgroud)

这会生成 .iso 文件,但是当我尝试使用 VirtualBox 从它启动时,它说无法读取启动介质。当我用归档程序打开文件时,.iso 原来只有一个空的 /boot/grub 目录。

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

grub-mkrescue -o grub.iso /boot/grub
Run Code Online (Sandbox Code Playgroud)

但随后它抱怨该目录不存在。(也许我在 Debian VPS 上制作它是相关的,因为我目前无法访问实际的 Linux PC。)

什么可能导致这个问题?是否缺少要存储到可引导映像中的 GRUB 文件,或者我是否以错误的方式使用该命令?

Cir*_*郝海东 6

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

  • 创建一个 Multiboot hello worldmain.elf文件。GRUB 知道如何引导这些文件(GRUB 也知道如何引导 Linux 内核,即使它不是多重引导)

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

    menuentry "main" {
        multiboot /boot/main.elf
    }
    
    Run Code Online (Sandbox Code Playgroud)

    广场main.elfiso/boot/

  • 在 Ubuntu 17.10 上,在 UEFI 机器上:

    sudo apt-get install grub-pc-bin
    
    Run Code Online (Sandbox Code Playgroud)

    正如在https://wiki.osdev.org/Bare_Bones 中提到的那样,否则它根本不起作用,你也没有办法。

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

  • 生成图像并运行它:

    grub-mkrescue -o main.img iso
    qemu-system-x86_64 -hda main.img
    
    Run Code Online (Sandbox Code Playgroud)

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


Ove*_*erv 2

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

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