资讯动态

GRUB引导修复:解决normal.mod not found错误全攻略

发布时间:2026/8/17 19:55:02 来源:尧图企业网站定制
1. 问题根源为什么找不到normal.mod当你满怀期待地重启电脑准备进入熟悉的操作系统时屏幕上却弹出一行冰冷的错误提示file ‘/grub/i386-pc/normal.mod‘ not found紧接着光标就停在了grub的命令行界面。这种感觉就像开车回家到了车库门口却发现钥匙孔不见了门也打不开。要解决这个问题我们首先得搞清楚这把“钥匙”——normal.mod文件它到底去哪儿了以及为什么 GRUB 会找不到它。GRUBGRand Unified Bootloader是大多数 Linux 系统默认的引导程序它的作用是在电脑开机时负责找到并加载操作系统内核。你可以把它想象成一个高级的“前台接待员”。电脑启动时BIOS/UEFI相当于大楼的门卫会把控制权交给这个“接待员”然后由它根据菜单grub.cfg的指示去叫醒躺在硬盘某个房间里的操作系统。normal.mod是 GRUB 的一个核心模块它的作用就是解析并显示那个我们熟悉的图形化启动菜单。没有它GRUB 就失去了“读菜单”的能力只能退回到最基础的命令行模式grub等待你手动输入指令来引导系统。那么这个关键文件为什么会丢失呢根据我处理过的大量案例原因可以归结为以下几个核心场景1.1 引导记录被意外修改或覆盖这是最常见的情况尤其发生在 Windows 和 Linux 双系统环境下。当你更新 Windows 系统特别是大版本升级如 Win10 到 Win11或者使用某些第三方工具修复 Windows 启动问题时Windows 的引导程序会“霸道”地重写硬盘的引导扇区覆盖掉原本的 GRUB。这就好比新来的物业公司把整栋楼的门锁全换了却没给原来的前台接待员留一把新钥匙导致他无法进入前台工作区读取工作手册normal.mod等模块。1.2 分区表或文件系统损坏你的硬盘分区表GPT 或 MBR或者/boot分区本身的文件系统可能出现了错误。如果存放normal.mod文件的分区无法被正确识别或挂载GRUB 自然找不到它。这就像前台接待员按照地址去找工作手册结果发现那个房间的门牌号模糊了或者整个房间都消失了。1.3 GRUB 自身安装不完整或配置错误在安装 Linux 系统时如果 GRUB 的安装过程被中断或者目标安装位置/dev/sdX指定错误可能会导致 GRUB 的核心镜像core.img被写入但其依赖的模块文件包括normal.mod却没有被正确复制到/boot/grub目录下。这是一种“半吊子”安装状态。1.4 BIOS 引导模式与磁盘分区格式不匹配这是一个经典的“门不当户不对”问题。如果你的电脑主板是传统的BIOS引导模式但硬盘却用了GPT分区表那么 GRUB 的安装位置会变得非常特殊。BIOS 无法从 GPT 磁盘的起始部分读取代码因此需要一个特殊的BIOS Boot Partition一个没有文件系统、大约1MB的小分区来存放 GRUB 的core.img。如果这个分区不存在、大小不对或被其他数据占用GRUB 就无法正常加载后续模块从而报错。反之UEFI 引导模式则需要一个 FAT32 格式的EFI 系统分区ESP。混淆两者必然导致引导失败。1.5 硬件变动后的连锁反应有时候问题并非由软件操作直接引起。例如你给电脑更换了硬盘、调整了硬盘的接口顺序SATA端口号、或者像热词中提到的“拆机清灰”后都可能改变硬盘在系统中的设备标识例如从/dev/sda变成了/dev/sdb。而 GRUB 的配置文件里很多路径是写死了硬盘 UUID 或设备名的。一旦硬件标识改变GRUB 按照旧的路径去找当然会扑空。理解这些原因就像医生诊断病情知道了病因才能对症下药。接下来我们就需要进入“救援模式”开始动手修复。2. 修复前的关键准备制作启动盘与确定引导模式在动手修复之前盲目操作可能会让情况变得更糟。做好万全的准备是成功修复的第一步。你需要两样东西一个“救援系统”和一份“建筑图纸”。2.1 制作 Linux 启动 U 盘你的救援系统这是修复操作的基石。你需要另一台能正常工作的电脑制作一个 Linux 启动 U 盘。推荐使用Ubuntu或你原来系统的同发行版镜像因为其兼容性和工具链最全。工具选择在 Windows 下强烈推荐使用Rufus在 macOS 或 Linux 下可以使用dd命令或Etcher。这些工具能创建可引导的 U 盘。操作要点使用 Rufus 时注意界面中的“引导类型选择”。如果您的目标电脑是UEFI 模式请确保选择“GPT”分区方案用于U盘如果是传统 BIOS则选择“MBR”。这能最大化兼容性。制作过程会清空 U 盘所有数据请提前备份。2.2 判定系统的引导模式与分区表你的建筑图纸这是决定修复方法方向的关键一步。错误判断会导致后续所有命令失效。插入启动 U 盘重启电脑。在开机瞬间反复按启动菜单键通常是 F12、F10、F2、Esc 或 Del因主板品牌而异选择从 U 盘启动。进入 Linux 安装界面后选择“试用 Ubuntu”Try Ubuntu进入一个完整的临时桌面环境。打开终端CtrlAltT我们需要使用两个命令来侦察情况检查引导模式执行ls /sys/firmware/efi。如果这个目录存在说明当前系统是以UEFI模式启动的。如果不存在则是以传统 BIOSLegacy模式启动。请务必记下这个结果。检查磁盘分区表执行sudo parted -l。在输出的信息中找到你的系统硬盘通常是/dev/sda或/dev/nvme0n1查看“分区表”一栏。它会明确写着gpt或msdos即 MBR。注意这里有一个至关重要的组合关系需要厘清。normal.mod not found错误在BIOS GPT的组合下尤为典型因为这种组合需要那个特殊的BIOS Boot Partition。而UEFI GPT是现代电脑最标准、最稳定的组合。如果你的检查结果是BIOS MBR那么问题可能更偏向于引导扇区被覆盖。2.3 定位你的原系统分区现在我们需要找到你原来的 Linux 系统安装在哪里。在终端中执行sudo fdisk -l或sudo lsblk -f。对于 BIOS/MBR 系统找到你的Linux 根分区/和/boot 分区如果有独立的话。它们通常具有ext4或xfs等 Linux 文件系统类型。记下其设备名如/dev/sda2。对于 UEFI/GPT 系统除了根分区还必须找到EFI 系统分区ESP。它通常是一个 100MB 到 500MB 大小、文件系统类型为vfat或fat32的分区设备名可能像/dev/sda1。这个分区挂载点通常是/boot/efi。有了这些信息你就拥有了修复所需的全部“地图”。接下来我们就可以开始实质性的修复操作了。3. 核心修复操作从 Live 环境重建 GRUB现在我们进入了最核心的实操环节。请根据你在第二步中确定的引导模式选择对应的修复流程。整个过程需要在刚才进入的 Live 系统试用模式终端中完成。3.1 案例一修复 UEFI GPT 模式下的引导这是目前新电脑最主流的情况。修复思路是挂载原系统的关键分区然后使用chroot命令“切换”到原系统内部最后重新安装和配置 GRUB。挂载原系统分区# 假设你的根分区是 /dev/nvme0n1p5 EFI 分区是 /dev/nvme0n1p1 sudo mount /dev/nvme0n1p5 /mnt # 挂载 EFI 分区到 /mnt/boot/efi 如果目录不存在请先创建 sudo mount /dev/nvme0n1p1 /mnt/boot/efi # 挂载必要的虚拟文件系统为 chroot 做准备 sudo mount --bind /dev /mnt/dev sudo mount --bind /dev/pts /mnt/dev/pts sudo mount --bind /proc /mnt/proc sudo mount --bind /sys /mnt/sys切换根环境chrootsudo chroot /mnt执行成功后你的命令行提示符可能会发生变化这意味着你现在的操作环境已经“穿越”到了你原来的硬盘系统里。重新安装 GRUB 到 EFI 分区# 明确指定 EFI 分区所在的磁盘设备不是分区例如 /dev/nvme0n1 grub-install --targetx86_64-efi --efi-directory/boot/efi --bootloader-idUbuntu --recheck--targetx86_64-efi指定为 UEFI 目标。--efi-directory指定 ESP 分区的挂载点。--bootloader-id这个名称会在主板 UEFI 启动项中显示。重新生成 GRUB 配置文件update-grub这个命令会扫描你硬盘上所有的操作系统包括 Windows并生成新的/boot/grub/grub.cfg菜单文件。退出并重启exit # 退出 chroot 环境 sudo umount -R /mnt # 卸载所有挂载 sudo reboot拔掉 U 盘等待系统重启。此时 GRUB 菜单应该能正常出现了。3.2 案例二修复 BIOS GPT 模式下的引导关键这种组合是导致normal.mod not found的高发区因为它依赖那个易被忽略的BIOS Boot Partition。首先检查并确保 BIOS Boot Partition 存在。 在 Live 系统终端使用sudo gdisk -l /dev/sda将/dev/sda换成你的硬盘查看分区表。你需要找到一个类型代码为EF02的分区其大小通常约为 1MB。如果没有你需要先创建它。如果需要创建可以使用gparted图形工具在 Live 系统里搜索打开从硬盘末尾或其他分区调整出 1MB 未分配空间然后新建分区在“管理标志”或“文件系统”中选择bios_grub。警告此操作有数据丢失风险务必谨慎最好提前备份。挂载原系统分区假设根分区为/dev/sda2sudo mount /dev/sda2 /mnt # BIOS 模式不需要挂载 ESP 分区但需要挂载 /boot如果独立 # sudo mount /dev/sda1 /mnt/boot # 如果 /boot 是独立分区 sudo mount --bind /dev /mnt/dev sudo mount --bind /dev/pts /mnt/dev/pts sudo mount --bind /proc /mnt/proc sudo mount --bind /sys /mnt/syschroot 并重新安装 GRUBsudo chroot /mnt # 将 GRUB 安装到整个磁盘如 /dev/sda而不是某个分区 grub-install --targeti386-pc --recheck /dev/sda--targeti386-pc指定为传统的 BIOSPC目标。/dev/sda必须是整个磁盘设备因为 GRUB 的引导代码需要写入到 GPT 磁盘的 MBR 保护区域和 BIOS Boot Partition。重新生成配置并退出update-grub exit sudo umount -R /mnt sudo reboot3.3 案例三修复 BIOS MBR 模式下的引导这是比较传统的方式修复相对直接。挂载原系统分区同案例二步骤2。chroot 后执行安装grub-install --targeti386-pc --recheck /dev/sda同样目标是整个磁盘/dev/sda因为 GRUB 需要把stage1写入 MBR。执行update-grub并退出重启。实操心得在chroot环境里如果你遇到grub-install命令找不到可以尝试安装 GRUB 包apt install --reinstall grub-pcBIOS或grub-efi-amd64UEFI。这通常能解决因 GRUB 软件包不完整导致的问题。4. 进阶排查与特殊场景处理按照上述流程操作大部分问题都能得到解决。但如果重启后问题依旧或者你遇到了更复杂的情况就需要进行更深层次的排查。以下是一些进阶的排查思路和特殊场景的应对方法。4.1 检查 GRUB 核心模块是否真的缺失在chroot环境下检查/boot/grub目录的内容。ls -la /boot/grub/你应该能看到i386-pcBIOS或x86_64-efiUEFI目录里面包含normal.mod、linux.mod、chainloader.mod等大量.mod文件。如果这个目录空空如也或者根本没有对应架构的目录说明 GRUB 模块根本没有安装进来。此时单纯运行grub-install可能不够需要彻底重装 GRUB 软件包# 在 chroot 环境下 apt update apt install --reinstall grub-pc grub-pc-bin # 对于 BIOS # 或 apt install --reinstall grub-efi-amd64 grub-efi-amd64-bin # 对于 UEFI apt install --reinstall grub-common重装后再重新执行grub-install和update-grub。4.2 手动引导进入系统以获取更多信息如果 GRUB 损坏严重修复命令都失效我们可以尝试从grub命令行手动引导至少先进入系统再执行修复。这需要你知道内核 (vmlinuz) 和初始内存盘 (initrd.img) 的确切路径。在grub提示符下就是报错后进入的那个界面# 1. 设置根分区假设你的 /boot 在 (hd0, gpt2) 上这里的序号需要你尝试 set root(hd0, gpt2) # 2. 加载 linux 内核 linux /vmlinuz-5.15.0-xx-generic root/dev/sda2 # 3. 加载 initrd 镜像 initrd /initrd.img-5.15.0-xx-generic # 4. 启动 boot这里的(hd0, gpt2)和/dev/sda2需要根据你的实际情况替换。你可以按Tab键尝试自动补全来探索设备名和文件路径。一旦成功进入系统立即在终端执行sudo update-grub和sudo grub-install /dev/sda。4.3 处理双系统下 Windows 更新导致的覆盖这是老生常谈但频繁发生的问题。如果你修复了 GRUB进入 Windows 更新后又失效可以一劳永逸地调整引导顺序。在 Linux 系统中安装os-prober确保它能探测到 Windowssudo apt install os-prober。重新运行sudo update-grub。进入主板 BIOS/UEFI 设置将Linux 的引导项如 “Ubuntu”设置为第一启动项而不是 “Windows Boot Manager”。这样电脑会先加载 GRUB再由 GRUB 的菜单选择进入 Windows 或 Linux主动权就掌握在 GRUB 手里了。4.4 使用 Boot-Repair 工具进行自动化修复如果你觉得命令行操作过于复杂在 Ubuntu Live 环境中有一个强大的图形化工具Boot-Repair可以尝试。sudo add-apt-repository ppa:yannubuntu/boot-repair sudo apt update sudo apt install boot-repair boot-repair启动后选择“推荐修复”它会自动检测你的系统并尝试修复。这个工具非常智能但也不是万能的。它更适合解决常见的引导冲突问题对于复杂的文件系统损坏或分区丢失仍需手动干预。注意使用前最好用其“创建诊断报告”功能备份当前状态。5. 预防措施与最佳实践指南俗话说防患于未然。与其在系统崩溃后焦头烂额地修复不如提前做好预防让系统更加健壮。以下是我总结的几条关键预防措施和日常最佳实践。5.1 系统安装时的正确分区规划这是所有稳定性的基础。在安装 Linux尤其是规划双系统时请务必明确UEFI 电脑确保有一个EFI 系统分区ESP格式 FAT32大小建议 512MB 以上。将 GRUB 安装到此分区。传统 BIOS 电脑使用 GPT 磁盘必须创建一个 1MB 大小的 BIOS Boot Partition类型设置为bios_grub。这个分区不格式化专供 GRUB 使用。为 /boot 使用独立分区虽然不是必须但为/boot分配一个独立的分区例如 1GBext4 格式是个好习惯。即使根 (/) 文件系统出现问题只要/boot完好就仍有很大的引导修复可能。5.2 定期备份 GRUB 配置与关键分区备份是最有效的“后悔药”。备份 GRUB 配置每次成功更新内核或修改 GRUB 后可以手动备份一下配置文件sudo cp /boot/grub/grub.cfg /boot/grub/grub.cfg.backup。备份分区表使用sudo sfdisk -d /dev/sda sda-partition-table.backup命令将磁盘分区表备份到一个安全的地方如另一个硬盘或云存储。考虑系统级备份使用像Timeshift类似 Windows 系统还原这样的工具定期为系统创建快照。一旦引导出问题可以从 Live 环境启动 Timeshift 进行还原。5.3 谨慎进行系统更新与磁盘操作Windows 更新在双系统环境下进行大型 Windows 功能更新前心理上要做好 GRUB 被覆盖的准备。更新后可以按照本文第3部分的方法快速修复。使用磁盘工具在使用gparted、fdisk等工具调整分区大小时务必确认操作对象无误。一个误操作删除 ESP 或 BIOS Boot 分区会导致严重的引导失败。内核更新Linux 内核更新通常会自动处理 GRUB但偶尔也会失败。更新后如果遇到问题可以在 GRUB 菜单的“高级选项”里选择上一个老版本内核启动然后排查问题。5.4 维护一个常备的急救工具盘永远在你的抽屉里留一个更新到最新版本的Ubuntu 或 SystemRescueCd 启动 U 盘。这个 U 盘不仅是修复工具还可以用来挂载硬盘、抢救数据、测试内存和硬盘健康状态。花十分钟制作一个它可能在关键时刻拯救你的数据和一天的好心情。我个人在实际操作中的体会是normal.mod not found这类引导问题看似吓人但绝大多数情况下其根源都非常清晰——要么是引导程序被覆盖要么是分区结构不匹配。解决问题的过程其实就是一次对计算机启动原理的深入复习。保持冷静按部就班地诊断引导模式、分区表、准备Live U盘、操作挂载、chroot、重装问题总能解决。最后养成备份的好习惯它能给你在数字世界里最大的安全感。当你成功修复并再次看到 GRUB 菜单的那一刻那种成就感或许就是折腾 Linux 的乐趣之一吧。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价