记录工作中遇到的问题

Windows Server引导丢失的修复办法

一、概述

针对不同的启动方式,操作将会不同。同时,可以通过转换分区格式的方法来将UEFI启动方式转换为BIOS启动,该方法可用于在Hyper-V中将二代虚拟机恢复为一代虚拟机。

1.1 UEFI+GPT启动方案和BIOS+MBR启动方案的区别:

  1. BIOS+MBR安装系统要求硬盘只要存在非隐藏、活动的主分区就可以了;而UEFI+GPT要求硬盘上除了存在ESP分区,还必须存在至少一个主分区;
  2. BIOS+MBR一旦系统安装好之后,如果系统引导文件在单独的分区,此分区可以在操作系统中可见,也可以设置此分区为隐藏,系统都可以正常启动;而UEFI+GPT系统引导文件所在的ESP分区在操作系统中为不可见;
  3. BIOS+MBR启动要求的活动的主分区不是唯一固定的,可以任意设定某一分区为活动的主分区,然后MBR就可以通过分区表指引操作系统从此分区启动,也就是说,可以在任意分区(主分区无论是否活动或者扩展分区)安装操作系统,只要存在任意的活动主分区,就可以从此分区启动操作系统;而UEFI+GPT只能把系统引导文件放置在ESP分区;
  4. BIOS+MBR的系统引导文件可以和系统文件在同一分区的根目录,也可以不与系统文件同一分区,只要系统引导文件所在分区为活动的主分区即可启动操作系统;而UEFI+GPT只能把系统引导文件放置在ESP分区,且操作系统必须在另外的主分区,也就是说,UEFI+GPT强制要求系统启动文件与系统文件必须分离,不在同一分区;

1.2 UEFI+GPT启动方案和BIOS+MBR启动方案的共同点:

  1. BIOS+MBR和UEFI+GPT的系统引导文件都可以放置在单独的分区,这一点在上面不同点的第四点可以知晓;
  2. BIOS+MBR的系统引导文件所在的活动主分区位置不是固定的,可以随意设置任意分区满足此条件,UEFI+GPT的ESP的位置也是可以随意设置的,在硬盘起始位置、中间位置、末尾,都可以,只要分区属性和其中的引导文件正确,就可以引导启动操作系统;
  3. BIOS+MBR的系统引导文件所在的分区和UEFI+GPT的ESP分区都可以分配任意大小,而不是ESP必须100M;
  4. BIOS+MBR安装系统所需的非隐藏、活动主分区和UEFI+GPT的系统的ESP分区,都可以同时设置多个,但是即使有多个相同属性的分区,系统安装时安装程序都是自动写入第一个,启动时也都是从第一个启动。

下面将来解释BIOS启动和UEFI启动的修复方法,并在最后附上转换UEFI启动到BIOS启动的方法。

不论是何种启动方式,对恢复的磁盘都要求有磁盘最前端的启动分区(MBR分区或ESP分区+MSR分区)

二、预先步骤

插入Windows安装盘,在BIOS中修改为相应的启动方式(Legacy模式或UEFI模式),启动Windows安装程序。

2.1 MBR+BIOS启动方案

首先进入diskpart工具,配置活动分区。

# 列出当前机器挂载的磁盘
list disk 
# 找到并选择我们系统所在的磁盘,盘符为0
select disk 0
# 列出当前机器挂载的分区
list partition 
# 找到并选择Windows系统所在的分区,分区号为1
select partition 1 
# 设置分区为活跃分区
active 
# 退出diskpart
exit

上述操作保证了我们MBR+BIOS启动方案的要求:硬盘存在非隐藏、活动的主分区

下面我们通过bootrec工具恢复启动项

# 修复主启动记录MBR
bootrec /fixmbr 
# 写入新的启动扇区
bootrec /fixboot 
# 扫描磁盘各分区中已经安装的Windows并添加到启动配置项中
bootrec /rebuildbcd
# 可以使用bcdedit查看当前bcd配置,可以看到修复成功后的启动项配置
bcdedit /enum

在输入bootrec /fixboot后提示”拒绝访问“的解决方案
由于BCD文件损坏过于彻底导致无法修复,这里我们选择重建BCD。

# 使用启动扇区恢复工具恢复启动扇区,nt60参数指支持Vista、Server 2008及以上系统,nt52则支持Vista、Server 2008以下

bootsect /nt60 sys /mbr
# 重新写入启动扇区
bootrec /fixboot

# 此时不要继续输入bootrec /rebuildbcd 命令,否则会再次出现输入bootrec /fixboot 命令时会出现”拒绝访问“的情况,bcd文件仍然没有得到修复,下面使用 bcdboot 系列命令对bcd文件进行修改
# 输入下列命令重新创建bcd文件,c:\windows指Windows路径,/s后的C:指系统分区
bcdboot c:\windows /s c: 
# 再输入下列命令了解bcd详细情况
bcdboot c:\windows /v 
# 可以使用bcdedit查看当前bcd配置,可以看到修复成功后的启动项配置
bcdedit /enum

2.2 GPT+UEFI启动方案

首先进入diskpart工具,修复ESP分区。这里有一个背景知识,ESP分区中包含EFI目录,其文件系统再DG下显示为EFI文件系统,实际上就是FAT文件系统,我们在操作时将ESP分区格式化为FAT文件系统格式,然后再导入系统引导文件即可。

# 列出当前机器挂载的磁盘
list disk 
# 找到并选择我们系统所在的磁盘,盘符为0
select disk 0
# 列出当前机器挂载的分区
list volume 
# 找到并选择ESP卷,卷标为6
select volume 6
# 给ESP分区分配盘符,取消隐藏,为后续复制系统引导文件做准备
assign letter=U
# 退出diskpart
exit

使用bootbcd来导入系统引导文件

# 使用bcdboot导入引导系统文件, 路径为已安装Windows路径,/s选项指定ESP分区所在卷,/f指定引导类型
bcdboot C:\windows /s G: /f UEFI
# 使用bootrec重建引导
> bootrec /rebuildbcd
# 可以使用bcdedit查看当前bcd配置,可以看到修复成功后的启动项配置
bcdedit /enum

2.3 将GPT+UEFI启动方案转换为MBR+BIOS启动方案

由上述操作可知,操作系统引导时会首先读取引导分区中的信息来定位系统位置,对于BIOS启动,引导分区仅有MBR分区,对于UEFI启动,引导分区包括ESP分区和MSR分区(部分包括Recovery分区)。对于转换启动方案,我们的思路在于无损修改分区类型及创建启动分区。

  1. 使用DiskGenius修改磁盘分区类型为MBR(注意MBR磁盘最多仅支持4个主分区,所有再转换前需要将已有主分区转换为逻辑分区或删除)。
  2. 修改完成后我们删除ESP分区和MSR分区
  3. 按照MBR+BIOS启动方案进行启动项修复

    目前发现在删除ESP、MBR分区后直接修复MBR会出现输入bootrec /fixboot后提示”拒绝访问“的问题,请按照其解决方案进行处理
Windows