当前位置: 首页 > news >正文

Linux系统之grub-mkrescue详解

grub-mkrescue 是 GRUB 工具链中的一个实用工具,用于生成 GRUB 救援镜像(rescue image)。该工具通过 GNU Xorriso 生成 ISO 镜像文件,支持自定义引导模块、主题、字体、压缩算法等参数,适用于制作 Linux 系统的启动盘、救援盘或多系统引导盘。其核心功能是将 GRUB 引导程序与指定资源打包为可启动的 ISO 文件,便于部署或修复系统。

功能描述

grub-mkrescue 的核心功能包括:

  1. 生成 ISO 启动镜像:将 GRUB 引导程序、模块、主题、字体等资源打包为 ISO 文件。
  2. 自定义引导环境:允许指定加载的模块、安装的字体、主题、语言包等。
  3. 压缩优化:支持多种压缩算法(如 xz, gz, lzo)以减小镜像体积。
  4. 多平台支持:支持 SPARC、ARCS 等特殊平台的引导需求。
  5. 集成 GNU Xorriso:通过 -- 参数传递选项直接调用 Xorriso 的功能。

语法格式

grub-mkrescue [选项] [输出路径]

选项说明

选项描述
-o / --output=FILE将生成的 ISO 文件保存为 FILE(默认为标准输出)。
--modules=MODULES预加载指定的 GRUB 模块(逗号分隔)。
--install-modules=MODULES仅安装指定模块及其依赖项(默认安装所有模块)。
--themes=THEMES安装指定主题(逗号分隔,默认安装 starfield 主题)。
--fonts=FONTS安装指定字体(逗号分隔,默认安装 unicode 字体)。
--locales=LOCALES仅安装指定语言包(逗号分隔,默认安装所有语言包)。
--compress[=no,xz,gz,lzo]指定压缩算法(xz/gz/lzo)或禁用压缩(no)。
--directory=DIR使用 DIR 路径下的图像和模块。
--grub-mkimage=FILE指定 grub-mkimage 的路径(默认 /usr/bin/grub-mkimage)。
--rom-directory=DIR将 ROM 镜像保存到 DIR
--xorriso=FILE指定 Xorriso 工具的路径。
--grub-glue-efi=FILE指定 grub-glue-efi 的路径。
--grub-render-label=FILE指定 grub-render-label 的路径。
--label-font=FILE指定生成标签的字体文件。
--label-color=COLOR指定标签的前景色(如 red/#FF0000)。
--label-bgcolor=COLOR指定标签的背景色(如 blue/#0000FF)。
--product-name=STRING在标签中显示的产品名称。
--product-version=STRING在标签中显示的产品版本。
--sparc-boot启用 SPARC 平台引导(禁用 HFS+/APM/ARCS 等)。
--arcs-boot启用 ARCS 引导(适用于大端 MIPS 机器)。
--后续参数直接传递给 Xorriso 的命令行。

使用场景与示例

1. 生成默认配置的 ISO 镜像

sudo grub-mkrescue -o /path/to/rescue.iso
  • 效果:生成包含所有默认模块、主题和语言包的 ISO 文件。
  • 应用场景:快速创建基础救援盘,适用于大多数通用需求。

2. 自定义模块和压缩方式

sudo grub-mkrescue --modules=ext2,iso9660 --compress=xz -o /path/to/rescue.iso
  • 效果:仅加载 ext2iso9660 模块,并使用 xz 压缩算法。
  • 应用场景:精简镜像大小,适用于嵌入式系统或网络引导。

3. 指定主题和字体

sudo grub-mkrescue --themes=mytheme --fonts=DejaVu --output=/path/to/rescue.iso
  • 效果:使用自定义主题 mytheme 和字体 DejaVu
  • 应用场景:美化 GRUB 引导界面,提升用户体验。

4. 多语言支持

sudo grub-mkrescue --locales=en,fr,de -o /path/to/rescue.iso
  • 效果:仅安装英语、法语和德语语言包。
  • 应用场景:针对特定语言用户生成镜像,减少冗余数据。

5. 传递 Xorriso 参数

sudo grub-mkrescue -o /path/to/rescue.iso -- -volid "My Rescue Disk" -isohybrid
  • 效果:生成 ISO 文件并设置卷标为 "My Rescue Disk",同时启用 ISOHybrid 模式。
  • 应用场景:创建兼容 USB 启动的混合 ISO 镜像。

典型工作流程

  1. 准备资源

    • 收集所需模块(如 ext2, iso9660)、主题、字体等。
    • 示例模块路径:
      /usr/lib/grub/i386-pc/
      
  2. 生成 ISO 镜像

    sudo grub-mkrescue --modules=ext2,iso9660 --themes=mytheme -o /path/to/rescue.iso
    
  3. 验证 ISO 镜像

    xorriso -indev /path/to/rescue.iso -report_el_torito
    
  4. 制作启动盘

    • 使用 dd 或第三方工具(如 Rufus)写入 USB:
      sudo dd if=/path/to/rescue.iso of=/dev/sdX bs=4M status=progress
      
  5. 测试启动

    • 插入 USB 并设置 BIOS/UEFI 从 USB 启动。

注意事项

  1. 模块依赖性

    • 使用 --install-modules 时需确保指定模块及其依赖项可用。
    • 示例依赖检查:
      grub-mkimage -o /dev/null -O i386-pc -p /boot/grub biosdisk ext2
      
  2. 路径权限

    • 生成的 ISO 文件需具有写入权限。
    • 示例权限设置:
      sudo chmod 755 /path/to/output_directory
      
  3. Xorriso 集成

    • 通过 -- 传递参数时,需熟悉 Xorriso 的语法(如 -volid, -isohybrid)。
    • 示例 Xorriso 文档查询:
      man xorriso
      
  4. 平台适配

    • 使用 --sparc-boot--arcs-boot 时需确认目标硬件架构。
    • 示例架构验证:
      uname -m
      
  5. 镜像验证

    • 生成后可通过 file 命令验证 ISO 格式:
      file /path/to/rescue.iso
      

常见问题与解决方案

1. 错误提示:grub-mkrescue: error: cannot open output file

  • 原因:输出路径无写入权限或磁盘空间不足。
  • 解决方法
    • 使用 sudo 运行命令。
    • 检查磁盘空间:
      df -h
      

2. 错误提示:grub-mkrescue: error: module not found

  • 原因:指定模块不存在或未安装依赖项。
  • 解决方法
    • 列出可用模块:
      find /usr/lib/grub/i386-pc -name "*.mod"
      
    • 安装缺失模块:
      sudo apt install grub-common
      

3. 错误提示:grub-mkrescue: error: invalid compression algorithm

  • 原因:指定压缩算法不支持(如 bzip2)。
  • 解决方法
    • 使用有效算法(xz, gz, lzono)。

4. ISO 镜像无法启动

  • 原因:未正确配置 GRUB 或 Xorriso 参数。
  • 解决方法
    • 检查 GRUB 配置文件(如 /boot/grub/grub.cfg)。
    • 使用 xorriso 手动验证 ISO 结构:
      xorriso -indev /path/to/rescue.iso -report_el_torito
      
http://www.xdnf.cn/news/935155.html

相关文章:

  • vue.js not detected解决方法
  • Oracle实用参考(13)——Oracle for Linux物理DG环境搭建(2)
  • 第四篇:服务商(工人端)-02服务商入驻审核
  • SCADA|RESTful学习,Apipost通过GET获取KingSCADA实时数据
  • 软件测试—学习Day11
  • HTTP 重定向详解
  • Vulkan 3D Tiles渲染器开发笔记1-脚手架搭建
  • Linux nano命令的基本使用
  • 代码随想录算法训练营第60期第六十天打卡
  • 十一(2) 类的实例化
  • 打卡第48天
  • 系统思考:跳出症状看全局
  • 第35周综合就业指南
  • 深入剖析AI大模型:用神经网络构建医疗影像辅助诊断系统
  • Compose笔记(二十六)--DatePicker
  • LeetCode 1723: 完成所有工作的最短时间
  • 大数据+智能零售:数字化变革下的“智慧新零售”密码
  • LLMs 系列科普文(5)
  • 大模型外挂MCP教程(8): 飞算JavaAI智能分析搭建自己的MCP Server
  • godot小白入门前的一些前置知识了解
  • 深入了解linux系统—— 共享内存
  • BERT
  • 【数据结构】图论基石:最小生成树(MST)实战精解与Prim/Kruskal算法详解
  • LLMs之PE:system-prompts-and-models-of-ai-tools的简介、使用方法、案例应用之详细攻略
  • 掌握 HTTP 请求:理解 cURL GET 语法
  • 基于dify的营养分析工作流:3分钟生成个人营养分析报告
  • 【HarmonyOS5】掌握UIAbility启动模式:Singleton、Specified、Multiton
  • 探究 Java SPI 原理与实战_打造高扩展性的应用架构
  • 【笔记】结合 Conda任意创建和配置不同 Python 版本的双轨隔离的 Poetry 虚拟环境
  • Razor编程中@Helper的用法大全