如果 Ubuntu 系统启动时直接进入 GRUB 界面,而不是直接启动操作系统,原因是: GRUB 配置文件丢失或损坏
解决方法
一、手动引导系统(临时方案)
GRUB 的配置文件(
/boot/grub/grub.cfg
)损坏。通过 GRUB 界面中命令行模式,尝试手动引导系统。
ls
这将会列出一系列的分区,如
(h0,p0)(h1,p0)(h1,p1)
即:第1块硬盘,第1个分区
第2个硬盘,第1个分区
第2个硬盘,第2个分区
通过
ls (h0,p0)/
查看文件目录结构。如果包含系统的关键文件(如
/bin
、
/etc
、
/lib
、
/usr
则为系统根目录。
找到分区后,手动加载 Linux 内核并引导系统:
setroot=(hd0,1)# 这里替换成你的根分区
linux /boot/vmlinuz root=/dev/sda1 # 替换你的根分区设备
initrd /boot/initrd.img
boot
二、使用Live USB修复 GRUB(永久方案):
1、原理
- EFI 系统分区(ESP) 在 UEFI 系统中,通常会有一个专门的分区称为 EFI 系统分区(ESP),它用于存放 EFI 引导加载程序和相关文件。该分区的文件系统通常是 FAT32 格式。 ESP 通常被挂载到 /boot/efi。在这个分区中,你会找到一个或多个子目录,通常以操作系统的名称命名,例如 /EFI/ubuntu 或 /EFI/boot,其中包含 UEFI 引导程序(如 grubx64.efi)。
- Boot 分区 在传统的 BIOS 启动系统中,/boot 分区包含内核文件和引导加载程序。 在 UEFI 系统中,虽然大多数情况下引导程序也在 ESP 中,但仍然可以将 Linux 内核和其他文件放在 /boot 目录下。这并不影响 UEFI 的引导过程。
- 系统结构 对于一个 UEFI 系统,通常会有如下分区: EFI 系统分区(ESP):用于存放 EFI 引导文件,通常位于 /boot/efi。 根分区(/):系统文件和用户数据,包含内核、库和其他重要文件,可能会包含 /boot 目录。 可选的 /boot 分区:一些系统选择将内核和 initramfs 放在一个单独的 /boot 分区中,这样可以简化管理。
所以目的就是修复 ESP文件。
2、流程
步骤1. 使用 Live USB 启动系统并选择“Try Ubuntu”模式。
步骤2. 打开终端 并列出所有分区:
使用
lsblk
或
fdisk -l
命令来确定正确的分区
步骤3. 挂载根分区:
sudomount /dev/sda1 /mnt # 替换为正确的根分区
步骤4. 还需要挂载一些虚拟文件系统,以便在chroot环境中正确地访问硬件设备和环境信息。:
sudomount --bind /dev /mnt/dev
sudomount --bind /proc /mnt/proc
sudomount --bind /sys /mnt/sys
步骤 5. 切换到挂载的系统环境:
sudochroot /mnt
挂载EFI分区(用于待会覆写文件)
mkdir /mnt/efi
mount /dev/sda1 /mnt/efi
步骤 6: 安装或修复 GRUB
在 chroot 环境中运行以下命令来安装或修复 GRUB:
grub-install --target=x86_64-efi --efi-directory=/mnt/efi --bootloader-id=ubuntu
--target=x86_64-efi 表示你要安装在 UEFI 系统上。
--efi-directory=/mnt/efi 指定 EFI 分区的位置。
--bootloader-id=ubuntu 是 GRUB 在 UEFI 启动菜单中显示的名称。
# 接下来,更新 GRUB 配置:update-grub
步骤 7. 退出 chroot 环境并重启系统:
exitsudoreboot
三、Ubuntu 内部的引导文件
以上步骤完成后, Linux引导程序页面(选择Ubuntu, Advance Option的页面)应该能展示出来。
如果进入emergency 模式,则证明Ubuntu内部的引导没有做好。
这个文件是在安装的时候系统生成的,在更换了硬盘之后,该文件很有可能不能用了(由于uuid发生了变化)。
li@li-Z690I-A-ULTRA-LITE:/etc %cat fstab
1# /etc/fstab: static file system information.2#3# Use 'blkid' to print the universally unique identifier for a4# device; this may be used with UUID= as a more robust way to name devices5# that works even if disks are added and removed. See fstab(5).6#7# <file system> <mount point> <type> <options> <dump> <pass>8# / was on /dev/nvme1n1p2 during installation9UUID=5c23a161-bbc6-4b87-b52e-7699c10c2741 / ext4 errors=remount-ro 0110# /boot/efi was on /dev/nvme0n1p1 during installation11UUID=AB5E-0E4E /boot/efi vfat umask=0077 0112 /swapfile none swap sw 00
使用
blkid
列出所有块设备和信息,包含uuid。
将上述文件的第一个UUID 改为指向 Linux 系统,第二个UUID 改为指向引导程序。
版权归原作者 。。。 所有, 如有侵权,请联系我们删除。