CheinTian / notes
Clipping · 4 分钟

Proxmox VE — Windows 7 VM 安装指南

📝 摘要

基于 Proxmox VE 8.4.0(i440fx/SeaBIOS)部署 Windows 7 Professional SP1 x64 虚拟机的完整实录,重点解决 VirtIO 驱动安装的兼容性陷阱。核心策略是先用 IDE 模式装系统、再切换 VirtIO Block 控制器,并写入 CriticalDeviceDatabase 注册表条目以避免 0x7B INACCESSIBLE_BOOT_DEVICE 蓝屏。

核心概念: Windows 7 不自带 VirtIO 驱动,且新版 virtio-win-0.1.271 标记为不兼容——必须使用 virtio-win-0.1.173,并通过临时磁盘触发硬件检测 + 注册表修复才能成功切换启动控制器。

关键技术栈 / 关键要点:

  1. VirtIO 驱动版本锁定 — 必须使用 virtio-win-0.1.173(最后一个含 Win7 签名驱动的版本),0.1.271 在 Device Manager 报不兼容
  2. IDE → VirtIO 两阶段安装 — Win7 安装程序无 VirtIO 驱动,先用 ide0 装系统,装完驱动后再切 virtio0
  3. CriticalDeviceDatabase 注册表修复 — 即使 viostor 的 Start=0、Group=SCSI miniport、文件齐全,缺硬件 ID 映射仍会蓝屏;需写入 PCI\VEN_1AF4&DEV_1001 与 DEV_1042 条目
  4. VirtIO Block 优于 VirtIO SCSI — Win7 下 vioscsi 签名有问题,推荐 virtio0 + viostor,性能足够且兼容性好
  5. Windows 7 TLS 修复 — Win7 原生仅 TLS 1.0,需依次安装 KB3020369 → KB3125574 → KB3140245 并启用注册表 TLS 1.2 才能访问现代 HTTPS

关键结论 / 实践建议: 部署 Win7 on PVE 的难点不在系统安装本身,而在驱动切换的启动阶段——临时磁盘触发检测 + CriticalDeviceDatabase 注册表是避免蓝屏的两把钥匙;VNC 剪贴板受限时用 ISO 挂载方式在 VM 内执行脚本。


Proxmox VE — Windows 7 VM 安装指南

基于 PVE 8.4.0 (i440fx/SeaBIOS) 的 Windows 7 Professional SP1 x64 虚拟机部署实录,包含 VirtIO 驱动安装的完整踩坑与解决方案。

最终配置

配置项 值 说明
VMID 115
名称 win7
OS 类型 win7 SeaBIOS + i440fx,不用 UEFI
CPU 4 cores, x86-64-v2-AES
内存 4096 MB (balloon 2048)
系统盘 80 GB, VirtIO Block (virtio0), SAMSUNG2TB 最终用 VirtIO Block 而非 VirtIO SCSI
网络 VirtIO, vmbr0
机器类型 pc-i440fx-9.2+pve1 SeaBIOS
VirtIO 驱动 virtio-win-0.1.173 必须用此版本,新版 0.1.271 不兼容 Win7

完整流程

1. 获取 Windows 7 ISO

来源:Internet Archive — Windows 7 Pro SP1 English (HeiDoc)

  • 文件:Win7_Pro_SP1_English_x64.iso (3.1 GB)
  • SHA-256:3dae1a531b90fa72e59b4a86b20216188d398c8c070da4a5c5a44fe08b1b6e55

PVE 主机无法直接访问 archive.org,需从本地 Mac 下载后 scp 上传:

bash
# 本地下载
curl -L -o /tmp/Win7_Pro_SP1_English_x64.iso \
  'https://archive.org/download/win7-pro-sp1-english/Win7_Pro_SP1_English_x64.iso'

# 上传到 PVE
scp /tmp/Win7_Pro_SP1_English_x64.iso \
  root@192.168.50.3:/var/lib/vz/template/iso/

2. 获取兼容 Win7 的 VirtIO 驱动

关键:必须使用 virtio-win-0.1.173,这是最后一个包含 Win7 签名驱动且有实际兼容性的版本。

bash
# PVE 主机可直接下载此 URL
curl -L -o /var/lib/vz/template/iso/virtio-win-0.1.173.iso \
  'https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/virtio-win-0.1.173-4/virtio-win-0.1.173.iso'

3. 创建 VM(先用 IDE 模式)

Windows 7 安装程序不自带 VirtIO 驱动,必须先用 IDE 磁盘安装系统,安装完后再切换到 VirtIO。

bash
qm create 115 \
  --name win7 \
  --ostype win7 \
  --machine pc-i440fx-9.2+pve1 \
  --cpu x86-64-v2-AES \
  --cores 4 \
  --sockets 1 \
  --memory 4096 \
  --balloon 2048 \
  --net0 virtio,bridge=vmbr0,firewall=1 \
  --scsihw virtio-scsi-single \
  --ide0 SAMSUNG2TB:80 \
  --ide2 local:iso/Win7_Pro_SP1_English_x64.iso,media=cdrom \
  --ide3 local:iso/virtio-win-0.1.173.iso,media=cdrom \
  --boot "order=ide2;ide0" \
  --vga std \
  --serial0 socket \
  --agent 1

注意 --boot "order=ide2;ide0" 的引号,分号会被 bash 解析为命令分隔符。

4. 安装 Windows 7

在 VNC 控制台正常安装,IDE 模式下硬盘直接可见,无需 Load Driver。

5. 安装 VirtIO 磁盘驱动

安装完系统后,需要安装 VirtIO 驱动才能切换磁盘控制器。

方法一(推荐):添加临时 VirtIO 磁盘触发硬件检测

bash
qm set 115 --virtio1 SAMSUNG2TB:1

重启后 Windows 会检测到新硬件,Device Manager 出现带黄色感叹号的未知设备:

  1. 右键该设备 → Update Driver → Browse my computer
  2. 指向光驱 ide3 → viostor\w7\amd64
  3. 安装 Red Hat VirtIO Block Device

❌ "Add Legacy Hardware" 方式无效 — 手动添加硬件时,viostor/vioscsi 驱动均报"不兼容" ❌ MSI 安装器方式不可靠 — virtio-win-gt-x64.msi 运行后驱动未正确注册为启动驱动

安装完成后移除临时磁盘:

bash
qm set 115 --delete virtio1

方法二:如果方法一驱动仍不兼容

如果临时磁盘方式也报不兼容(偶尔发生),需要额外将 VirtIO 硬件 ID 写入 CriticalDeviceDatabase,制作注册表修复 ISO:

bash
mkdir -p /tmp/virtio-fix

cat > /tmp/virtio-fix/virtio-fix.reg << 'EOF'
Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\PCI#VEN_1AF4&DEV_1001&SUBSYS_00000000&REV_00]
"ClassGUID"="{4D36E97B-E325-11CE-BFC1-08002BE10318}"
"Service"="viostor"

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\PCI#VEN_1AF4&DEV_1001]
"ClassGUID"="{4D36E97B-E325-11CE-BFC1-08002BE10318}"
"Service"="viostor"

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\PCI#VEN_1AF4&DEV_1042&SUBSYS_11000000&REV_01]
"ClassGUID"="{4D36E97B-E325-11CE-BFC1-08002BE10318}"
"Service"="viostor"

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\PCI#VEN_1AF4&DEV_1042]
"ClassGUID"="{4D36E97B-E325-11CE-BFC1-08002BE10318}"
"Service"="viostor"
EOF

cat > /tmp/virtio-fix/install.bat << 'EOF'
regedit /s virtio-fix.reg
echo Done! Please shutdown now.
pause
EOF

genisoimage -o /var/lib/vz/template/iso/virtio-fix.iso -J -r /tmp/virtio-fix/
rm -rf /tmp/virtio-fix

将修复 ISO 挂载到 VM(替换掉不再需要的 Win7 安装 ISO):

bash
qm set 115 --ide2 local:iso/virtio-fix.iso,media=cdrom
qm reboot 115

进系统后双击光驱里的 install.bat,完成后关机。

6. 切换磁盘控制器为 VirtIO

bash
qm stop 115
qm set 115 --delete ide0
qm set 115 --virtio0 SAMSUNG2TB:115/vm-115-disk-0.raw,size=80G
qm set 115 --boot "order=ide2;virtio0"
qm start 115

必须写入 CriticalDeviceDatabase 后才能成功切换,否则蓝屏 INACCESSIBLE_BOOT_DEVICE (0x7B)。 原因:Windows 启动时通过 CriticalDeviceDatabase 查找启动设备的驱动映射,即使 viostor 的 Start=0、Group=SCSI miniport、驱动文件都存在,没有硬件 ID 映射仍然无法在启动阶段加载驱动。

7. 清理光驱

bash
qm set 115 --delete ide2
qm set 115 --delete ide3

踩坑总结

问题 原因 解决
PVE 主机无法下载 archive.org 网络限制 从本地 Mac 下载后 scp 上传
安装时 Load Driver 选 viostor 不兼容 virtio-win-0.1.271 不支持 Win7 使用 virtio-win-0.1.173
Device Manager "Add Legacy Hardware" 安装 viostor/vioscsi 报不兼容 Windows 向导无法匹配硬件 ID 添加临时 VirtIO 磁盘让 Windows 自动检测硬件
MSI 安装器装完驱动后切换 VirtIO 仍蓝屏 驱动未注册为启动驱动 写入 CriticalDeviceDatabase 注册表
驱动 Start=0、Group=SCSI miniport、文件都存在但仍蓝屏 缺少 CriticalDeviceDatabase 硬件 ID 映射 写入 PCI\VEN_1AF4&DEV_1001 和 DEV_1042 映射
VNC 无法复制粘贴长命令 Proxmox VNC 剪贴板限制 制作 ISO 挂载到 VM 内执行
VirtIO SCSI (scsi0 + vioscsi) 驱动不兼容 0.1.173 的 vioscsi 签名问题 改用 VirtIO Block (virtio0 + viostor)

VirtIO Block vs VirtIO SCSI

  • VirtIO Block (virtio0 / viostor):简单块设备,Win7 兼容性好,性能足够
  • VirtIO SCSI (scsi0 + scsihw=virtio-scsi-single / vioscsi):更灵活(支持 TRIM/UNMAP 等),但 Win7 驱动兼容性差

对于 Win7 VM,推荐使用 VirtIO Block。

Windows 7 上网须知

Win7 原生只支持 TLS 1.0,无法访问现代 HTTPS 站点或 Windows Update。需手动安装更新:

  1. KB3020369(Servicing Stack Update)→ 重启
  2. KB3125574(Convenience Rollup)→ 重启
  3. KB3140245(TLS 1.2 for WinHTTP)→ 重启

安装 KB3140245 后,还需通过注册表启用 TLS 1.2:

cmd
reg add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\WinHttp" /v DefaultSecureProtocols /t REG_DWORD /d 0x800 /f
reg add "HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Internet Settings\WinHttp" /v DefaultSecureProtocols /t REG_DWORD /d 0x800 /f

更新包无法直接从 Win7 VM 下载(因为 TLS 问题),需从其他机器下载后通过 ISO 或网络传输到 VM 内。

参考链接