UEFI引导修复教程
一、UEFI引导基本原理
1.esp引导分区
esp磁盘分区是gpt格式硬盘放efi引导文件的磁盘分区,在mbr格式硬盘中也可以由任一fat格式磁盘分区代替
2.efi文件结构
efi\boot\bootx64.efi
efi\microsoft\boot\bcd
efi\ubuntu\grubx64.efi
3.efi启动过程
uefi bios启动时,自动查找硬盘下esp分区的bootx64.efi,然后由bootx64.efi引导
efi下的bcd文件,由bcd引导指定系统文件(一般为c:\windows\system32\winload.efi)
二、修复windowsUEFI引导(重新生成windows在EFI下的文件夹和文件)
0)注意
1.手工运行ghost并不会修复esp分区
2.用老大们的一键还原,现在加上了还原后esp引导修复功能,如实测深山的一键还原就
自带esp分区uefi引导修复
3.用微软原版系统光盘安装或PE下安装,当然都会自动修复esp引导。
4.实用winpe上修复引导是最简便高效的方式!
1)用bcbboot自动修复
我们建议大家启动64位8PE,用它带的bcdboot来修复。
(一)指定esp分区修复
环境为64位8PE,bios/uefi启动进入下都可以
1.启动64位8PE,并用esp分区挂载器或diskgenuis挂载esp分区
2.打开cmd命令行,输入以下命令并运行
bcdboot c:\windows /s o: /f uefi /l zh-cn
其中:c:\windows 硬盘系统目录,根据实际情况修改
/s o: 指定esp分区所在磁盘,根据实际情况修改
/f uefi 指定启动方式为uefi
/l zh-cn 指定uefi启动界面语言为简体中文
注:64位7PE不带/s参数,故7PE不支持bios启动下修复
(二)不指定esp分区修复
环境为64位7或8PE,只有uefi启动进入PE才可以
不用挂载esp分区,直接在cmd命令行下执行:
bcdboot c:\windows /l zh-cn
其中 c:\windows 硬盘系统目录,根据实际情况修改
/l zh-cn 指定uefi启动界面语言为简体中文
注:在8PE中,我们也可以在uefi启动进入pe后,挂载esp分区用方法(一)修复
(三)用“UEFI引导自动修复”脚本修复
这个脚本,其实就是用了8PE的bcdboot,来修复uefi引导。测试可以在2003 7 8 PE
中自动修复uefi引导。
附件提供两套,第一套是程序版,为离弃制作;第二套是pecmd脚本版,由caocaofff制作,都相当完美。
2)用bootice手动修复
从efi引导启动过程来看,虽然它的文件很多,但主要用到的就是两文件,我们完全可以在
各pe下挂载esp分区,从硬盘系统中复制bootx64.efi文件,然后用用bootice制作好bcd,就
完成efi引导修复。
1.启动任一pe,用esp分区挂载器或diskgenuis挂载esp分区
2.查看esp分区是否可正常读写,如不正常可重新格式化为fat16分区格式。
3.在esp分区中建立如下空文件夹结构
\efi\boot\ (bootx64.efi等复制)
\efi\microsoft\boot\ (bcd等建立)
4.复制硬盘系统中的bootmgfw.efi(一般在c:\windows\boot\efi下)到esp分区的\efi\boot
下,并重命名为bootx64.efi
5.打开bootice软件,有esp分区的\efi\microsoft\boot\下新建立一bcd文件,
打开并编辑bcd文件,添加“windows vista\7\8启动项,
指定磁盘为硬盘系统盘在的盘,
指定启动分区为硬盘系统分区(一般为c:)
指定启动文件为:\Windows\system32\winload.efi, 是*.efi,不是*.exe,要手工改过来
最后保存当前系统设置并退出。
这样子,精简的UEFI引导就手工修复了,实机和虚拟机测试通过。
注:xpPE不能识别gpt格式的硬盘分区,用2003PE中的disk.sys替换xpPE内核中的相应文件,就
可以让xpPE也能识别gpt磁盘格式分区
指定启动分区不是esp分区所在分区,就是硬盘64位7 8 系统所在分区
指定启动文件为:\Windows\system32\winload.efi, 是*.efi,不是*.exe,要手工改过来
三、修复Linux的UEFI引导(重装grub2并重新生成Linux在EFI下的文件夹和文件)
准备好一张 linux系统 对应的 DVD 光盘,或者 live USB,最好选择与当前系统相同的版本。开机启动 DVD 或者 Live USB,,进入救援模式。等待各种输出结束,看到"login"后,输入用户名"root",直接回车即可进入救援模式,不需要输入密码。(进入试用系统也一样)
1)首先查看各分区的情况,使用命令:
fdisk -l
列出分区情况。
2)将各个分区挂载。例如,假设 sda8 为 / 分区,sda6 为 /boot 分区,sda1为/boot/efi ,sda7 为 swap 分区,sda9 为 /home 分区,则按目录结构顺序挂载:
sudo mount /dev/sda8 /mnt
sudo mount /dev/sda6 /mnt/boot
sudo mount /dev/sda1 /mnt/boot/efi
sudo mount /dev/sda9 /mnt/home
注意,swap 分区不需要挂载。要先挂在根分区,然后把其他的分区相应的挂在到根分区下。
3)挂载、绑定运行环境到目标系统
sudo moun t --bind /dev /mnt/dev
sudo mount --bind /proc /mnt/proc
sudo mount --bind /sys /mnt/sys
4)修复
sudo chroot /mnt /bin/bash # chroot到需要修复的系统
grub-mkconfig -o /boot/grub/grub.cfg #生成 /boot/grub/grub.cfg,ubuntu16.04命令是grub,一些linux发行版是grub2
grub-install --directory=/usr/lib/grub/x86_64-efi /boot/efi # 根据grub模块文件和/boot /grub.cfg安装grub到EFI分区。
exit
reboot
备注:如果是MBR的安装的系统,grub安装命令为:grub-install --directory=/usr/lib/grub/i386-pc /dev/sda 。默认的 --directory= /usr/lib/grub/,即你当前的运行环境。