首先对「在 Linux 上安装 Windows To Go」潜在问题做一个简单分析:
- Windows 系统的安装过程(从 ESD / WIM 映像释放到 NTFS 分区;dd / Ghost 不算)用到专属于 Windows 的特性,必须要在 Windows 环境下进行(Windows 预安装环境(Preinstall Environment,即 PE)或者完整的 Windows 环境)。需要用虚拟机或者制作 Windows 启动 U 盘。
- Windows 安装程序会阻止把 Windows 安装在 U 盘上。得益于 Linux 的设备文件抽象,如果使用虚拟机方案,这个问题被天然地解决了。
- 如果要同时支持 UEFI 和 BIOS 启动方式,需要使用 MBR 分区表并手动写入引导(关于 MBR 分区表,参见安装 Manjaro To Go「手动安装:分区方案」下的解释)。
下面的内容使用微软官方安装光盘映像中的 Windows PE,通过 Windows 安装程序进行安装。使用第三方 PE 和基于 CBS / DISM 的第三方安装程序也是可行的,但请务必选择可靠的第三方软件。
纯 UEFI 路线
在 Virt-Manager 里面建虚拟机,选 UEFI 固件,把 /dev/sdX 当作 raw image 挂到 SATA 总线上,从光盘启动,正常安装。没了。
稍微展开一下——
新建虚拟机:
edk2-ovmfwin10/dev/sdd
安装:
- 自定义界面点左上角开始安装。
- Windows 光盘会提示按任意键从光盘启动,如果错过的话把虚拟机重启一下。如果不小心把虚拟机关掉了,需要手动设置启动顺序,把光盘勾上提到第一位。
- 现在 Windows 被 QEMU 欺骗,会把 U 盘当作一块普通的 SATA 硬盘,正常安装即为可。
- 提示:装完之后虚拟机别删,Windows To Go 不能进行大版本更新(因为大版本更新必须走 Windows 安装程序,而 Windows 安装程序会阻止在 U 盘上安装),可以再把硬盘挂回虚拟机,从硬盘启动,这样就能正常更新了。
UEFI + BIOS 兼容路线
bcdboot
下面把和「纯 UEFI 路线」不同的地方展开一下——
硬盘分区:
- 推荐使用 host 上的图形界面分区工具,如 GParted、KDE Partition Manager 等。
- 需要一个 FAT32 启动分区,设为活动分区(在 GParted 上是 boot 标记;先不要设为 EFI 系统分区,否则后面写入引导时不能指派盘符,diskpart 也不行),推荐 100 MiB。
- Windows 安装程序是个坑,它会把启动分区格式化成 NTFS。
新建虚拟机:
- 固件使用 BIOS(保持默认即可)。
写入 UEFI 引导:
B:bcdboot C:\Windows /s B: /f UEFI