无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
查看: 8146|回复: 43
打印 上一主题 下一主题

[求助] 如何在一个 VHD 里制作兼容 UEFI 和 BIOS 启动的 Windows 系统镜像

  [复制链接]
跳转到指定楼层
1#
发表于 2022-3-17 21:04:45 | 只看该作者 |只看大图 回帖奖励 |正序浏览 |阅读模式
本帖最后由 teddysun 于 2022-3-17 21:43 编辑

1. 为了 Windows 系统所在盘的硬盘空间大于 2TB 也可正常使用,所以 VHD 要采用 GPT 分区表。2. grub2 兼容 BIOS 和 UEFI,所以采用 grub2 来引导系统。

满足以上2个条件后,开始了折腾过程。
采用了 @wintoflash 大佬编译的最新版 grub2,包含了 ntboot 和 wimboot 模块(网址:https://github.com/a1ive/grub

grub.cfg 节选:
if [ "$grub_platform" == "pc" ]; then set default=0; fi
if [ "$grub_platform" == "efi" ]; then
    getenv -t uint8 SecureBoot grub_secureboot;
    if [ "$grub_secureboot" == "1" ]; then
        sbpolicy -i
    fi
    set default=1
fi



上面的语句表示 grub2 会判断当前硬件是从 BIOS 还是从 UEFI 启动,从而自动选择相应的方式来启动 Windows 系统。

一开始使用了 ntboot 模块来引导系统。
set root=(hd0,gpt2)
menuentry 'Boot Windows Server 2022 (BIOS)' --unrestricted {
    ntboot --efi=/bootmgr.exe --win (hd0,gpt3)
}

menuentry 'Boot Windows Server 2022 (UEFI)' --unrestricted {
    ntboot --efi=/EFI/Microsoft/Boot/bootmgfw.efi --win (hd0,gpt3)
}

确实是可以引导。
但是,Windows 系统不能自动更新,一旦更新重启后,就会出现【无法完成更新正在撤销更改请不要关闭你的计算机】错误提示。

在咨询了 @wintoflash 大佬后,给出的解释是:Windows更新肯定会更新引导。但是你是从一个不存在的盘上引导的。所以无解。

在这里想问问各位达人们,有没有方法,在一个 VHD 里制作兼容 UEFI 和 BIOS 启动的 Windows 系统镜像,而且这个 VHD
要采用 GPT 分区表。



补充说明:为什么想要制作这么一个兼容 UEFI 和 BIOS 启动的 Windows 系统 VHD 呢?
是为了要将这个 VHD 文件 DD 到其他硬盘上。
等于就是说,最后是在硬盘里启动 Windows 系统。


44#
发表于 2023-7-22 18:56:17 | 只看该作者
lhpxs 发表于 2022-3-17 21:28
VHD或VHDX等虚拟磁盘内的操作系统(比如WINDOWS10或更旧的系统)目前来讲是不能更新,据说WIN10某个新的版 ...

你说的更新是下载更新补丁么?
为何不能更新?是下载更新完毕,无法安装更新么?
回复

使用道具 举报

43#
发表于 2022-11-2 07:58:18 | 只看该作者
在一个 VHD 里制作兼容 UEFI 和 BIOS 启动的 Windows 系统镜像
回复

使用道具 举报

42#
发表于 2022-10-27 14:07:07 | 只看该作者
从来不用更新功能的飘过
回复

使用道具 举报

41#
发表于 2022-8-1 22:53:06 来自手机 | 只看该作者
纯属扯淡的玩意,任何系统都可启动
回复

使用道具 举报

40#
发表于 2022-7-26 19:17:56 | 只看该作者
oym2016 发表于 2022-3-17 21:24
set root=(hd0,gpt2)
menuentry 'Boot Windows Server 2022 (BIOS)' --unrestricted {
    chainloader / ...

@teddysun 今天才看到你这个贴,,,

这个论坛上的人说的“从vhd启动系统”和你“dd vhd到硬盘上然后启动”是二个完全不同的概念

前者是直接启动vhd虚拟硬盘文件
而你的是部署vhd到机器上再启动(你这个dd发生前后,它原来是vhd,还是raw,没有任何区别的)
回复

使用道具 举报

39#
发表于 2022-7-8 10:45:05 | 只看该作者
szwp 发表于 2022-3-20 18:58
错误的认识在于将分区的限制当成硬盘的限制及

第二,第4个分区的起始扇区应该超过了4个字节所能表示的 ...

赞同,分区最大到2048g,而不是硬盘。
回复

使用道具 举报

38#
发表于 2022-7-8 10:36:07 | 只看该作者
新一点版本的WinNTSetup,在安装设置时,可以实现。
MBR-BIOS/UEFI,用DG打开VHD文件,ESP是活动分区。结构如下图:


搜狗截图22年07月08日1033_3.png (132.44 KB, 下载次数: 118)

搜狗截图22年07月08日1033_3.png

搜狗截图22年07月08日1023_1.png (74.32 KB, 下载次数: 122)

搜狗截图22年07月08日1023_1.png
回复

使用道具 举报

37#
发表于 2022-3-20 18:58:44 | 只看该作者
Climbing 发表于 2022-3-20 08:37
好吧,我又仔细看了一下,4个字节表示的最大扇区数是(2^32=4,294,967,296),折算成空间就正好是2048G(2T ...

错误的认识在于将分区的限制当成硬盘的限制及

第二,第4个分区的起始扇区应该超过了4个字节所能表示的最大扇区数量。
回复

使用道具 举报

36#
发表于 2022-3-20 18:40:49 | 只看该作者
感谢分享!
回复

使用道具 举报

35#
发表于 2022-3-20 18:25:27 | 只看该作者
wintoflash 发表于 2022-3-20 18:23
对于扩展分区,分区表里面的起始 LBA 是相对于扩展分区表的,所以只要一个扩展分区不超过 2TB ,就可以 ...

每一个逻辑分区的起始扇区都是相对于扩展分区表的起始扇区的
回复

使用道具 举报

34#
发表于 2022-3-20 18:23:00 | 只看该作者
Climbing 发表于 2022-3-20 17:34
最大也就是4T(这个4T是真正的4T,不是硬盘容量那个4T)了,关键是分区起始扇区和分区扇区数目这两个数字 ...


对于扩展分区,分区表里面的起始 LBA 是相对于扩展分区表的,所以只要一个扩展分区不超过 2TB ,就可以接着往下套扩展分区。
回复

使用道具 举报

33#
发表于 2022-3-20 18:01:31 | 只看该作者
Climbing 发表于 2022-3-20 17:34
最大也就是4T(这个4T是真正的4T,不是硬盘容量那个4T)了,关键是分区起始扇区和分区扇区数目这两个数字 ...

扩展分区中的逻辑驱动器的开始扇区的基准是扩展分区的开始处而不是0。

| 主分区:2T | 扩展分区-逻辑分区1:2T | 扩展分区-逻辑分区2:2T |

因此最大可以支持到 6T
回复

使用道具 举报

32#
发表于 2022-3-20 17:34:18 | 只看该作者
wintoflash 发表于 2022-3-20 16:40
用逻辑分区的话可能可以达到更大的容量。

最大也就是4T(这个4T是真正的4T,不是硬盘容量那个4T)了,关键是分区起始扇区和分区扇区数目这两个数字被4字节给锁死了。

当然,如果扇区不是512字节,而是4K,那么理论上还可以大8倍。
回复

使用道具 举报

31#
发表于 2022-3-20 16:40:01 | 只看该作者
Climbing 发表于 2022-3-20 08:37
好吧,我又仔细看了一下,4个字节表示的最大扇区数是(2^32=4,294,967,296),折算成空间就正好是2048G(2T ...

用逻辑分区的话可能可以达到更大的容量。
回复

使用道具 举报

30#
发表于 2022-3-20 08:37:38 | 只看该作者
好吧,我又仔细看了一下,4个字节表示的最大扇区数是(2^32=4,294,967,296),折算成空间就正好是2048G(2T)。而分区表中前面的四个字节表示分区的起始扇区,所以,第四个2T分区能建立的关键是不让其分区起始扇区超过4,294,967,296这个数字,也即,其前面的三个分区的空间(当然也可以是一个分区、两个分区,反正mbr最多四个分区)加起来不能超过2T。而大部分4T的硬盘实际上是按1000(不是1024)算的,折算下来只有3.7T左右,所以,如果最后一个分区是2T,那么,前面只有1.7T,无论如何也不会超过2T这个限制。

总感觉有些人就是喜欢故弄玄虚,其实太阳底下也没有什么新鲜事儿。

点评

错误的认识在于将分区的限制当成硬盘的限制及 第二,第4个分区的起始扇区应该超过了4个字节所能表示的最大扇区数量。  详情 回复 发表于 2022-3-20 18:58
用逻辑分区的话可能可以达到更大的容量。  详情 回复 发表于 2022-3-20 16:40
回复

使用道具 举报

29#
发表于 2022-3-20 08:06:39 | 只看该作者
Climbing 发表于 2022-3-19 22:13
能不能详细讲讲技术细节(是否需要什么特殊的技巧或者hack mbr分区表)?我印象中也见过将4T硬盘在MBR下 ...

4个字节所能表示的最大扇区数量,你认为是多少,可以算一下发出来。
回复

使用道具 举报

28#
发表于 2022-3-20 08:03:01 | 只看该作者
Climbing 发表于 2022-3-19 22:13
能不能详细讲讲技术细节(是否需要什么特殊的技巧或者hack mbr分区表)?我印象中也见过将4T硬盘在MBR下 ...

最大数是指区,而不是盘,你要只理解第一个4字节是起始,第二个4字节是长度,而不是结束的LBA.
回复

使用道具 举报

27#
发表于 2022-3-19 22:13:49 | 只看该作者
szwp 发表于 2022-3-19 18:49
4T硬盘MBR,没问题。
http://bbs.wuyou.net/forum.php?mod=redirect&goto=findpost&ptid=428127&pid=445 ...

能不能详细讲讲技术细节(是否需要什么特殊的技巧或者hack mbr分区表)?我印象中也见过将4T硬盘在MBR下分成两个2T使用的情况,但不太确定了。

如果是6T的硬盘,能不能分成3个2T的mbr?

而且,我看你的4T硬盘mbr分区,都是前面两个小分区,然后后面两个2T的分区,但总感觉哪里不对:第一,你这分区的总空间超过了硬盘本身的容量;第二,第4个分区的起始扇区应该超过了4个字节所能表示的最大扇区数量。

点评

4个字节所能表示的最大扇区数量,你认为是多少,可以算一下发出来。  详情 回复 发表于 2022-3-20 08:06
最大数是指区,而不是盘,你要只理解第一个4字节是起始,第二个4字节是长度,而不是结束的LBA.  详情 回复 发表于 2022-3-20 08:03
回复

使用道具 举报

26#
发表于 2022-3-19 18:49:22 | 只看该作者
teddysun 发表于 2022-3-19 16:51
看来确实是无解的。
要用到大于 2TB 的硬盘,就只能用 GPT 分区表。
Legacy BIOS 模式下转换为 MBR,就 ...

4T硬盘MBR,没问题。
http://bbs.wuyou.net/forum.php?m ... &fromuid=225195
回复

使用道具 举报

25#
发表于 2022-3-19 17:59:23 | 只看该作者
自己把自己捆住,哭着求人不帮你解开,想办法让你跑起来。
顺着来就解决了,微软更新就要求必须,legacy+mbr,efi+gpt。
回复

使用道具 举报

24#
发表于 2022-3-19 17:47:58 | 只看该作者
teddysun 发表于 2022-3-19 17:33
也就是说,在 Legacy BIOS 模式下强行使用大于 2TB 的硬盘来作为系统盘,有以下两种结局:

1. 磁盘分区 ...

好吧,你这总结的已经非常全面了。既然你这电脑加了这么多限制条件,比如说一定要使用Legacy BIOS(其实我相信这电脑一定支持UEFI),那不妨再加一条:禁止Windows更新。其实在我看来,Windows更新基本上是没用的,大部分时候它带来的麻烦比好处多。

有了关键更新怎么办:定期更新你的vhd系统,然后再定期将vhd系统DD到电脑上。或者,在打补丁时,临时切换到UEFI+GPT+微软官方引导,补丁打完后,再切换回bios+Grub2+ntboot方式。
回复

使用道具 举报

23#
 楼主| 发表于 2022-3-19 17:33:21 | 只看该作者
本帖最后由 teddysun 于 2022-3-19 17:38 编辑

也就是说,在 Legacy BIOS 模式下强行使用大于 2TB 的硬盘来作为系统盘,有以下两种结局:

1. 磁盘分区形式用的是 MBR,因此会无法识别大于 2TB 以上的硬盘空间。也就是说,如果 DD 所在的系统盘容量大于 2TB,那么最多只能利用到 2TB,其余的硬盘空间会无法利用。Windows 系统可以正常自动更新。

2. 磁盘分区形式用的是 GPT,因此可以正常使用 2TB 以上的硬盘空间。但是由于是采用非常规方式启动 Windows 系统的,所以该 Windows 系统无法自动更新。
回复

使用道具 举报

22#
 楼主| 发表于 2022-3-19 17:25:35 | 只看该作者
因为想要 Windows 系统所在盘的硬盘空间大于 2TB 也可正常使用,所以最近一直在折腾在 GPT 磁盘里装个 Windows 系统的 VHD 在 DD 到别的硬盘上后,能在 Legacy BIOS 模式下启动和正常自动更新。
Legacy BIOS 模式下启动 GPT 磁盘里的 Windows 系统,已经做到了,而且方法还不止一种。
方法一,Windows 的 bootmgr 不适用于 Legacy BIOS 模式下的 GPT 磁盘,但它适用于 ISO9660。与此同时,Grub2 还支持在 Legacy BIOS 模式下引导 GPT 磁盘。
所以,可以将引导 Windows 的配置文件打包成 ISO 文件,然后从 Grub2 或 Grub4dos 引导该 ISO 文件,从而曲线引导 GPT 分区表下的 Windows 系统。
方法二,利用修改版 grub2 (https://github.com/a1ive/grub)的 ntboot 模块直接引导位于 GPT 磁盘里的 Windows 系统。
问题来了,Legacy BIOS 模式下的 GPT 磁盘里的 Windows 系统是无法自动更新的。
一旦自动更新重启后,就会出现【无法完成更新正在撤销更改请不要关闭你的计算机】错误提示。并且可能陷入死循环,导致系统再也无法启动。
原因是 Windows 更新时肯定会更新引导,这个引导是指开机时选择的分区(即主板设定的第一个生效的引导项所在的分区)里的引导。如果这个引导不是使用 Windows的 bcd,就会提示无法完成更新。
回复

使用道具 举报

21#
 楼主| 发表于 2022-3-19 17:24:23 | 只看该作者
Climbing 发表于 2022-3-19 17:20
你这东拉西扯的,怎么突然又扯到2T硬盘的事儿了,跟咱们讨论的主题有关系吗?跟你用VHD装系统有关系吗?
...

其实我在文章一开始就补充说明了,为什么想要制作这么一个兼容 UEFI 和 BIOS 启动的 Windows 系统 VHD 呢?
是为了要将这个 VHD 文件 DD 到其他机器的硬盘上。

目标机器的硬盘是大于 2TB 的,且是 Legacy BIOS 模式。


回复

使用道具 举报

20#
发表于 2022-3-19 17:20:23 | 只看该作者
teddysun 发表于 2022-3-19 16:51
看来确实是无解的。
要用到大于 2TB 的硬盘,就只能用 GPT 分区表。
Legacy BIOS 模式下转换为 MBR,就 ...

你这东拉西扯的,怎么突然又扯到2T硬盘的事儿了,跟咱们讨论的主题有关系吗?跟你用VHD装系统有关系吗?

既然你要用到2T的硬盘,那就不要使用Legacy BIOS不就完了,我觉得目前还能用的电脑,大部分应该都支持UEFI,如果确实不支持,直接换新电脑就完了。

点评

其实我在文章一开始就补充说明了,为什么想要制作这么一个兼容 UEFI 和 BIOS 启动的 Windows 系统 VHD 呢? 是为了要将这个 VHD 文件 DD 到其他机器的硬盘上。 目标机器的硬盘是大于 2TB 的,且是 Legacy BIOS  详情 回复 发表于 2022-3-19 17:24
回复

使用道具 举报

19#
 楼主| 发表于 2022-3-19 16:51:54 | 只看该作者
Climbing 发表于 2022-3-19 16:44
你应该了解,Legacy BIOS不支持从GPT硬盘启动,对吧?所以,你要先把GPT磁盘转成MBR格式,然后再引导修复 ...

看来确实是无解的。
要用到大于 2TB 的硬盘,就只能用 GPT 分区表。
Legacy BIOS 模式下转换为 MBR,就无法使用大于 2TB 的硬盘。
回复

使用道具 举报

18#
发表于 2022-3-19 16:44:14 | 只看该作者
teddysun 发表于 2022-3-19 12:35
大佬说的有道理,问题是在 GPT 磁盘里的 Windows 系统要如何修复,使其能在 Legacy BIOS 模式下用 Wi ...

你应该了解,Legacy BIOS不支持从GPT硬盘启动,对吧?所以,你要先把GPT磁盘转成MBR格式,然后再引导修复就行了。

点评

看来确实是无解的。 要用到大于 2TB 的硬盘,就只能用 GPT 分区表。 Legacy BIOS 模式下转换为 MBR,就无法使用大于 2TB 的硬盘。  详情 回复 发表于 2022-3-19 16:51
回复

使用道具 举报

17#
 楼主| 发表于 2022-3-19 12:35:56 | 只看该作者
Climbing 发表于 2022-3-17 22:21
你可以将系统安装到vhd里,这完全没有问题,但如果想更新,就不要使用ntboot启动方式。但是,在恢复到目 ...
在恢复到目标机器后,你仍然需要修复引导。


大佬说的有道理,问题是在 GPT 磁盘里的 Windows 系统要如何修复,使其能在 Legacy BIOS 模式下用 Windows 自带的启动方式启动呢?
回复

使用道具 举报

16#
发表于 2022-3-18 21:24:30 | 只看该作者
关注进展。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-5-8 08:24

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表