Linux中如何修改GRUB配置文件?

在Linux系统中,GRUB(Grand Unified Bootloader)是广泛使用的引导加载程序,负责在系统启动时加载内核并初始化系统,修改GRUB配置文件可以自定义启动选项、默认启动项、超时时间等,满足个性化或故障排查需求,本文将详细介绍Linux中修改GRUB配置文件的完整流程,包括配置文件位置、关键参数解析、修改步骤及注意事项。

linux中如何修改grub配置文件

GRUB配置文件的位置与作用

GRUB的配置文件分为两类:用户可编辑的配置源文件GRUB实际加载的配置文件

  • 用户配置源文件/etc/default/grub,这是主要的配置文件,用于设置全局启动参数(如超时时间、默认启动项、内核参数等)。
  • 自动生成的配置文件/boot/grub2/grub.cfg(CentOS/RHEL/Rocky Linux等)或/boot/grub/grub.cfg(Ubuntu/Debian等),该文件由grub2-mkconfig(或update-grub)命令根据/etc/default/grub/etc/grub.d/目录下的脚本自动生成,不建议直接修改,否则会被覆盖。

修改GRUB配置前的准备工作

  1. 备份配置文件
    为防止修改错误导致系统无法启动,需先备份/etc/default/grub

    sudo cp /etc/default/grub /etc/default/grub.bak
  2. 确认GRUB版本
    现代Linux系统普遍使用GRUB 2,可通过以下命令确认:

    grub-install --version  # 输出类似 "grub-install (GRUB) 2.06"

修改/etc/default/grub文件的核心参数

/etc/default/grub是文本文件,使用sudo nano /etc/default/grubsudo vim /etc/default/grub打开后,可修改以下关键参数(以下参数以CentOS/RHEL为例,Ubuntu/Debian路径略有不同但参数一致):

关键参数说明(表格形式)

参数名 作用 示例值 取值范围/说明
GRUB_DEFAULT 设置默认启动项 saved0 saved:使用上次选择的启动项;0:第一个菜单项;也可指定菜单标题(如”Ubuntu”)。
GRUB_TIMEOUT 菜单显示超时时间(秒),超时后自动启动默认项 5 0-999,0表示不显示菜单直接启动默认项(需配合GRUB_HIDDEN_TIMEOUT)。
GRUB_HIDDEN_TIMEOUT 隐藏菜单的等待时间(秒),按ESC可显示完整菜单 0 0-999,若设置为非0且GRUB_TIMEOUT=0,则启动时隐藏菜单,按ESC后显示。
GRUB_CMDLINE_LINUX 传递给Linux内核的启动参数(如硬件驱动、调试模式等) console=ttyS0,115200 nomodeset 多个参数用空格分隔,常见参数:quiet(减少启动日志)、nomodeset(禁用显卡驱动)、resume=/dev/sda2(指定交换分区)。
GRUB_TERMINAL_OUTPUT 指定GRUB菜单的输出终端 consolegfxterm console:纯文本终端;gfxterm:图形终端(需主题支持)。
GRUB_THEME 设置GRUB菜单主题(需自定义主题文件) "/boot/grub2/themes/system/theme.txt" 主题文件需位于/boot/grub2/themes/目录下,且.txt文件包含主题配置。

修改后的配置更新与生效

修改/etc/default/grub后,需通过命令生成新的grub.cfg文件,否则修改不会生效,不同发行版的命令不同:

CentOS/RHEL/Rocky Linux/Fedora

sudo grub2-mkconfig -o /boot/grub2/grub.cfg

Ubuntu/Debian/Mint

sudo update-grub

执行后,终端会显示类似“Generating grub configuration done”的提示,表示配置已更新,重启系统(sudo reboot)即可看到修改后的GRUB菜单。

linux中如何修改grub配置文件

高级配置:添加自定义启动项

若需添加自定义启动项(如进入救援模式、使用不同内核版本),可通过修改/etc/grub.d/40_custom文件实现(该文件专门用于用户自定义菜单项)。

示例:添加一个“Rescue Mode”启动项

  1. 编辑/etc/grub.d/40_custom
    sudo nano /etc/grub.d/40_custom
  2. 添加以下内容(以Ubuntu为例,路径需根据实际系统调整):
    menuentry "Rescue Mode" {
        insmod part_gpt      # 加载GPT分区模块(若为MBR则用part_msdos)
        insmod ext2          # 加载根分区文件系统模块(如ext4、xfs等)
        set root='hd0,gpt2'  # 根分区设备(可通过`ls`命令在GRUB菜单中查看)
        linux /boot/vmlinuz-5.15.0-78-generic root=/dev/sda2 ro single
        initrd /boot/initrd.img-5.15.0-78-generic
    }
  3. 保存文件后,执行sudo update-grub(Ubuntu)或sudo grub2-mkconfig -o /boot/grub2/grub.cfg(CentOS),重启即可在GRUB菜单中看到“Rescue Mode”选项。

注意事项

  1. 避免直接修改grub.cfg:该文件由系统自动生成,手动修改会被覆盖,导致配置丢失。
  2. 内核参数谨慎修改:错误的内核参数(如root=指定的分区错误)可能导致系统无法启动,建议先查阅文档或测试。
  3. 多系统启动顺序:若安装多系统(如Windows+Linux),GRUB会自动检测并添加菜单项,可通过GRUB_DEFAULT设置默认启动的系统。

相关问答FAQs

Q1:修改GRUB配置后重启发现无法进入系统,如何解决?

解答

  1. 恢复备份:若提前备份了/etc/default/grub,可通过sudo cp /etc/default/grub.bak /etc/default/grub恢复,然后重新生成配置并重启。
  2. 救援模式:启动时按ESC键进入GRUB菜单,选择“Advanced options”中的“Recovery mode”,进入后选择“root”终端,手动恢复配置文件。
  3. 重置GRUB:若无法进入系统,可使用Live USB启动,挂载系统根分区(如sudo mount /dev/sda2 /mnt),然后sudo chroot /mnt,执行grub2-mkconfig -o /boot/grub2/grub.cfg(CentOS)或update-grub(Ubuntu)重新生成配置。

Q2:如何为不同Linux发行版设置不同的内核启动参数?

解答
可通过GRUB_CMDLINE_LINUX_DEFAULTGRUB_CMDLINE_LINUX组合实现:

  • 公共参数:在GRUB_CMDLINE_LINUX中设置所有系统共用的参数(如console=tty1)。
  • 默认参数:在GRUB_CMDLINE_LINUX_DEFAULT中设置默认启动项的参数(如quiet)。
  • 自定义参数:在/etc/grub.d/40_custom中为不同系统添加独立菜单项,指定各自的GRUB_CMDLINE_LINUX

为Ubuntu设置quiet,为CentOS设置nomodeset,可在/etc/grub.d/40_custom中添加:

linux中如何修改grub配置文件

menuentry "Ubuntu" {
    linux /boot/vmlinuz-5.15.0-78-generic root=/dev/sda1 quiet
    initrd /boot/initrd.img-5.15.0-78-generic
}
menuentry "CentOS" {
    linux /boot/vmlinuz-3.10.0-1160.el7.x86_64 root=/dev/sda2 nomodeset
    initrd /initramfs-3.10.0-1160.el7.x86_64.img
}

执行更新命令后,两个系统将使用各自的内核参数启动。

原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/27728.html

(0)
酷番叔酷番叔
上一篇 2025年9月21日 18:16
下一篇 2025年9月21日 18:33

相关推荐

  • Linux如何显示文件行号?

    cat 命令 + -n 参数适用场景:快速查看小型文件(避免大文件卡顿),命令示例:cat -n filename.txt输出效果: 1 Line 1 content 2 Line 2 content 3 Line 3 content注意:-n 为所有行编号(包括空行),-b 可跳过空行编号(cat -b fi……

    2025年7月29日
    10100
  • cdlinux写入u盘后如何用u盘启动电脑?

    将CDLinux写入U盘后,要让电脑从U盘启动,需经历“准备工作-写入U盘-设置启动-启动验证”四个关键步骤,以下是详细操作指南,涵盖不同系统环境下的写入方法及常见问题解决,帮助新手顺利完成启动盘制作与启动流程,前期准备工作在写入U盘前,需确认以下要素,避免操作中途出现故障:所需工具与材料CDLinux镜像文件……

    2025年9月25日
    6800
  • Linux如何高效去除文件头几行?

    方法1:使用 tail 命令(推荐简单场景)原理:从文件末尾反向计算行数命令:tail -n +K filename-n +K:K代表从第K行开始输出(例如+4表示跳过前3行)示例:# 原始文件内容(共6行)Line1Line2Line3Line4Line5Line6# 跳过前3行(保留4-6行)tail -n……

    2025年6月17日
    11200
  • Linux如何运行shell脚本?正确步骤与方法详解

    Linux系统中,Shell是用户与内核之间的核心桥梁,作为命令解释器,它接收用户输入的命令,解析后交给内核执行,并将结果返回给用户,理解Linux如何运行Shell,需要从Shell的定义、类型、运行方式、脚本执行及环境配置等多个维度展开,Shell的定义与核心作用Shell本质上是一个程序,位于Linux操……

    2025年8月28日
    9000
  • 如何查找Linux内核API?方法、文档与源码实用指南

    查找Linux内核API是内核开发、驱动编写或系统优化中的关键环节,掌握高效的方法能显著提升开发效率,以下是几种主流的查找途径和实用技巧,结合工具与资源,帮助开发者准确定位所需API,官方文档:最权威的API参考Linux内核官方文档是API信息的首要来源,其内容经过内核维护者审核,准确性和时效性最高,内核文档……

    2025年10月3日
    5800

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信