Linux系统之grub-mkstandalone详解
grub-mkstandalone 是 GRUB 工具链中的一个实用工具,用于生成指定格式的独立 GRUB 镜像文件。该工具支持多种目标平台(如 BIOS、UEFI、Coreboot 等),适用于制作自定义启动盘、嵌入式系统引导程序或跨平台启动镜像。
·
grub-mkstandalone 是 GRUB 工具链中的一个实用工具,用于生成指定格式的独立 GRUB 镜像文件。该工具支持多种目标平台(如 BIOS、UEFI、Coreboot 等),适用于制作自定义启动盘、嵌入式系统引导程序或跨平台启动镜像。其核心功能是将 GRUB 引导程序、模块、主题、字体等资源打包为特定格式的可执行镜像,便于部署到不同硬件平台。
功能描述
grub-mkstandalone 的核心功能包括:
- 多平台支持:支持 BIOS、UEFI、Coreboot、QEMU 等多种平台的镜像生成。
- 模块化构建:允许指定预加载模块、安装模块及其依赖项,灵活控制镜像内容。
- 主题与字体集成:支持自定义主题(如
starfield)和字体(如unicode)。 - 压缩优化:支持
xz、gz、lzo或无压缩,减小镜像体积。 - 语言包管理:支持安装指定语言包(如
en,zh)。 - 路径与工具自定义:允许指定模块目录、
grub-mkimage路径等。
语法格式
grub-mkstandalone [选项] <源文件>
选项说明
| 选项 | 描述 |
|---|---|
-o / --output=FILE |
将生成的镜像文件保存为 FILE(默认为标准输出)。 |
-O / --format=FORMAT |
指定目标平台格式(见下文支持列表)。 |
-C / `–compression=(xz |
none |
--modules=MODULES |
预加载指定模块(逗号分隔)。 |
--install-modules=MODULES |
仅安装指定模块及其依赖项(默认安装所有模块)。 |
--themes=THEMES |
安装指定主题(逗号分隔,默认安装 starfield)。 |
--fonts=FONTS |
安装指定字体(逗号分隔,默认安装 unicode)。 |
--locales=LOCALES |
仅安装指定语言包(逗号分隔,默认安装所有语言包)。 |
--compress[=no,xz,gz,lzo] |
指定 GRUB 文件压缩算法(xz/gz/lzo/no)。 |
-d / --directory=DIR |
使用 DIR 路径下的镜像和模块。 |
--grub-mkimage=FILE |
指定 grub-mkimage 的路径(默认 /usr/bin/grub-mkimage)。 |
支持的目标平台格式
--format=FORMAT 参数支持以下目标平台:
| 格式 | 说明 |
|---|---|
i386-coreboot |
Coreboot 平台(32 位 x86)。 |
i386-multiboot |
Multiboot 平台(32 位 x86)。 |
i386-pc |
BIOS 平台(传统 GRUB 32 位)。 |
i386-pc-pxe |
PXE 网络启动(32 位 x86)。 |
i386-efi |
UEFI 平台(32 位 x86)。 |
i386-ieee1275 |
Open Firmware(32 位 x86)。 |
i386-qemu |
QEMU 模拟器(32 位 x86)。 |
x86_64-efi |
UEFI 平台(64 位 x86)。 |
mipsel-yeeloong-flash |
Yeeloong 平台(MIPS 小端)。 |
mipsel-fuloong2f-flash |
Fulong 2F 平台(MIPS 小端)。 |
mipself-loongson-elf |
Loongson 平台(MIPS 小端 ELF)。 |
powerpc-ieee1275 |
PowerPC 平台(Open Firmware)。 |
sparc64-ieee1275-raw |
SPARC64 平台(原始格式)。 |
sparc64-ieee1275-cdcore |
SPARC64 平台(CD 核心)。 |
sparc64-ieee1275-aout |
SPARC64 平台(AOUT 格式)。 |
ia64-efi |
IA64 平台(UEFI)。 |
mips-arc |
ARC 平台(MIPS 大端)。 |
mipsel-arc |
ARC 平台(MIPS 小端)。 |
mipsel-qemu_mips-elf |
QEMU MIPS 平台(小端 ELF)。 |
mips-qemu_mips-flash |
QEMU MIPS 平台(大端 Flash)。 |
mipsel-qemu_mips-flash |
QEMU MIPS 平台(小端 Flash)。 |
mips-qemu_mips-elf |
QEMU MIPS 平台(大端 ELF)。 |
使用场景与示例
1. 生成 BIOS 平台的 GRUB 镜像
sudo grub-mkstandalone -o /path/to/grub_bios.img --format=i386-pc --modules=ext2,iso9660
- 效果:生成适用于 BIOS 平台的 GRUB 镜像,预加载
ext2和iso9660模块。 - 应用场景:制作传统 BIOS 启动的 USB 盘或软盘。
2. 生成 UEFI 平台的 GRUB 镜像
sudo grub-mkstandalone -o /path/to/grub_efi.img --format=x86_64-efi --themes=mytheme
- 效果:生成适用于 64 位 UEFI 平台的 GRUB 镜像,使用自定义主题
mytheme。 - 应用场景:制作现代 UEFI 启动的 USB 盘或 ISO 镜像。
3. 生成 QEMU 模拟器启动镜像
sudo grub-mkstandalone -o /path/to/grub_qemu.img --format=i386-qemu --compress=xz
- 效果:生成适用于 QEMU 模拟器的 GRUB 镜像,并使用
xz压缩。 - 应用场景:测试 GRUB 在虚拟环境中的启动行为。
4. 自定义模块和语言包
sudo grub-mkstandalone -o /path/to/grub_custom.img --format=i386-pc --install-modules=ext2,btrfs --locales=en,fr
- 效果:生成仅包含
ext2和btrfs模块,并安装英语和法语语言包。 - 应用场景:精简镜像以适应嵌入式设备或特殊需求。
注意事项
-
模块依赖性
- 使用
--install-modules时需确保指定模块及其依赖项可用。 - 示例依赖检查:
find /usr/lib/grub/i386-pc -name "*.mod"
- 使用
-
路径权限
- 生成的镜像文件需具有写入权限。
- 示例权限设置:
sudo chmod 755 /path/to/output_directory
-
压缩算法兼容性
- 不同平台对压缩算法的支持可能不同,需根据目标平台选择合适的算法。
- 示例压缩验证:
file /path/to/grub_bios.img
-
镜像验证
- 生成后可通过
grub-file工具验证镜像格式:grub-file --is-x86-multiboot /path/to/grub_bios.img
- 生成后可通过
-
平台适配
- 使用
--format时需确认目标硬件架构(如 BIOS/UEFI)。 - 示例架构验证:
uname -m
- 使用
常见问题与解决方案
1. 错误提示:grub-mkstandalone: error: cannot open output file
- 原因:输出路径无写入权限或磁盘空间不足。
- 解决方法:
- 使用
sudo运行命令。 - 检查磁盘空间:
df -h
- 使用
2. 错误提示:grub-mkstandalone: error: module not found
- 原因:指定模块不存在或未安装依赖项。
- 解决方法:
- 列出可用模块:
find /usr/lib/grub/i386-pc -name "*.mod" - 安装缺失模块:
sudo apt install grub-common
- 列出可用模块:
3. 错误提示:grub-mkstandalone: error: invalid compression algorithm
- 原因:指定压缩算法不支持(如
bzip2)。 - 解决方法:
- 使用有效算法(
xz,gz,lzo或no)。
- 使用有效算法(
4. 镜像无法启动
- 原因:未正确配置 GRUB 或目标平台不匹配。
- 解决方法:
- 检查 GRUB 配置文件(如
/boot/grub/grub.cfg)。 - 使用
grub-mkconfig更新配置:sudo grub-mkconfig -o /boot/grub/grub.cfg
- 检查 GRUB 配置文件(如
典型工作流程
-
准备资源
- 收集所需模块(如
ext2,iso9660)、主题、字体等。 - 示例模块路径:
/usr/lib/grub/i386-pc/
- 收集所需模块(如
-
生成镜像
sudo grub-mkstandalone -o /path/to/grub_bios.img --format=i386-pc --modules=ext2,iso9660 -
验证镜像
file /path/to/grub_bios.img -
部署镜像
- 写入 USB 设备:
sudo dd if=/path/to/grub_bios.img of=/dev/sdX bs=4M status=progress - 或嵌入到 ISO 镜像中:
xorriso -as mkisofs -o rescue.iso /path/to/content
- 写入 USB 设备:
-
测试启动
- 插入 USB 或挂载 ISO,并设置 BIOS/UEFI 从设备启动。
openvela 操作系统专为 AIoT 领域量身定制,以轻量化、标准兼容、安全性和高度可扩展性为核心特点。openvela 以其卓越的技术优势,已成为众多物联网设备和 AI 硬件的技术首选,涵盖了智能手表、运动手环、智能音箱、耳机、智能家居设备以及机器人等多个领域。
更多推荐

所有评论(0)