感谢:wzy,wintoflash,minlearn
需求:主机商提供的产品存储超过2TB容量,且仅支持bios方式启动机子。Linux系统能在 bios + gpt 的环境中正常安装和运行,但 Windows 系统要求 bios + mbr 或uefi + gpt 的组合,不支持 bios + gpt 的场景。
方案A:从网友 wzy 的博客来看,Windows的启动管理bootmgr.exe不认gpt分区,所以启动不了。解决方法是创建一个包含启动代码和文件的虚拟磁盘文件来启动Windows。
方案B:从网友 minlearn 在无忧论坛里和 ntboot 作者 wintoflash 交流帖可知,通过 ntboot 是可以启动 bios + gpt 磁盘上已经安装的Windows系统(不支持Windows安装,会报“Windows安装程序 - 无法将 Window 配置为在此计算机的硬件上运行”的错误)。
方案C:用grub4dos的ntloader来启动Windows。测试失败,用grub4dos的ntloader可以让gpt上的windows进入到桌面,但如计算机名、配置网卡静态IP地址等更改操作在重启系统后不生效。
这里记录一下实践的过程:
方案A:
1. 创建一个vhd固定大小的虚拟磁盘,如 18 GB,名称为win2022.vhd
2. 该vhd虚拟磁盘至少有三个分区,第一个是BIOS Partition,这个特别的分区是grub2必需的,可通过Linux系统里的cfdisk程序来创建。如下边的分区例子:
- Device Start End Sectors Size Type
>>/dev/sdb1 2048 32767 30720 15M BIOS boot
/dev/sdb2 32768 647167 614400 300M EFI System
/dev/sdb3 647168 679935 32768 16M Microsoft reserved
/dev/sdb4 679936 37746687 37066752 17.7G Microsoft basic data
3. 创建第二个vhd固定大小的虚拟磁盘,本例的容量为64MB,名称为bootmgr.vhd。磁盘用MBR分区,创建一个主分区,且设置为活动分区
4. 在Windows系统里附加两个vhd虚拟磁盘,假如本例中,第一个大的虚拟磁盘的NTFS分区盘符是M:,ESP分区盘符是L:;第二个虚拟磁盘的分区的分区盘符是B:
5. 将已经安装好的Windows映像释放到NTFS分区中,如本例中的第4个分区M:,执行 bcdboot.exe M:\Windows /s L: /v /f uefi 将创建uefi相关的启动文件到 L: 分区 ;执行 bcdboot.exe M:\Windows /s B: /v /f bios 将创建bois相关的启动文件到 B: 分区;执行 bootsect /nt60 B: /mbr 将在B:上创建启动代码
6. 分离第二个虚拟磁盘
7. 将bootmgr.vhd的虚拟磁盘文件放到第一个vhd虚拟磁盘中的esp分区中L:
8. 分离第一个虚拟磁盘
9. 将win2022.vhd磁盘挂到一个debian系统的虚拟机里,挂载后,esp分区/dev/sdb2路径为/mnt/1,用grub-install将grub2安装到vhd磁盘。如例:grub-install --target=i386-pc /dev/sdb --boot-directory=/mnt/1;复制/usr/lib/syslinux/memdisk 文件 到esp分区/mnt/1
10. 复制或创建一个grub的配置文件,放在grub目录里,配置文件需有bootmgr.vhd的启动项内容,如本例的部分内容:
- menuentry "bootmgr.vhd" {
insmod part_msdos
insmod part_gpt
insmod fat
insmod ntfs
linux16 /memdisk raw
initrd16 /bootmgr.vhd
}
11.正常的情况下,该包含有grub2,bootmgr.vhd和Windows的gpt vhd虚拟磁盘,能在VirtualBox的bios或efi虚拟机里启动
问题:因为Windows是已经安装的,所以如将这个win2022.vhd复制使用,Windows的SID、计算机名称等是一样的。微软建议用sysprep来生成新的SID,避免机子加域时遇到问题。
参考:
http://bbs.wuyou.net/forum.php?mod=viewthread&tid=429265http://bbs.wuyou.net/forum.php?mod=viewthread&tid=417545https://wzyboy.im/post/1049.htmlhttps://docs.microsoft.com/zh-cn/windows-hardware/manufacture/desktop/windows-setup-installing-using-the-mbr-or-gpt-partition-style?view=windows-11https://wiki.archlinux.org/title/GRUB_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)https://docs.microsoft.com/en-us/windows-hardware/manufacture/desktop/bcdboot-command-line-options-techref-di?view=windows-11https://docs.microsoft.com/en-us/windows-hardware/manufacture/desktop/bootsect-command-line-options?view=windows-11http://reboot.pro/index.php?showtopic=19516http://reboot.pro/index.php?showtopic=22474https://wiki.syslinux.org/wiki/index.php?title=MEMDISKhttps://techcommunity.microsoft.com/t5/windows-blog-archive/the-machine-sid-duplication-myth-and-why-sysprep-matters/ba-p/723859http://grub4dos.chenall.net/
热议
2楼 ccf 7天前
支持技术贴
3楼 aipage 7天前
有没有大佬总结一下,一句话的。
4楼 zxxx 7天前
方案A:从网友 wzy 的博客来看,Windows的启动管理bootmgr.exe不认gpt分区,所以启动不了。解决方法是创建一个包含启动代码和文件的虚拟磁盘文件来启动Windows。
实操方案A?
5楼 LiuJia 7天前
实操方案A?
方案A、B和C我都操作过几次。这个帖子里是贴出了方案A的过程;方案B minlearn 在论坛里的其它帖子里已经分享出来了;方案C实操失败了。
6楼 zxxx 7天前
方案A、B和C我都操作过几次。这个帖子里是贴出了方案A的过程;方案B jiaogeshaminghn 在论坛里的其它帖子 ...
方案A能否执行windows更新?
7楼 LiuJia 7天前
方案A能否执行windows更新?
未知。没在线上的实机测试,目前仅在本地的VirtualBox虚拟机简单测试启动和关机过程。
8楼 zxxx 7天前
未知。没在线上的实机测试,目前仅在本地的VirtualBox虚拟机简单测试启动和关机过程。 ...
好像需要在windows启动的时候,通过powershell挂载那个vhd
9楼 jiaogeshaminghn 7天前
我有一键制作的1keydd ci.sh脚本
这个除了windows,还支持除windows之外的其它系统
另外,你的贴子少了很多细节,其中有一条还挺关键。
10楼 LiuJia 7天前
好像需要在windows启动的时候,通过powershell挂载那个vhd
按 https://wzyboy.im/post/1049.html 里说的,bootmtr.vhd 是固定大小的虚拟磁盘,是可当 raw 虚拟磁盘用的。Grub2里的memdisk可直接启动。
12楼 LiuJia 6天前
大佬测试一下,能不能正常更新?
您指的是 teddysun 在这里提到的现象 https://hostloc.com/thread-981273-6-4.html 吗?是的,在本地虚拟机测试后,方案A的,Windows更新也被回撤了。
13楼 zxxx 6天前
您指的是 teddysun 在这里提到的现象 https://hostloc.com/thread-981273-6-4.html 吗?是的,在本地虚拟 ...
感谢回复。就是这个情况,不知道如何解决。
14楼 xiaohi 昨天23:41
您指的是 teddysun 在这里提到的现象 https://hostloc.com/thread-981273-6-4.html 吗?是的,在本地虚拟 ...
Windows更新也被回撤了 求老大處理
15楼 LiuJia 半小时前
Windows更新也被回撤了 求老大處理
是的,这种(vhd虚拟磁盘启动 bios + gpt 上的Windows系统)方法,不能打上Windows的关键更新。
或许,还可以试试其它方法。请问,您是在什么样配置的机子里测试呢?是vps还是物理机?CPU和内存配置是什么样的呢?
申明:本文内容由网友收集分享,仅供学习参考使用。如文中内容侵犯到您的利益,请在文章下方留言,本站会第一时间进行处理。
评论前必须登录!
立即登录 注册