首页 > 志趣人生 > Ubuntu系统网站首页Ubuntu系统

Ubuntu GRUB 完整运维实操手册

本文为Ubuntu GRUB引导全套实操手册,涵盖预防配置与故障急救两大场景。先讲解修改系统配置,永久显示GRUB启动菜单,方便故障时进入修复命令行。针对开机卡在grub>提示符的引导损坏问题,提供分区查询、多方式校验系统根分区的完整步骤,支持设备名、UUID两种方式手动临时启动系统。成功进入系统后,配套grub-install、update-grub命令永久修复引导。同时整理分区命名规则、双系统适配、常见报错排错方案,无需救援U盘即可就地修复Ubuntu引导,适合运维及双系统用户查阅。

Ubuntu GRUB 完整运维实操手册

文档总览

本文整合三篇原版教程,分为三大核心模块:

  1. 模块一:正常系统下永久显示GRUB启动菜单(提前配置,预防开机无法进入GRUB命令行)

  2. 模块二:grub> 命令行模式完整实操——查找、验证Linux根分区(系统引导损坏、丢失grub.cfg时手动定位系统盘)

  3. 模块三:找到根分区后手动启动Ubuntu系统 + 故障排查方案适配MBR(msdos)、GPT(gpt)分区表,覆盖单系统、Windows+Ubuntu双系统场景,命令分步拆解、附带验证逻辑与排错思路。

前置基础概念

1. GRUB磁盘分区命名规则

  • GRUB磁盘编号从0开始:hd0 = 第一块硬盘(Linux /dev/sda)、hd1 = 第二块硬盘(/dev/sdb

  • 分区编号规则:

  • MBR分区:(hd0,msdos1) → Linux /dev/sda1

  • GPT分区:(hd0,gpt3) → Linux /dev/sda3

  • 关键映射:hdX,Y 对应系统 /dev/sd(X+1)Y

2. 进入GRUB菜单/命令行快捷键

  1. 开机瞬间按住 Shift 调出隐藏GRUB菜单;

  2. GRUB菜单界面按 C 进入 grub> 命令交互模式;

  3. 命令行输入 help 查看全部可用指令。


模块一:正常Ubuntu系统永久开启GRUB启动菜单

一、问题背景

Ubuntu默认配置:GRUB_TIMEOUT=0 + GRUB_TIMEOUT_STYLE=hidden,开机直接跳过菜单,出现引导故障时无法进入命令行修复,需提前修改配置。

二、完整修改步骤

步骤1:打开终端,编辑GRUB全局配置文件

sudo vim /etc/default/grub
# 新手推荐nano编辑器,操作更简单
sudo nano /etc/default/grub

步骤2:修改核心参数(必改2项,清理冗余隐藏配置)

打开文件后找到以下字段,按标准修改:

# 默认启动项,0代表第一个Ubuntu内核
GRUB_DEFAULT=0
# 核心修改1:菜单停留时长,推荐5/10/15秒,-1为永久等待
GRUB_TIMEOUT=10
# 核心修改2:menu=强制显示完整启动菜单;hidden=隐藏菜单
GRUB_TIMEOUT_STYLE=menu

# 注释/删除以下两行(旧版隐藏参数,会覆盖新配置)
# GRUB_HIDDEN_TIMEOUT=0
# GRUB_HIDDEN_TIMEOUT_QUIET=true

# 内核启动静默参数,保留默认即可
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
GRUB_CMDLINE_LINUX=""

步骤3:保存文件并更新GRUB生效

  1. nano编辑器:Ctrl+O 保存 → 回车确认文件名 → Ctrl+X 退出

  2. vim编辑器:ESC → 输入 :wq 回车保存退出

  3. 执行更新命令,生成新 /boot/grub/grub.cfg

sudo update-grub

步骤4:验证配置

sudo reboot

重启后开机自动显示GRUB菜单,停留10秒,可按C进入命令行。

三、修改后仍不显示菜单的排错方案

  1. BIOS/UEFI快速启动干扰进入主板设置,关闭 Fast BootQuick Boot,保存重启。

  2. Windows双系统覆盖引导重新安装GRUB到硬盘引导区:

# sda替换为你的系统硬盘(不要写sda1分区)
sudo grub-install /dev/sda
sudo update-grub
  1. 配置文件残留隐藏参数 再次打开 /etc/default/grub,全局搜索 GRUB_HIDDEN,全部注释或删除。


模块二:grub> 命令行查找&验证Linux根分区全流程

适用场景:开机直接进入 grub> 提示符,grub.cfg损坏、引导丢失,无法自动启动系统。

阶段1:列出全部磁盘与分区

指令

grub> ls

**GRUB 会按识别顺序依次列出所有硬盘,再列出每块硬盘下全部分区,硬盘编号 hd0、hd1、hd2…… 依次顺延,区分 MBR (msdos) / GPT (gpt)。  **

输出示例(MBR磁盘)

(hd0) (hd0,msdos1) (hd0,msdos2) (hd0,msdos3) (hd0,msdos5)

输出示例(GPT磁盘)

(hd0) (hd0,gpt1) (hd0,gpt2) (hd0,gpt3) (hd0,gpt4)

如果您的计算机有多个磁盘,可能打印的结果如下:

(hd0) (hd0,gpt1) (hd0,gpt2)
(hd1) (hd1,msdos1)
(hd2) (hd2,gpt1) (hd2,gpt4)

分区常规用途区分

| 分区标识 | 分区类型 | 典型用途 | 文件特征 | |--------|--------|--------|--------| | (hd0,msdos1)/(hd0,gpt1) | FAT32 | EFI启动分区 | 存在EFI/目录,无Linux系统目录 | | (hd0,msdos2)/(hd0,gpt2) | swap | 交换分区 | ls读取无文件,无法挂载 | | (hd0,msdos3)/(hd0,gpt3) | ext4 | Ubuntu根分区/ | 包含/etc /boot /usr /home | | (hd0,msdos5)/(hd0,gpt4) | ext4 | /home独立分区 | 仅存在/home目录,无/etc |

关键注意点:

  1. hd 顺序由主板 BIOS/UEFI 启动磁盘顺序决定,插拔硬盘后编号可能变化;

  2. 每块磁盘开头都会单独显示 (hdX) 代表整块磁盘;

  3. MBR 分区后缀写 msdosGPT 磁盘后缀写 gpt

  4. 多盘找系统不用手动挨个试分区,直接执行一下命令可自动跨所有磁盘检索 Ubuntu 系统分区(后面还会提到)。

      search --file --set=root /boot/vmlinuz-*

阶段2:遍历分区,识别Linux根目录(3种筛选方法)

方法1:查看分区根目录,匹配Linux标准目录

循环执行,逐个替换分区标识:

# 示例:检查(hd0,msdos3)分区
grub> ls (hd0,msdos3)/

判定标准(同时存在以下目录即为根分区)etc boot usr var home

快速校验命令(逐个测试):

grub> ls (hd0,msdos3)/etc/
grub> ls (hd0,msdos3)/usr/
grub> ls (hd0,msdos3)/boot/

file not found报错,说明该分区为Linux系统分区。

方法2:检查/boot目录内核文件(最精准)

根分区/boot存放内核镜像,是Ubuntu核心标识:

grub> ls (hd0,msdos3)/boot/

存在以下文件直接锁定根分区

  • vmlinuz-xxx-generic Linux内核文件

  • initrd.img-xxx-generic 内存磁盘镜像

  • grub/ GRUB   配置目录

方法3:GRUB自动搜索关键文件(一键定位)

无需手动遍历,全局搜索系统特征文件,自动设置root变量:

  1. 搜索内核文件(推荐)

grub> search --file --set=root /boot/vmlinuz-*
  1. 搜索GRUB配置文件

grub> search --file --set=root /boot/grub/grub.cfg
  1. 搜索系统挂载配置文件

grub> search --file --set=root /etc/fstab

执行成功后,输入 echo $root 查看自动匹配的分区。

阶段3:深度验证分区(10种可靠校验手段,确认是本机系统)

找到疑似根分区后,必须验证,避免误加载其他系统磁盘。

校验1:读取/etc/fstab(最权威,推荐优先使用)

fstab记录系统永久挂载配置,直接显示根分区设备名/UUID

grub> cat (hd0,msdos3)/etc/fstab

输出关键字段解析:

UUID=xxxx-xxxx / ext4 errors=remount-ro 0 1
# / 代表系统根文件系统,UUID为分区唯一标识

过滤只查看根挂载行:

grub> cat (hd0,msdos3)/etc/fstab | grep " / "

校验2:读取内核启动参数/proc/cmdline

grub> cat (hd0,msdos3)/proc/cmdline

输出示例:

BOOT_IMAGE=/boot/vmlinuz-6.14.0-27-generic root=UUID=1234abcd-xxxx ro quiet splash

root=UUID= 字段直接给出根分区唯一ID。

校验3:读取grub.cfg启动配置

grub> cat (hd0,msdos3)/boot/grub/grub.cfg | grep root=

提取系统预设的root参数。

校验4:读取系统版本/主机名(区分多系统)

# 查看主机名
grub> cat (hd0,msdos3)/etc/hostname
# 查看Ubuntu版本
grub> cat (hd0,msdos3)/etc/os-release
# 查看系统用户列表
grub> cat (hd0,msdos3)/etc/passwd

校验5:查看分区硬件信息parttool

grub> parttool (hd0,msdos3) print

输出会显示分区类型0x83(Linux)、起始扇区、总容量,根分区容量通常为磁盘最大分区。

校验6:长列表查看分区文件ls -l

grub> ls -l (hd0,msdos3)/

可查看文件大小、文件系统格式,ext4格式为Linux根分区标准格式。

阶段4:提取分区唯一UUID(用于稳定启动)

  1. 从fstab提取UUID:

grub> cat (hd0,msdos3)/etc/fstab | grep " / " | awk '{print $1}'
  1. 通过UUID反向锁定分区:

grub> search --fs-uuid --set=root 此处粘贴提取的UUID

模块三:确认根分区后手动启动Ubuntu系统

标准启动流程(2套方案:设备名 / UUID,UUID方案更稳定)

前置操作:设置GRUB根分区变量

# 将分区替换为你找到的根分区
grub> set root=(hd0,msdos3)
# 验证是否设置成功
grub> echo $root

方案1:使用分区设备名启动(/dev/sdaX)

# 1. 加载内核,ro=只读模式,single=单用户救援模式可选
grub> linux /boot/vmlinuz-6.14.0-27-generic root=/dev/sda3 ro
# 2. 加载内存镜像
grub> initrd /boot/initrd.img-6.14.0-27-generic
# 3. 执行启动
grub> boot
  • 如需单用户修复系统,修改linux行末尾添加 single

linux /boot/vmlinuz-6.14.0-27-generic root=/dev/sda3 ro single

方案2:使用UUID启动(推荐,磁盘顺序变动不影响启动)

从fstab复制根分区UUID,替换下方字符串:

grub> linux /boot/vmlinuz-6.14.0-27-generic root=UUID=1234abcd-xxxx-xxxx ro quiet splash
grub> initrd /boot/initrd.img-6.14.0-27-generic
grub> boot

启动成功后永久修复GRUB(避免下次开机仍进grub>)

进入Ubuntu桌面/终端后执行:

# 1. 重装GRUB引导到硬盘
sudo grub-install /dev/sda
# 2. 重新生成启动菜单配置
sudo update-grub
# 3. 重启验证
sudo reboot

全局故障排查合集

1. ls (hdX,Y)/ 提示file not found

  • 分区标识写错,重新执行ls核对磁盘分区列表;

  • GPT磁盘需使用gpt后缀,不能写msdos

2. search命令搜索不到vmlinuz

  • 内核版本号不匹配,使用通配符搜索:

search --file --set=root /boot/vmlinuz-*
  • 系统/boot单独分区,需切换到boot分区执行搜索。

3. boot启动后黑屏/内核崩溃

  • root参数错误,优先使用UUID方式启动;

  • 去掉quiet splash,添加verbose查看启动报错日志;

  • 单用户模式启动,修复磁盘:fsck /dev/sda3

4. grub rescue> 救援模式(命令缺失)

rescue模式无完整命令集,需先加载GRUB模块:

# 找到grub分区后执行
set root=(hd0,msdos3)
set prefix=(hd0,msdos3)/boot/grub
insmod normal
normal
# 自动进入完整grub>命令行

5. 双系统找不到Windows启动项

正常系统终端执行更新扫描其他系统:

sudo update-grub

若无效,开启系统探测:编辑/etc/default/grub,取消注释#GRUB_DISABLE_OS_PROBER=false,再次update-grub。

实操速查流程图

  1. 正常系统:修改/etc/default/grub → update-grub → 永久显示GRUB菜单

  2. 开机进入grub>:ls列出分区 → ls (hdX,Y)/找带/etc/boot的分区 → cat /etc/fstab验证UUID

  3. 手动启动:set root=(hdX,Y) → linux内核路径 root=UUID/设备名 → initrd → boot

  4. 进入系统:grub-install + update-grub 永久修复引导


0
0

文章导航

共有 0 条热心评论

快快抢占沙发吧!

发表评论

Top