void-vtoyboot 中我提到借助 Ventoy vtoyboot,使用 void-mklive 自定义镜像,并使用 vlnk 启动本地 VDI,实现类似 Windows to Go (WTG) 的效果。
当然,那篇中实现的是 Void to Go,借助 vhdboot 和 vlink,也能实现 WTG 的加强版,Windows in a single VHD (VHDX) 的效果。
首先解释一下为什么不推荐 WTG:
什么叫「通用」,还是拿上面的 vtoyboot 举例:
当然,vhdboot 的方法也有几个缺点:
对于第一个缺点,可以(在符合许可证的前提下)使用 Windows Server 镜像,不过需要注意服务器镜像通常会对驱动进行阉割,以及部分软件会检测 Windows 版本,屏蔽服务器的安装(虽然拆包绕过即可安装,或者直接提取 INF 到对应位置就完事了),要确保自身有能力排查和解决问题。
另一种通用的方式就是参考 我的 Windows 软件之道#镜像 自行定制和封装母盘,还可以顺带注入驱动、注册表和功能设置,配合无人值守,从 OOBE 阶段就遥遥领先,进系统跑一下优化脚本,随后再用脚本自动装机,再用脚本自动恢复配置就完成初始化了。
流程本身很简单,vhdboot 插件介绍页面写了几个注意事项,可以看看。
上面对于安装部分仅仅一笔带过,实际上(仅仅借助虚拟机软件安装)还是有一点复杂的。当然,如果本来就知道怎么安装 Windows 到 VHD/VHDX,那其实也是小菜一碟。
由于之前做的是完全离线的 VM/WTG,最近需要新的联网开发用 WTG,从笔记中捞出了完整的创建流程,顺带记录在此。
/EFI/Boot/bootx64.efi
和 /EFI/Microsoft/Boot/BCD
等一堆名字# mkisofs 命令来自 cdrtools
# 通过 cdrtools -> virt-manager-tools -> virt-manager 的依赖关系安装
mkisofs -V "SERVER" -o server.iso ./20348.2582_SERVERDATACENTER_X64_EN-US
当然如果非要做还是可以实现的,无非是修改注册表或者复制系统分区的全部文件到一个新的 VHD/VHDX,并保证权限正确,设置启动项,在新 VHD/VHDX 中升级系统,然后复制回系统分区(是不是听着很耳熟,嗯,其实和 vhdboot 的原理是类似的,完全没必要舍近求远,直接用 vhdboot 吧) ↩︎
虽然之前的版本也没精简多少,Windows 95 都要 100M 往上,能够供应日常使用的话需要 200M,而 MSDOS-6.22 真的只需要三张安装软盘的 6.7M 大小 ↩︎
这里针对的主要是 GNU/Linux 宿主机,因为 Windows 宿主机在封装母盘阶段即可直接在安装光盘中注入 Windows 驱动,从而绕开驱动安装程序对虚拟机环境的检测 ↩︎
Windows 10 1803 之前的版本,存放 VHD/VHDX 的分区必须是 NTFS;Windows 10 1809(注意和前面的版本号不一样,这是 Windows 10 LTSC 2019 的母盘)开始还可以存放在 exFAT,但出于兼容性考虑,还是直接 NTFS 一劳永逸吧= = ↩︎
大小看个人需求,对于离线/纯内网访问的 Windows Server 而言,4G2C+20G SSD 的配置足以应付大多数场景。承载部分更新或托管服务时才需要扩展硬盘。对于普通 Windows,一般 50G 也够用,不在乎硬盘或者想一劳永逸完全可以分配个 200G,反正 VHDX 可以动态扩展,还可以通过 Optimize-VHD -Path "blahblah.vhdx" -Mode Retrim -Confirm
命令不定期压缩,并不会占用多余空间 ↩︎
由于 ISO 文件有很多标准,不保证其他系统也能这么用,Windows 使用的是 ISO 9660,前身为 ECMA-119 ↩︎
Sine īrā et studiō