首页 > 志趣人生 > Ubuntu系统网站首页Ubuntu系统
Ubuntu GRUB 完整运维实操手册
Ubuntu GRUB 完整运维实操手册
文档总览
本文整合三篇原版教程,分为三大核心模块:
模块一:正常系统下永久显示GRUB启动菜单(提前配置,预防开机无法进入GRUB命令行)
模块二:
grub>命令行模式完整实操——查找、验证Linux根分区(系统引导损坏、丢失grub.cfg时手动定位系统盘)模块三:找到根分区后手动启动Ubuntu系统 + 故障排查方案适配MBR(msdos)、GPT(gpt)分区表,覆盖单系统、Windows+Ubuntu双系统场景,命令分步拆解、附带验证逻辑与排错思路。
前置基础概念
1. GRUB磁盘分区命名规则
GRUB磁盘编号从0开始:
hd0= 第一块硬盘(Linux/dev/sda)、hd1= 第二块硬盘(/dev/sdb)分区编号规则:
MBR分区:
(hd0,msdos1)→ Linux/dev/sda1GPT分区:
(hd0,gpt3)→ Linux/dev/sda3关键映射:
hdX,Y对应系统/dev/sd(X+1)Y
2. 进入GRUB菜单/命令行快捷键
开机瞬间按住
Shift调出隐藏GRUB菜单;GRUB菜单界面按
C进入grub>命令交互模式;命令行输入
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生效
nano编辑器:
Ctrl+O保存 → 回车确认文件名 →Ctrl+X退出vim编辑器:
ESC→ 输入:wq回车保存退出执行更新命令,生成新
/boot/grub/grub.cfg:
sudo update-grub
步骤4:验证配置
sudo reboot
重启后开机自动显示GRUB菜单,停留10秒,可按C进入命令行。
三、修改后仍不显示菜单的排错方案
BIOS/UEFI快速启动干扰进入主板设置,关闭
Fast Boot、Quick Boot,保存重启。Windows双系统覆盖引导重新安装GRUB到硬盘引导区:
# sda替换为你的系统硬盘(不要写sda1分区) sudo grub-install /dev/sda sudo update-grub
配置文件残留隐藏参数 再次打开
/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 |
关键注意点:
hd顺序由主板BIOS/UEFI启动磁盘顺序决定,插拔硬盘后编号可能变化;每块磁盘开头都会单独显示 (
hdX) 代表整块磁盘;MBR分区后缀写msdos,GPT磁盘后缀写gpt;多盘找系统不用手动挨个试分区,直接执行一下命令可自动跨所有磁盘检索 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-genericLinux内核文件initrd.img-xxx-generic内存磁盘镜像grub/GRUB 配置目录
方法3:GRUB自动搜索关键文件(一键定位)
无需手动遍历,全局搜索系统特征文件,自动设置root变量:
搜索内核文件(推荐)
grub> search --file --set=root /boot/vmlinuz-*
搜索GRUB配置文件
grub> search --file --set=root /boot/grub/grub.cfg
搜索系统挂载配置文件
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(用于稳定启动)
从fstab提取UUID:
grub> cat (hd0,msdos3)/etc/fstab | grep " / " | awk '{print $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。
实操速查流程图
正常系统:修改
/etc/default/grub→ update-grub → 永久显示GRUB菜单开机进入grub>:
ls列出分区 →ls (hdX,Y)/找带/etc/boot的分区 → cat /etc/fstab验证UUID手动启动:set root=(hdX,Y) → linux内核路径 root=UUID/设备名 → initrd → boot
进入系统:grub-install + update-grub 永久修复引导

快快抢占沙发吧!