windows修复双系统引导失败过程
背景efibootmge修复前提进入ubuntu系统efibootmgr修复引导1.打开终端2.识别硬盘和分区3.挂载EFI系统分区4.查看当前的UEFI启动项5.重建Windows启动项6.再次查看并设置启动顺序7.卸载分区并重启
说明
GRUB逃生舱GRUB临时进入windows系统获取分区信息寻找EFI分区和Windows分区设置Root并加载核心模块(针对UEFI系统)启动!
背景
现状是笔记本电脑上安装了windows和ubuntu双系统,由于磁盘空间不足打算删除ubuntu系统,将磁盘空间归还windows系统,于是一顿操作,将ubuntu分区格式化之后,导致系统引导失败,修复系统引导有挺多方法的,这里是使用ubuntu系统的efibootmgr工具成功修复的,下面记录修复步骤。
efibootmge修复
前提
准备一个ubuntu优盘,修复需要借助ubuntu系统,使用一个空的U盘+ubuntu镜像+软碟通刻录好ubuntu U盘。
进入ubuntu系统
插入ubuntu系统盘启动电脑,按F12进入引导页面,选择U盘启动。(不同品牌电脑可能进入引导页按键不同,可以百度+尝试一下)
efibootmgr修复引导
1.打开终端
在Ubuntu桌面,按 Ctrl + Alt + T 快捷键打开一个终端窗口。
2.识别硬盘和分区
输入以下命令来查看您的磁盘分区情况:
sudo fdisk -l
您会看到类似下面的输出,需要找到两个关键分区:
EFI系统分区:通常大小在100MB到500MB之间,类型为 EFI System,文件系统是 FAT32。在下面的例子中,它是 /dev/nvme0n1p1。
Windows主分区:通常是最大的NTFS分区。在下面的例子中,它是 /dev/nvme0n1p3。
Disk /dev/nvme0n1:...
...
设备 起点 末尾 扇区 大小 类型
/dev/nvme0n1p1 2048 1050623 1048576 512M EFI System
/dev/nvme0n1p2 1050624 15482879 14432256 6.9G Linux swap
/dev/nvme0n1p3 15482880 209715199 194232320 92.6G Microsoft basic data # 这就是Windows分区
3.挂载EFI系统分区
我们需要将EFI分区挂载到Ubuntu系统中才能操作它。通常挂载到 /mnt 目录。
sudo mount /dev/nvme0n1p1 /mnt
请将 /dev/nvme0n1p1 替换为上一步骤中确认的EFI分区。
4.查看当前的UEFI启动项
输入命令:
sudo efibootmgr -v
这会列出当前所有的启动项。您很可能会看到一个指向 grubx64.efi 的旧Ubuntu启动项。
5.重建Windows启动项
现在,我们告诉UEFI固件,Windows Boot Manager在哪里。
sudo efibootmgr -c -d /dev/nvme0n1 -p 1 -l "\\EFI\\Microsoft\\Boot\\bootmgfw.efi" -L "Windows Boot Manager"
-c:创建新的启动项。
-d /dev/nvme0n1:指定硬盘设备。请根据您的实际情况修改,比如可能是 /dev/sda。
-p 1:指定分区号。这里 1 表示第一个分区(即EFI分区)。请根据您的EFI分区号修改,例如在 fdisk -l 里是 p1 就写 -p 1。
-l "\\EFI\\...:指定EFI引导文件的位置。这个路径是固定的,通常不需要改。
-L "Windows Boot Manager":为新启动项设置一个您喜欢的名字。
6.再次查看并设置启动顺序
再次运行 sudo efibootmgr,您会看到新创建的“Windows Boot Manager”启动项,它有一个类似 Boot0003 的编号。 假设新创建的Windows启动项是 Boot0003,您可以将它设置为第一启动项:
sudo efibootmgr -o 0003
请将 0003 替换为您实际看到的Windows启动项编号。
7.卸载分区并重启
sudo umount /mnt
sudo reboot
重启时,请拔掉Ubuntu U盘。现在,您的电脑应该会直接启动到Windows系统了。
说明
由于我之前安装的双系统,所以在4步查看当前UEFI启动项时就能看到旧的windows启动项还好好待在那里,所以就可以省略创建的一步,直接查看旧的windows启动项并执行sudo efibootmgr -o 0003设置启动顺序就行了。
GRUB逃生舱
当系统损坏时,启动电脑后经常会看到进入了一个黑漆漆的grub页面,这个页面有什么用呢?可以利用它来临时进入windows系统。
GRUB临时进入windows系统
获取分区信息
在 grub> 提示符下,输入以下命令来列出所有磁盘分区:
ls
您会看到类似这样的输出:
(hd0) (hd0, gpt1) (hd0, gpt2) (hd1) (hd1, gpt1) ...
这里的 (hd0, gpt1) 或 (hd0, msdos1) 就是您的分区。gpt 表示磁盘是GPT分区表(UEFI电脑),msdos 表示是MBR分区表(传统BIOS电脑)。
寻找EFI分区和Windows分区
现在需要逐个分区查看,找到两个关键分区:
EFI系统分区:里面有一个 EFI 文件夹,再里面有 Microsoft 子文件夹。
Windows启动文件所在分区:里面有 Windows 文件夹。
使用 ls 命令来查看分区内容,例如:
ls (hd0, gpt1)/
ls (hd0, gpt2)/
技巧:您可以按 Tab 键自动补全,比如输入 ls (hd0, 再按 Tab,GRUB会列出所有 hd0 上的分区。
当您执行 ls (hdX, gptY)/ 后,如果看到 EFI/ 目录,那很可能就是EFI分区。再执行 ls (hdX, gptY)/EFI/,如果能看到 Microsoft/,那就确认了。 同样,找到包含 Windows/ 和 Users/ 等目录的分区,那就是您的Windows系统分区。
记下您找到的这两个分区的编号! 假设我们找到:
EFI分区是 (hd0, gpt1)
Windows系统分区是 (hd0, gpt3)
设置Root并加载核心模块(针对UEFI系统)
首先,将根设备设置为EFI分区:
set root=(hd0, gpt1)
然后,加载启动Windows所需的EFI模块:
chainloader /EFI/Microsoft/Boot/bootmgfw.efi
启动!
输入命令:
boot
如果一切顺利,您会看到Windows的启动标志(旋转的小圆点),然后系统会正常启动进入Windows。