windows修复双系统引导失败过程
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。