《Ubuntu系统GRUB引导修复操作记录》

1、软件镜像下载地址

  1. Ubuntu 22.04.1 desktop-amd64 镜像 国内镜像(推荐,速度快): [http://ftp.halifax.rwth-aachen.de/ubuntu-releases/jammy/ubuntu-22.04.1-desktop-amd64.iso](http://ftp.halifax.rwth-aachen.de/ubuntu-releases/jammy/ubuntu-22.04.1-desktop-amd64.iso) 官方历史版本页:Ubuntu 22.04.5 LTS (Jammy Jellyfish)
  2. Rufus(U盘烧录工具) 官网:Rufus - The Official Website (Download, New Releases) 直接下载:https://github.com/pbatard/rufus/releases/download/v4.15/rufus-4.15.exe

备注:balenaEtcher 本次报错(requestMetadata is not a function),弃用,改用 Rufus。


2、故障现象

开机进入GRUB报错:grub_calloc not found,无法进入Ubuntu系统。 初步误判为UEFI模式,后排查确认:本机为 Legacy BIOS(MBR)启动,无vfat格式EFI分区。

3、制作Ubuntu Live启动盘(Windows)

  1. 打开 Rufus
  2. 参数(本次最初尝试UEFI模式,后续修复确认是BIOS)
    • 设备:选中U盘
    • 引导选择:选中 ubuntu-22.04.1-desktop-amd64.iso
    • 分区类型:GPT,目标系统:UEFI(非CSM)
    • 文件系统:FAT32,簇大小:默认(不要固定4096,否则报簇大小无效)
  3. 点击开始,弹窗选择【以ISO镜像模式写入】
  4. 烧录完成,安全弹出U盘,插到故障机后置USB口

4、U盘启动,进入Live试用环境

  1. 开机按F12调出启动菜单,选择U盘启动项
  2. 出现 perform MOK managerment 界面 → 选择 Continue boot
  3. 进入Ubuntu欢迎页,选择【试用Ubuntu(Try Ubuntu)】,不要点安装
  4. 打开终端

5、分区信息排查(关键踩坑记录)

执行查看分区命令:

复制代码
lsblk -f

输出摘要:

  • sdc1:U盘 /cdrom(squashfs,live系统)
  • sda1:Ubuntu根分区(ext4,/)
  • sdb1:NTFS,Windows系统保留分区,不是EFI分区
  • sdb2:Windows数据盘 ✅ 结论:没有vfat ESP分区,系统是 Legacy BIOS(MBR) 模式,不能使用grub-efi,使用grub-pc

踩坑点:一开始误以为sdb1是EFI分区,反复挂载 /boot/efi 失败,浪费大量时间;EFI分区必须是vfat格式。

6、chroot 修复GRUB流程(BIOS模式)

6.1 检查修复根分区文件系统

复制代码
# 卸载根分区
sudo umount /dev/sda1
# 检查修复ext4
sudo fsck -Vf /dev/sda1

等待输出 clean,代表文件系统修复完成。

6.2 挂载根分区与虚拟文件系统

BIOS模式不需要挂载 /boot/efi

复制代码
sudo mount /dev/sda1 /mnt

sudo mount --bind /dev /mnt/dev
sudo mount --bind /proc /mnt/proc
sudo mount --bind /sys /mnt/sys
sudo mount --bind /run /mnt/run

6.3 进入chroot环境

复制代码
sudo chroot /mnt /bin/bash

6.4 重装BIOS版本Grub

复制代码
# 指定i386-pc 即BIOS目标
grub-install --target=i386-pc /dev/sda
# 更新grub配置
update-grub

⚠️ grub-install 参数是整块磁盘 /dev/sda,不是sda1分区

6.5 退出、卸载,重启

复制代码
exit
sudo umount -R /mnt

拔掉U盘,重启主机。

7、修复结果

重启正常进入Ubuntu系统,grub_calloc not found 故障解决。

8、经验总结

  1. 区分启动模式:
    • UEFI:存在 vfat 格式ESP EFI分区,使用 grub-efi-amd64
    • Legacy BIOS:无vfat ESP分区,使用 grub-pc / i386-pc
  2. grub_calloc not found 根本原因:grub核心镜像与模块版本不匹配
  3. 修复前优先执行fsck,根分区如果是ro只读,chroot、apt都会失败
  4. Rufus簇大小报错:簇大小选择默认,不要手动指定4096
  5. 双磁盘环境,分区极易混淆,必须先用 lsblk -f 核对文件系统类型

9、兜底预案(修复失败时)

保留/home分区重装:

  1. Rufus参数改为:分区方案 MBR,目标系统 BIOS or UEFI-CSM
  2. 安装页面选择【其他选项】
    • sda1 挂载 /,勾选格式化
    • home分区挂载 /home,不格式化
    • 引导器安装位置:/dev/sda

如果你需要,我再把这份文档导出成docx文件。

相关推荐
水饺编程2 小时前
第2章:Linux 基础,删除用户
linux·c语言·汇编
Novproxy_Z2 小时前
机房 IP 和住宅 IP 怎么区分?IP ASN、归属信息检测脚本
linux·网络·tcp/ip
2601_965454232 小时前
AI视频制作:做历史建筑视频,宫殿园林的老图难找,AI怎么自动配古建素材?
运维·人工智能·音视频
mounter6252 小时前
深入理解 Linux blk-iocost:基于虚拟时间的 I/O 资源控制与 BPF 扩展
linux·linux kernel·kernel
码少女2 小时前
Linux——网络层-IP协议以及路由选择
linux·网络·网络协议·tcp/ip
Ivanqhz2 小时前
MoE 原理、TC/EC 路由、LSH-MoE 与负载均衡浅析
运维·网络·人工智能·深度学习·算法·机器学习·负载均衡
Starry-sky(jing)3 小时前
crane 下载镜像:不连接 Docker,3 步准备并校验 ARM64 离线包
运维·docker·arm64·crane
qeen873 小时前
【Linux】Ext2文件系统介绍
linux·服务器
古法老登瞎折腾3 小时前
大数据智能运维实战(八):从调度任务追到计算引擎——补齐排查链路
java·大数据·运维·spring ai·mcp