UEFI + GPT 启动 VHD

编程难

共 3734字,需浏览 8分钟

 · 2020-08-18

说明

周五,笔记本充不进电了,还好我的系统是做到 VHD 中的,把硬盘拿出来,插到其它机器上,从我的硬盘启动就可以了(虽然当时没有从我的系统启动,因为只需要等待一天,周末就可以去修电脑了),所以我一点都不慌。

p.s. 天津这些电脑店还是那么乱,或者更甚?找个靠谱的维修点不是一般的难。联想官方维修店相对正规,但是要钱也很贵。最后,在领导的帮助下,在信诚大厦找了一个靠谱的维修点儿修好了,原来是主板上的一个元器件坏了。师傅的微信号是 wx256587,天津的小伙伴儿有需要可以联系。

今天,想起之前总结过如何把系统制作到 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(v%3Dws.10)#using-the-disk-management-tools

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

rem 先执行diskpart进入diskpart交互界面Diskpartrem 创建一个最大102408MB的类型为动态扩展的VHD文件,保存到E:\VHDs\win10.vhdcreate vdisk file=E:\VHDs\win10.vhd maximum=102408 type=expandablerem 选择需要操作的vhd文件select vdisk file=E:\VHDs\win10.vhdrem 附加之attach vdiskrem 创建分区create partition primaryrem 分配盘符assign letter=zrem 格式化format quick FS=NTFS label=My-VHDrem 退出diskpartexit

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

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

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 帮助我们分区。

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

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

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

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

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

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

有些教程说需要拷贝与 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. 参考资料

  • 操作系统引导过程[1]
  • (译) UEFI 启动:实际工作原理[2]
  • UEFI+GPT引导基础篇(一):什么是GPT,什么是UEFI?[3]
  • 计算机到底如何启动?(UEFI boot)[4]
  • 装机、做系统必备:秒懂MBR和GPT分区表[5]
  • 计算机是如何启动的?[6]
  • UEFI启动视频详解:启动分析+N项操作实例,赶紧学习,不要落伍啦,该给自己充电啦...[7]

References:

[1]

操作系统引导过程: https://blog.csdn.net/jonathan321/article/details/51987680

[2]

(译) UEFI 启动:实际工作原理: https://www.tuicool.com/articles/NNf26jB

[3]

UEFI+GPT引导基础篇(一):什么是GPT,什么是UEFI?: https://www.iruanmi.com/what-is-gpt-and-what-is-uefi/

[4]

计算机到底如何启动?(UEFI boot: https://blog.csdn.net/u013201439/article/details/50195743

[5]

装机、做系统必备:秒懂MBR和GPT分区表: http://www.chinaz.com/server/2016/1017/595444.shtml

[6]

计算机是如何启动的?: http://www.ruanyifeng.com/blog/2013/02/booting.html

[7]

UEFI启动视频详解:启动分析+N项操作实例,赶紧学习,不要落伍啦,该给自己充电啦...: http://bbs.wuyou.net/forum.php?mod=viewthread&tid=299643&fromuid=396698


欢迎留言交流

感谢你的分享,点赞和在看

浏览 24
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报