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

Linux-GRUB全面指南

在这里插入图片描述

一、GRUB 是什么?

GRUB 是 Linux 及其他类 Unix 系统中最常用的 启动引导程序,负责在计算机启动时加载操作系统内核,并移交控制权。它是系统启动的第一环,直接影响能否正常进入操作系统。

核心作用
  1. 硬件初始化:在操作系统接管前,初始化硬件(如磁盘、文件系统)。
  2. 多重引导支持:允许选择启动多个操作系统(如 Linux、Windows)或同一系统的不同内核版本。
  3. 内核加载:加载 Linux 内核(vmlinuz)和初始化内存盘(initramfs)。

二、GRUB 的核心组件与工作流程

1. 组件结构
  • GRUB 镜像:存储在磁盘的 MBR(BIOS)EFI 分区(UEFI),用于启动引导程序。
  • 配置文件
    • /boot/grub/grub.cfg:主配置文件(自动生成,不可直接编辑)。
    • /etc/default/grub:用户自定义配置(如超时时间、默认启动项)。
    • /etc/grub.d/:生成菜单的脚本目录(可自定义启动项)。
  • 主题资源:位于 /boot/grub/themes/,包含图片、字体和样式文件。
2. 启动流程
  1. BIOS/UEFI 阶段:硬件自检后,加载 GRUB 引导程序。
  2. GRUB 阶段
    • 读取 /boot/grub/grub.cfg,显示启动菜单。
    • 根据用户选择或默认配置,加载内核和 initramfs
  3. 内核阶段:内核初始化,挂载根文件系统,启动系统服务(如 systemd)。

三、GRUB 关键配置详解

1. 主配置文件 /etc/default/grub

通过修改此文件控制 GRUB 行为,常用参数如下:

参数作用示例值
GRUB_DEFAULT默认启动项(数字或 saved 表示上次选择的项)saved
GRUB_SAVEDEFAULT是否保存上次选择的启动项(需 GRUB_DEFAULT=savedtrue
GRUB_TIMEOUT_STYLE菜单显示方式:hidden(隐藏)/menu(显示)/countdown(倒计时)menu
GRUB_TIMEOUT菜单等待时间(秒),0 表示直接启动默认项10
GRUB_CMDLINE_LINUX传递给内核的通用参数(所有启动项生效)"quiet splash"
GRUB_CMDLINE_LINUX_DEFAULT仅默认启动项的内核参数(可调试用,如 nomodeset"text"
GRUB_THEME主题文件路径/boot/grub/themes/my_theme/theme.txt
GRUB_DISABLE_OS_PROBER是否禁用其他操作系统检测(false 启用)false
2. 生成配置文件的命令
sudo update-grub        # Debian/Ubuntu
sudo grub2-mkconfig -o /boot/grub2/grub.cfg  # RHEL/CentOS/Fedora
3. 自定义启动项

/etc/grub.d/ 目录中添加自定义脚本(如 40_custom):

#!/bin/sh
exec tail -n +3 $0menuentry "My Custom OS" {set root=(hd0,1)chainloader +1
}

赋予执行权限并更新配置:

sudo chmod +x /etc/grub.d/40_custom
sudo update-grub

四、GRUB 主题定制(以 Ubuntu 22.04 为例)

1. 主题结构
my_theme/
├── theme.txt          # 主题配置文件
├── background.png     # 背景图片(PNG 格式)
├── icons/             # 菜单项图标
└── fonts/             # 字体文件(.pf2 格式)
2. 关键配置项(theme.txt)
# 基础信息
title: My Theme
resolution: 1920x1080# 背景与字体
background_image: "background.png"
item_color: "#FFFFFF"
selected_item_color: "#FF0000"
terminal-font: "fonts/ubuntu.pf2"# 布局调整
+ boot_menu {left = 20%top = 30%width = 60%height = 40%
}
3. 安装与启用
# 复制主题文件
sudo mkdir -p /boot/grub/themes/my_theme
sudo cp -r ~/Downloads/my_theme/* /boot/grub/themes/my_theme/# 修改 GRUB 配置
sudo nano /etc/default/grub
# 添加或修改:
GRUB_THEME="/boot/grub/themes/my_theme/theme.txt"# 更新配置并重启
sudo update-grub
sudo reboot

五、常见问题与解决方案

1. GRUB 菜单不显示
  • 原因GRUB_TIMEOUT_STYLE=hiddenGRUB_TIMEOUT=0
  • 解决
    GRUB_TIMEOUT_STYLE=menu
    GRUB_TIMEOUT=10
    
2. 无法检测其他操作系统(如 Windows)
  • 原因os-prober 未启用。
  • 解决
    sudo apt install os-prober
    sudo nano /etc/default/grub  # 设置 GRUB_DISABLE_OS_PROBER=false
    sudo update-grub
    
3. 主题未生效
  • 排查步骤
    1. 确认主题路径和权限:
      sudo ls -l /boot/grub/themes/my_theme/
      sudo chmod -R 755 /boot/grub/themes/my_theme/
      
    2. 检查 grub.cfg 是否包含主题:
      sudo grep "set theme" /boot/grub/grub.cfg
      
    3. UEFI 系统需将主题复制到 EFI 分区:
      sudo cp -r /boot/grub/themes/my_theme /boot/efi/EFI/ubuntu/themes/
      
4. 启动时卡在 initramfs
  • 原因initramfs 未包含必要驱动或配置。
  • 解决
    sudo update-initramfs -u  # 更新 initramfs
    sudo update-grub
    

六、高级技巧

1. 设置默认启动项
# 列出所有启动项
grep menuentry /boot/grub/grub.cfg# 设置第 2 个启动项为默认(索引从 0 开始)
sudo sed -i 's/GRUB_DEFAULT=0/GRUB_DEFAULT=1/' /etc/default/grub
sudo update-grub
2. 修复 GRUB 引导

若 GRUB 损坏(如被 Windows 覆盖):

# 使用 Live USB 启动后操作
sudo mount /dev/sda1 /mnt          # 挂载根分区
sudo mount /dev/sda2 /mnt/boot/efi # 挂载 EFI 分区(UEFI)
sudo grub-install --root-directory=/mnt /dev/sda
sudo update-grub
3. 使用 Grub Customizer(图形工具)
sudo add-apt-repository ppa:danielrichter2007/grub-customizer
sudo apt update
sudo apt install grub-customizer

七、总结

GRUB 是 Linux 系统启动的核心组件,掌握其配置方法可解决多系统引导、启动故障修复、界面美化等问题。关键点包括:

  1. 理解配置文件 /etc/default/grub 和生成机制。
  2. 熟悉主题定制流程(路径、权限、分辨率适配)。
  3. 掌握常用修复命令(update-grubgrub-install)。

通过灵活调整 GRUB,您不仅能优化启动体验,还能在系统故障时快速恢复,是 Linux 用户必备的技能。

http://www.xdnf.cn/news/3829.html

相关文章:

  • CUDA输出“hello world”
  • 多数据源动态切换
  • 算法每日一题 | 入门-顺序结构-数字反转
  • (38)VTK C++开发示例 ---纹理裁剪
  • C++负载均衡远程调用学习之异步消息任务功能与连接属性
  • CVPR2021 | 重新思考视觉Transformer中的自注意力机制
  • Java学习手册:Spring 生态其他组件介绍
  • 单细胞测序试验设计赏析(一)
  • AWS在跨境电商中的全场景实践与未来生态构建
  • D. 例题3.2.2 整数划分问题
  • 二种MVCC对比分析
  • 学习黑客风险Risk
  • iOS启动优化:从原理到实践
  • 2025年渗透测试面试题总结-拷打题库35(题目+回答)
  • 【C++】:C++17新特性
  • Vivado FPGA 开发 | 创建工程 / 仿真 / 烧录
  • 2845. 统计趣味子数组的数目
  • 【LLaMA-Factory实战】Web UI快速上手:可视化大模型微调全流程
  • The Sims 4 模拟人生 4 [DLC 解锁] [Steam Epic EA] [Windows SteamOS]
  • 《操作系统真象还原》第十二章(2)——进一步完善内核
  • 影刀RPA中新增自己的自定义指令
  • UDP网络编程
  • Xilinx FPGA | 管脚约束 / 时序约束 / 问题解析
  • 安卓基础(悬浮窗)
  • Java中深拷贝与浅拷贝的深入探讨
  • C++类_虚基类
  • IDEA快速上手Maven项目:模板选择 + 多模块拆分
  • Spring Boot 微服务打包为 Docker 镜像并部署到镜像仓库实战案例
  • 合成复用原则(CRP)
  • IDEA回滚代码操作