![grub-mkrescue 未生成可启动映像](https://linux22.com/image/1365488/grub-mkrescue%20%E6%9C%AA%E7%94%9F%E6%88%90%E5%8F%AF%E5%90%AF%E5%8A%A8%E6%98%A0%E5%83%8F.png)
我正在尝试使用该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 world
main.elf
文件。GRUB 知道如何启动这些文件(GRUB 也知道如何启动 Linux 内核,尽管它不是 Multiboot)创建一个
iso/boot/grub/grub.cfg
包含以下内容的文件:menuentry "main" { multiboot /boot/main.elf }
放置
main.elf
在iso/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 的普通桌面安装上运行相同的命令时,该命令会生成一个可运行的可启动映像。