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) - 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)
- 打开 Rufus
- 参数(本次最初尝试UEFI模式,后续修复确认是BIOS)
- 设备:选中U盘
- 引导选择:选中
ubuntu-22.04.1-desktop-amd64.iso - 分区类型:GPT,目标系统:UEFI(非CSM)
- 文件系统:FAT32,簇大小:默认(不要固定4096,否则报簇大小无效)
- 点击开始,弹窗选择【以ISO镜像模式写入】
- 烧录完成,安全弹出U盘,插到故障机后置USB口
4、U盘启动,进入Live试用环境
- 开机按F12调出启动菜单,选择U盘启动项
- 出现
perform MOK managerment界面 → 选择Continue boot - 进入Ubuntu欢迎页,选择【试用Ubuntu(Try Ubuntu)】,不要点安装
- 打开终端
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、经验总结
- 区分启动模式:
- UEFI:存在 vfat 格式ESP EFI分区,使用
grub-efi-amd64 - Legacy BIOS:无vfat ESP分区,使用
grub-pc / i386-pc
- UEFI:存在 vfat 格式ESP EFI分区,使用
grub_calloc not found根本原因:grub核心镜像与模块版本不匹配- 修复前优先执行fsck,根分区如果是ro只读,chroot、apt都会失败
- Rufus簇大小报错:簇大小选择默认,不要手动指定4096
- 双磁盘环境,分区极易混淆,必须先用
lsblk -f核对文件系统类型
9、兜底预案(修复失败时)
保留/home分区重装:
- Rufus参数改为:分区方案 MBR,目标系统 BIOS or UEFI-CSM
- 安装页面选择【其他选项】
- sda1 挂载
/,勾选格式化 - home分区挂载
/home,不格式化 - 引导器安装位置:
/dev/sda
- sda1 挂载
如果你需要,我再把这份文档导出成docx文件。