前段时间,我陆续在 PVE 上安装了 Debian、Arch Linux、Windows 11、FreeBSD 等系统。
折腾到这里,突然产生了一个很单纯的想法:
既然虚拟化环境都搭好了,为什么不装一台 Windows XP 怀旧一下?
Windows XP 发布于 2001 年,距离今天已经过去二十多年。
但有意思的是,真正把它装进 PVE 之后会发现:
XP 其实依然可以非常流畅地运行。
当然,前提是不要试图给它塞进太多现代虚拟硬件。
这次实验最后采用的思路非常简单:
SeaBIOS i440fx qemu32 IDE Disk RTL8139 1 GB RAM RDP没有 VirtIO Disk,没有 QEMU Guest Agent,也没有折腾 SPICE。
最终效果反而非常舒服。
一、为什么还要折腾 Windows XP?
当然不是为了真的把 Windows XP 当作日常操作系统。
更多是几个原因。
第一,是怀旧。
Windows XP 几乎代表了整个 PC 时代非常特殊的一段记忆:
蓝天白云壁纸 经典开始菜单 Windows Media Player Office 2003 QQ Winamp Flash VC6 各种老游戏对于很多人来说,这可能就是第一次真正长期使用 PC 的时代。
第二,是老软件兼容。
有些十几二十年前的软件、开发环境、游戏,在现代 Windows 上反而越来越难运行。
例如:
Visual C++ 6.0 早期 Delphi 老版 Office 老游戏 老驱动工具 一些 ActiveX 软件虚拟机恰好非常适合把这些东西封存在一个独立环境里。
第三,是 PVE 已经把虚拟化基础设施准备好了。
相比为了 XP 再去找一台 Pentium 4 老电脑,创建一台虚拟机显然简单得多。
二、Windows XP 和现代虚拟机最大的区别
现在创建 Windows 11 或 Linux VM,通常会优先考虑:
UEFI Q35 VirtIO SCSI VirtIO NIC QEMU Guest Agent SPICE / QXL Balloon但这些东西对于 Windows XP 来说反而可能成为麻烦。
Windows XP 最舒服的方式不是:
尽量给它最新的虚拟硬件。
而是:
尽量模拟一台 XP 年代真实存在的 PC。
因此这次我整体采用的是比较“复古”的配置。
三、创建 Windows XP 虚拟机
准备好 Windows XP Professional SP3 ISO 后,在 PVE 中创建 VM。
系统类型选择:
Microsoft Windows Windows XP / 2003PVE 本身仍然保留了针对 XP/2003 的系统类型。
1. BIOS 和 Machine
建议:
BIOS: SeaBIOS Machine: i440fx不要使用:
OVMF / UEFI Q35Windows XP 原本就是 BIOS 时代的系统。
SeaBIOS + i440fx 是最省心的组合。
四、显卡:Default 就够了
创建 VM 时,Graphic Card 默认是:
Default一开始我也考虑过找 Cirrus。
但当前 PVE 中已经没有必要刻意使用它。
因此最终直接保持:
Graphic Card: Default安装过程和 XP 桌面都没有出现问题。
如果遇到显示兼容性问题,也可以尝试:
Standard VGA这里没必要一开始就折腾 QXL。
后面会看到,我们甚至根本不需要依赖 SPICE。
五、硬盘:使用 IDE
这是 XP 虚拟机非常重要的一点。
磁盘采用:
Bus/Device: IDE我的虚拟硬盘容量设置为:
64 GB格式使用:
qcow2Windows XP 原生就认识 IDE Controller,因此安装程序可以直接识别硬盘。
如果一开始使用 VirtIO SCSI,Windows XP 安装镜像通常并没有相应驱动,还需要额外加载驱动。
对于一台怀旧机来说完全没有必要。
所以:
IDE反而是最简单的方案。
Discard 不需要开启
这里我没有开启:
DiscardXP 本身并没有现代 Windows 那样的 TRIM 支持。
因此没有必要为了一个基本不会使用的功能增加额外配置。
最终就是:
IDE Disk Discard: Off SSD Emulation: Off把它想象成一块传统机械硬盘即可。
六、CPU 和内存
CPU 配置:
Type: qemu32 Sockets: 1 Cores: 2内存:
1024 MB也就是:
2 Core 1 GB RAM对于 Windows XP 来说已经相当奢侈。
实际运行速度非常快。
没必要给:
4 Core 8 GB RAM CPU hostXP 根本利用不到,而且老系统使用现代 CPU 特性反而可能增加兼容问题。
七、网络:RTL8139
网卡选择:
Model: RTL8139 Bridge: vmbr0而不是 VirtIO。
RTL8139 是 Windows XP 年代非常常见的网卡,XP 对它的兼容性很好。
安装完成后,网卡可以直接正常工作。
因此整套虚拟硬件实际上已经非常像一台二十年前的 PC:
CPU qemu32 RAM 1 GB Disk IDE NIC RTL8139 VGA Standard/Default VGA BIOS SeaBIOS Chipset i440fx八、安装 Windows XP
之后正常从 ISO 启动。
熟悉的蓝色安装界面再次出现:
Windows Setup选择硬盘、格式化 NTFS,然后开始安装。
整个过程和二十年前在真实 PC 上装 XP 基本没有区别。
区别只是:
速度快了很多。
以前安装 Windows XP 可能需要几十分钟。
现在虚拟机里磁盘、CPU 性能都远远超过那个时代的 PC。
九、设备管理器里的两个未知设备
XP 安装完成后,我检查了一下:
设备管理器基本所有硬件都已经正常识别。
但出现了两个未知设备。
第一个硬件 ID:
PCI\VEN_1AF4&DEV_1002...这是:
VirtIO Balloon Device第二个:
ACPI\QEMUVGID这是:
QEMU Virtual Machine Generation ID它们都属于现代虚拟化环境中的设备。
而对于一台 Windows XP 怀旧机来说,实际上都没有什么必要。
十、关闭 Balloon Device
PVE VM 默认可能开启:
Ballooning DeviceBalloon 主要用于动态调整虚拟机内存。
但 XP 这里只有固定:
1024 MB根本没有动态内存的需求。
因此直接在 PVE 中关闭 Balloon Device。
关闭之后,XP 中对应的未知设备自然就消失了。
十一、关闭 VM Generation ID
另一个:
ACPI\QEMUVGID是 VM Generation ID。
它主要用于让现代操作系统知道虚拟机发生过:
Snapshot Restore Clone Migration之类的虚拟机状态变化。
XP 并不会真正使用它。
这个选项目前 PVE Web 页面中没有直接显示,所以需要在 PVE Shell 中修改。
假设 VMID 为:
152先确认:
qm config 152 | grep vmgenid然后关闭虚拟机:
qm stop 152禁用:
qm set 152 --vmgenid 0重新启动:
qm start 152再次进入 Windows XP 后:
ACPI\QEMUVGID这个未知设备也消失了。
至此设备管理器非常干净。
十二、QEMU Guest Agent 要不要装?
我的选择是:
不装。
QEMU Guest Agent 对现代 Windows/Linux VM 非常有价值。
例如:
读取 Guest IP Guest Shutdown 文件系统 Freeze PVE 与 Guest 通信但 Windows XP 已经不属于现代 VirtIO Windows Driver 的主要支持目标。
想给 XP 安装 Guest Agent,往往还需要寻找非常旧的 VirtIO Driver 和 Guest Agent。
对于一台怀旧机而言,完全属于:
为了功能而增加复杂度。
所以这次干脆保持:
QEMU Guest Agent: DisabledPVE 仍然可以:
启动 VM 关闭 VM 做 Snapshot 做 Backup对我的使用没有什么实际影响。
十三、SPICE 要不要折腾?
这个问题我一开始也考虑过。
之前在 Debian、Arch Linux、Windows 11 VM 上使用 SPICE,体验确实很好。
例如:
动态分辨率 剪贴板 音频 remote-viewer但 XP 又不同。
想要获得完整 SPICE 体验,需要寻找能够支持 XP 的旧版本:
QXL Driver SPICE Guest Tools驱动版本和兼容性都比现代系统麻烦很多。
后来我发现:
其实根本没有必要。
因为 Windows XP Professional 自带:
Remote Desktop也就是 RDP。
十四、开启 Windows XP RDP
进入:
我的电脑 → 属性 → 远程勾选:
允许用户远程连接到这台计算机然后确保 Windows Firewall 中允许:
远程桌面或者确认 TCP 3389 已经监听:
netstat -an | find "3389"正常会看到:
0.0.0.0:3389十五、一个容易踩的小坑:账户必须有密码
我第一次通过 Remmina 登录时遇到了:
用户名或密码错误一开始还以为是:
WORKGROUP Domain 用户名格式的问题。
实际上原因非常简单:
Windows XP 本地账户没有设置密码。
Windows XP 默认禁止空密码账户通过 RDP 远程登录。
给用户设置密码后:
用户名 密码直接登录即可。
甚至不需要:
COMPUTERNAME\username用户名本身就可以正常使用。
十六、Ubuntu 使用 Remmina 连接 XP
我的主力机是 Linux,因此直接使用:
Remmina协议:
RDP服务器填 XP IP:
192.168.x.x然后:
Username: pveuser Password: ******即可连接。
Windows XP 的 RDP 客户端体验让我有些意外。
它比我预想中好很多。
鼠标非常流畅,窗口刷新也明显比 noVNC 更舒服。
所以最后我的方案变成:
PVE noVNC ↓ 安装 / 故障排查 RDP ↓ 日常使用这样甚至都不需要 SPICE。
十七、RDP 还能直接传声音
更加意外的是:
RDP 甚至已经解决了声音问题。
在 Remmina 中编辑连接,在高级设置里将声音设置为:
Sound: Local重新连接 XP。
然后 Windows XP 中会出现类似:
Microsoft RDP Audio Driver的音频设备。
XP 中播放:
Windows XP Startup.wav声音会直接从 Ubuntu 主力机扬声器播放出来。
也就是说:
Windows XP ↓ RDP Audio ↓ Remmina ↓ Ubuntu ↓ Speaker这一点非常舒服。
甚至没有必要再给 PVE VM 添加:
AC97虚拟声卡。
十八、最后采用的配置
最终这台 XP VM 非常简单:
OS Windows XP Professional SP3 BIOS SeaBIOS Machine i440fx CPU qemu32 1 Socket 2 Core Memory 1024 MB Disk IDE 64 GB qcow2 Network RTL8139 Graphic Default Balloon Disabled VM Generation ID Disabled QEMU Guest Agent Disabled SPICE Not Used Remote RDP虚拟机结构可以简单理解为:
Proxmox VE │ ┌─────────┴─────────┐ │ │ SeaBIOS i440fx │ Windows XP SP3 │ ┌──────┼──────┐ │ │ │ IDE RTL8139 VGA │ │ Disk vmbr0 │ LAN │ Ubuntu │ Remmina │ RDP ┌───┴────┐ Video Audio它并没有使用多少现代虚拟化特性。
但这恰恰是关键。
十九、老系统其实不一定需要“现代化”
折腾完成以后,我最大的体会反而是:
对老系统来说,最好的虚拟机配置并不一定是最新的虚拟硬件。
Windows 11 可以:
VirtIO QEMU Guest Agent SPICE QXL UEFI Q35但 Windows XP 更适合:
IDE RTL8139 SeaBIOS i440fx RDP这和真实硬件其实是一样的。
很多时候,兼容性不是通过不断增加组件解决的。
而是:
尽量减少系统不认识的东西。
最终甚至把:
Balloon VMGenID QEMU Guest Agent SPICE都去掉了。
反而得到了一台非常干净的 Windows XP VM。
二十、Windows XP 还能用来干什么?
当然,我不会建议把 Windows XP 当作现代日常操作系统。
毕竟它已经停止安全更新很多年。
但作为隔离的虚拟机,它依然非常适合:
老游戏 老软件 Visual C++ 6.0 Office 2003 老版浏览器测试 老 Windows 软件兼容实验 软件考古 怀旧尤其配合 PVE:
Snapshot Backup Clone随便怎么玩都不怕。
软件搞坏了:
Rollback即可。
这甚至比二十年前真正使用 XP 更舒服。
写在最后
二十多年前,一台能流畅运行 Windows XP 的电脑可能意味着:
Pentium 4 512 MB / 1 GB RAM IDE HDD 百兆网卡 CRT 显示器今天它只是 PVE 中一个:
1 GB RAM 2 Core 几十 GB Disk的小虚拟机。
但当熟悉的:
Windows XP启动音乐再次从 RDP 中传出来时,还是会有一种非常奇怪的感觉。
技术已经跨过了很多代。
但有些东西一打开,
还是一下子回到了二十年前。