Grub2启动项的修改和相关操作命令

简介: **GRUB2**是Linux的主要引导加载程序,用于启动时显示菜单。要修改启动项,应编辑`/etc/default/grub`,然后运行`grub-mkconfig -o /boot/grub/grub.cfg`更新配置,最后确保`grub.cfg`只读。若需修复引导问题,可启动到Ubuntu Live CD/DVD,挂载根和boot分区,重新安装GRUB2,并根据需要修复`grub.cfg`或Windows引导项。遵循此指南,能安全管理GRUB2并解决引导问题。

引言

GRUB2(Grand Unified Bootloader 2)作为现代Linux发行版中的主要引导加载程序,负责在系统启动时呈现启动选项菜单。然而,有时GRUB2配置可能需要调整,比如去除不需要的启动项或修复因升级或其他更改引起的引导问题。本文将指导你如何安全地修改GRUB2启动项,并修复可能遇到的引导问题。

修改GRUB2启动项

虽然直接编辑/boot/grub/grub.cfg文件是一种可行的方法,但这并非官方推荐的做法。GRUB2的设计理念是通过修改源配置文件并重新生成grub.cfg来更新启动项。以下是推荐的流程:

  1. 编辑源配置文件
    首先,编辑/etc/default/grub文件,这是最直观且推荐的配置修改点。
  2. Bash
sudo gedit /etc/default/grub
  1. 更新GRUB配置
    执行以下命令,生成新的grub.cfg文件。
  2. Bash
sudo grub-mkconfig -o /boot/grub/grub.cfg
  1. 这个命令会根据你的配置文件自动生成grub.cfg,确保所有更改都被应用。
  2. 权限恢复
    更新后,记得将grub.cfg文件的权限恢复为只读状态。
  3. Bash
sudo chmod 444 /boot/grub/grub.cfg

GRUB2引导修复

当Ubuntu系统升级或遇到引导问题时,可以通过以下步骤修复GRUB2引导:

  1. 启动至Live CD/DVD或USB
    使用Ubuntu Live CD/DVD或USB启动进入系统。
  2. 挂载根分区和boot分区
    确定你的根分区和boot分区位置,然后挂载它们。
  3. Bash
1sudo mount /dev/sda7 /mnt
2sudo mount /dev/sda6 /mnt/boot
  1. 如果你的/boot分区和根分区在同一个分区,只需要挂载根分区即可。
  2. 重新安装GRUB2
    使用grub-install命令重新安装GRUB2到指定设备。
  3. Bash
sudo grub-install --root-directory=/mnt /dev/sda
  1. 更新启动项
    如果需要修改启动项,按照之前提到的步骤编辑/etc/default/grub,然后重新生成grub.cfg
  2. 修复Windows引导项
    若需要修复Windows引导项,修改grub.cfg中的相关条目。
  3. Diff
- menuentry "Microsoft Windows XP Professional" {
-   set root=(hd0,1)
-   search --no-floppy --fs-uuid --set 4a807ca0807c93e3
-   drivemap -s (hd0) $root
-   chainloader +1 }
+ menuentry "Microsoft Windows XP Professional" {
+   set root=(hd0,1)
+   chainloader +1 }
  1. 保存并重启
    完成所有修改后,保存文件并重启计算机。

结论

通过遵循上述指南,你可以安全地管理GRUB2启动项并修复潜在的引导问题。记住,GRUB2的配置更改应该通过/etc/default/grub文件进行,而不是直接修改grub.cfg。这样可以确保每次系统更新或内核升级后,你的定制设置依然保留。




以下为参考内容, 介绍Grub2的相关知识




GRUB2基础教程与配置详解

GRUB2启动过程概览

GRUB2,作为现代Linux发行版中的首选引导加载器,其工作流程包括将引导文件boot.img写入主引导记录(MBR),通常位于第一硬盘。启动过程中,GRUB2依据MBR信息定位启动分区,加载core.imggrub.cfg配置文件,最终展示启动菜单供用户选择。菜单界面支持通过键盘导航,编辑选定项,以及执行额外命令。

GRUB2常用命令

GRUB2提供一系列强大且灵活的命令集,用于系统引导的管理和故障排除:

  1. help - 查看命令用法。
  2. set - 设置变量值。
  3. default - 定义默认引导的操作系统。
  4. timeout - 设置无用户输入时自动引导的等待时间。
  5. root - 指定用于启动系统的分区。
  6. insmod & rmmod - 加载或移除模块。
  7. drivemap - 映射驱动器,主要用于Windows系统引导。
  8. ls - 列出设备和分区。
  9. search - 搜索特定文件或标签。
  10. loopback - 建立回环设备。
  11. pager - 分页显示输出。
  12. linux - 替代kernel命令,用于指定内核。
  13. chainloader - 调用另一个引导加载器。

GRUB2配置文件详解

grub.cfg是GRUB2的核心配置文件,由脚本grub-mkconfig自动生成。它包含了从系统启动到菜单展示的全部细节,如文件系统模块加载、显示设置、菜单样式以及具体的启动项配置。

核心配置段落解析
  • /etc/grub.d/00_header - 包含基本初始化设置,如默认启动项、模块加载、显示模式等。
  • /etc/grub.d/05_debian_theme - 设置菜单颜色主题。
  • /etc/grub.d/10_linux - 自动添加当前root分区的Linux引导项。
  • /etc/grub.d/20_memtest86+ - 添加内存测试选项。
  • /etc/grub.d/30_os-prober - 自动探测并添加其他操作系统引导项。
  • /etc/grub.d/30_otheros - 手动添加的非Linux系统引导项。
  • /etc/grub.d/40_custom - 用户自定义启动项。
示例配置

Bash

menuentry "CentOS-base, (2.6.18-164.el5)" {
    insmod ext2
    set root=(hd0,3)
    linux /boot/vmlinuz-2.6.18-164.el5 ro root=LABEL=/ rhgb quiet
    initrd /boot/initrd-2.6.18-164.el5.img
}

Bash

menuentry "Ubuntu, Linux 2.6.31-14-generic-pae" {
    recordfail=1
    if [ -n ${have_grubenv} ]; then save_env recordfail; fi
    set quiet=1
    insmod ext2
    set root=(hd0,1)
    search --no-floppy --fs-uuid --set 91d7cb26-bd24-4bbf-9423-c81bb9be0a06
    linux /boot/vmlinuz-2.6.31-14-generic-pae root=UUID=91d7cb26-bd24-4bbf-9423-c81bb9be0a06 ro quiet splash
    initrd /boot/initrd.img-2.6.31-14-generic-pae
}

结论

通过深入理解GRUB2的工作原理及其配置文件结构,用户能够更有效地管理多系统环境,实现定制化的启动流程,以及解决启动阶段可能出现的各种问题。掌握GRUB2命令和配置技巧,是Linux系统管理员的一项必备技能。



相关文章
|
存储 Linux
Linux系统LVM信息丢失处理方法
Linux的LVM会存储用户对PV/VG/LV的每一步操作,并自动把当前的VG的信息备份到一个文件里面,该文件为/etc/lvm/backup/VG名,本文描述了当信息丢失时如何找回的处理方法。
11020 60
Linux系统LVM信息丢失处理方法
|
异构计算
PCIe链路训练(Link Training) Debug案例解析
有关Xilin FPGA开发版PCIe link up issue debug过程的文章,小编把里面提到的一个案例在这里给大家分享一下。
|
数据中心 Anolis
性能优化特性之:LSE指令集编译优化
本文介绍了倚天实例上的编译优化特性:LSE,并从优化原理、使用方法进行了详细阐述。
|
存储
PCIe VPD (Vital Product Data) 介绍
PCIe VPD (Vital Product Data) 介绍
4768 0
PCIe VPD (Vital Product Data) 介绍
|
KVM 虚拟化
virsh的日常管理命令
文章介绍了如何使用virsh命令来管理KVM虚拟机,包括创建、查看、关闭、启动、强制关机、重启、备份、删除、恢复、修改名称、挂起、恢复挂起、查询VNC端口号、设置开机自启动和禁用开机自启动等操作,以及如何配置KVM的console来替代VNC连接虚拟机。
1387 2
virsh的日常管理命令
|
Linux
Linux升级命令yum upgrade和yum update,有什么区别?
在日常开发工作中,根据不同的项目会需要配置环境和包,有时候会由于版本问题出现错误,这个时候通常就需要执行 update或者 upgrade命令,这里简要介绍一下区别。
4502 0
Linux升级命令yum upgrade和yum update,有什么区别?
|
网络协议 Ubuntu Linux
飞腾CPU如何使用PXE方式安装麒麟桌面系统?
飞腾CPU如何使用PXE方式安装麒麟桌面系统?
5164 0
飞腾CPU如何使用PXE方式安装麒麟桌面系统?
|
Linux KVM 虚拟化
如何判断一个linux机器是物理机还是虚拟机
使用`dmesg`检查"Hypervisor detected"可识别Xen PV虚拟机;`lscpu`显示"Hypervisor vendor"表明KVM虚拟化;"Virtualization: VT-x"指示实体机;`systemd-detect-virt`无法准确判断;`dmidecode -t 1`在某些节点上无法区分虚拟与实体。
942 0