[原]UEFI+GPT启动VHD

1. 缘起

最近因为不小心中招了(一直在裸奔),又面临着重装系统的尴尬,虽然之前有备份,但是时间已经很久了,而且恢复一次跟重装一遍差不多,没有多大优势。之前同事帮我弄过从vhd文件启动系统,很是方便,可以备份vhd文件即可。借此机会,决定好好研究下来龙去脉。

2. 创建VHD文件并写入系统镜像到VHD文件

2.1 制作VHD文件

创建VHD文件比较简单,有两种创建方式:

2.1.1 纯界面创建

我的电脑-右键-管理

存储-磁盘管理-创建VHD

创建100GB大小的可动态扩展的VHD文件

初始化磁盘

使用GPT分区格式

新建简单卷

然后一直下一步就行了。

2.1.2 命令行创建

可以参考https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-7/gg318049%28v%3dws.10%29#using-the-disk-management-tools

主要命令如下(需要以管理员权限运行):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
rem 先执行diskpart进入diskpart交互界面
Diskpart
rem 创建一个最大102408MB的类型为动态扩展的VHD文件,保存到E:\VHDs\win10.vhd
create vdisk file=E:\VHDs\win10.vhd maximum=102408 type=expandable
rem 选择需要操作的vhd文件
select vdisk file=E:\VHDs\win10.vhd
rem 附加之
attach vdisk
rem 创建分区
create partition primary
rem 分配盘符
assign letter=z
rem 格式化
format quick FS=NTFS label=My-VHD
rem 退出diskpart
exit

如果虚拟磁盘类型是动态扩展,那么从VHD启动的时候要保证该VHD所在的分区的空闲空间要大于你创建VHD文件时指定的大小。比如我这里指定的是102408MB,存放在E盘。那么我想从win10.vhd启动的话,我需要确保E盘空闲区域要大于102408MB。

2019-09-10 更新:虚拟磁盘大小(S): 的单位也可以切换成GB,直接输入100就可以了。 :smirk:

2.2 把系统镜像写入VHD文件

win10下可以使用dism命令部署镜像。先从msdn i tell you上下载想要安装的系统镜像,并用iso工具加载, 我用的是virtual clonedrive

先用dism /get-imageinfo /imagefile:path_to_your_wim_file查看下信息,主要为了得到各个版本系统的index号,如下图

get image info

然后运行dism /apply-image /imagefile:path_to_your_wim_file /index:4 /applydir:your_vhd_mounted_volume

apply image

耐心等待完成即可。

小结

  1. dism命令需要管理员权限
  2. 不清楚低版本系统自带的dism是否支持部署,可以通过dism /?来查看帮助,如果dism不支持,还可以通过imagex等工具来部署。
  3. wim文件一般要使用镜像文件中的\sources\install.wim文件,大约有几GB大小。
  4. 我这里以win10为例,其实从win7开始就支持从VHD文件启动了。

3. 添加VHD文件到系统引导

添加启动项需要用到工具bootice。我们可以在当前系统下添加一个新的引导项, 也可以从0开始(适用于当前没有系统的情况)新建引导项。

3.1 添加新的引导项

适用于当前有系统,需要添加一个新的启动项的情况

编辑当前系统的BCD

新建VHD启动项

编辑启动项

编辑好之后,点击 保存当前系统设置(S),再点击 保存全局设置(G)即可。

3.2 新建引导项

如果你有一块新硬盘, 想为该硬盘装系统, 那么请耐心往下看。

3.2.1 硬盘分区

分区的时候要选GPT分区,可以手动分区也可以使用DiskGenius帮助我们分区。
使用DiskGenius快速分区

UEFI要求有一个FAT格式的分区(FAT16或者FAT32均可), 系统启动的时候会在FAT格式的分区下找启动文件。这里的FAT分区就是上图中的ESP分区。

3.2.2 拷贝UEFI启动文件到ESP分区

建立好ESP分区后, 我们就可以拷贝UEFI启动文件到该分区。需要拷贝什么文件呢? 从哪里可以找到这些文件呢?

我们只需要把安装镜像下面的EFI文件夹整个拷贝到刚刚新建好的ESP分区即可。
EFI文件夹

win10 64位镜像中EFI文件夹中的文件树如下:
EFI文件夹下文件

注意:拷贝文件需要有盘符才能拷贝,可以手动或者通过DiskGenius为ESP分区分配一个临时的盘符。

有些教程说需要拷贝与EFI文件夹平行的boot文件夹。经过亲自测试,与EFI文件夹平行的boot文件夹不需要拷贝。当然拷贝了也没坏处。

3.2.3 拷贝装有系统镜像的VHD文件到指定目录下

因为创建的时候我已经把文件生成到了E:\VHDs\win10.vhd,我不打算放到其它目录下,这一步就省了。大家可以根据自己的需要灵活调整。

3.2.4 修改BCD, 添加VHD启动项

我们需要修改ESP分区下的EFI\microsoft\boot\bcd文件。
大体步骤和3.1中一样,只有第一步的时候不一样,BCD编辑的时候要选择 其它BCD文件(O) 而不是 当前系统BCD(S)

编辑其它BCD文件

以上步骤都做好以后, 就可以拷贝做好的vhd系统镜像到指定目录, 然后重启了。

4. 总结

整个过程比较清晰,主要分两大步:

  1. 创建VHD文件并写入系统镜像到VHD文件
  2. 添加VHD文件到系统引导

UEFI启动 关键是要有一个ESP分区,该分区是FAT (FAT16或者FAT32均可)格式的,ESP分区下要按照UEFI规范放好需要的启动文件。

5. 参考资料

BianChengNan wechat
扫描左侧二维码关注公众号,扫描右侧二维码加我个人微信:)
  • 本文作者: BianChengNan
  • 本文链接: https://bianchengnan.github.io/articles/UEFI-GPT-boot-VHD/
  • 版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 3.0 许可协议。转载请注明出处!
  • 作者寄语: 文章的结束只是思考的开始,您宝贵的意见和建议将是我继续前行的动力,点击右侧分享按钮即可携友同行!
0%