🎰 2025年了,Windows 7 还能用吗?

我日常使用的软件很多都不兼容Windows 7了,尤其是浏览器,最新版本的Chrome和Firefox都不支持Windows 7了,想要在Windows 7上使用浏览器,只能使用一些老版本的浏览器,安全性和功能性都大打折扣。虽然有一些第三方浏览器还支持Windows 7,但体验也不如最新版本的主流浏览器。Windows 7的一些技术栈都不在更新了,使用起来越来越不方便了。安装好Windows 7并驱动显卡后,感觉很流畅,尤其是开启Aero特效后,确实惊艳到我了,液态玻璃的灵感原来在这,10年前,怎么就没有发觉呢😢。

Windows 11(KB5072911)感觉越来越难用了,最近插了U盘进去,都能卡上一阵子,直接卡死图形界面了😢。这是我万万没有料到的。手头的联想天骄16几个月前屏幕坏了,被我分尸,把屏幕🖥️扔掉了,只剩下下半身,但由于这个机器原本开机按钮在屏幕侧边,被我拆下来装在铰链位置了,开机得用取卡针推一下,由于没有有线网络,无线在使用过程中感觉传输速度太慢了,就放弃折腾这个东西了。上半年配的这个ITX一开机风扇就💨呼呼转,长时间开着觉得吵闹,以至于手头没有能用的Windows设备,Mac Mini目前在做路由器,没有机器确实不方便。于是就整了了mini PC,主要硬件如下:

  • CPU: Intel i5 8500
  • 主板: HP EliteDesk 800 G4 Mini 95W
  • 内存: 16GB * 2 DDR4(金士顿)
  • 硬盘: 512GB NVMe SSD(七彩虹)
  • 显卡: Intel UHD 630(集成显卡)
  • 网卡:
    • Intel I219-LM(有线网卡)
    • Intel 8265 AC(无线+蓝牙)

装好Proxmox VE 9.0后,一直直通核心失败,官方论坛查了一下,发现9.0下面已知的Bug,最后只能降级到8.4。然后折腾了一下,终于把Windows 7的核显直通搞定了,过程比较曲折,记录一下。

首先,选择用PVE安装Windows 7的主要原因是新硬件很多都不支持Windows 7了,要想得到比较完善的体验,不仅所有硬件都得兼容Windows 7,有对应的驱动,还得避免后续使用过程中不小心安装的软件造成的蓝屏等问题。用虚拟机的方式就能很大程度上避免这些问题。虚拟机要想获得比肩物理机的性能,最好的方式就是直通硬件。

最影响体验的几个硬件需要直通:

  • 显卡: 直通Intel UHD 630集成显卡
  • 声卡: 直通上集成声卡(未成功,原因: 声卡和有线网卡在一个组,直通声卡会导致网卡也被直通,网卡无法被PVE使用,导致通过唯一的网络接口无法访问PVE,解决办法: 加装无线网卡,使用蓝牙连接音频设备)
  • 键鼠: 直通USB键鼠
  • 网卡: Intel 8265 AC无线网卡
  • 蓝牙: Intel 8265 AC蓝牙走的USB协议

资源下载

这里面主要是vbios.rom这个文件比较关键,直接影响显卡能否成功直通。经过测试,这个文件是可以用的,能成功直通。但是看不到BIOS启动画面,只能看到系统启动成功后的画面。网上一些提取vbios对惠普这个机器的bios文件均不太兼容。不过看不到BIOS启动画面影响不大,可以先用VNC连接,等系统启动成功后再切换到显示器上。

启用IOMMU

在PVE主机的BIOS中启用VT-d(IOMMU),不同主板开启方式不同,请参考主板说明书。
然后在PVE主机上启用IOMMU,编辑/etc/default/grub文件,找到如下行:

1
GRUB_CMDLINE_LINUX_DEFAULT="quiet"

修改为:

1
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt initcall_blacklist=sysfb_init pcie_acs_override=downstream,multifunction pci=nommconf"

保存后,更新grub配置:

1
update-grub

然后重启PVE主机:

1
reboot

拉黑直通硬件驱动

查看你想直通的硬件对应的驱动名称:

1
lspci -k

可以看到,Intel UHD 630目前使用的驱动是i915,声卡使用snd_hda_intel和snd_hda_codec_hdmi驱动。为了避免PVE主机加载这些驱动,导致直通失败,需要将这些驱动拉黑。

编辑/etc/modprobe.d/vfio.conf
添加屏蔽pci硬件的id,可以通过lspci -n -k命令查看对应的id:

1
options vfio-pci ids=8086:3e92,8086:a348,8086:0050

编辑 /etc/modprobe.d/pve-blacklist.conf文件,添加如下内容:

1
2
3
4
# Blacklist i915 driver for Intel UHD 630 GPU passthrough
blacklist i915
blacklist snd_hda_intel
blacklist snd_hda_codec_hdmi

保存后,更新initramfs:

1
update-initramfs -u -k all

然后重启PVE主机:

1
reboot

这一套操作完成后,可以通过以下命令确认驱动没有被加载:
再次启动PVE可以看到,屏幕上不会再显示PVE的管理界面信息了,说明
核显驱动没有被加载。

安装Windows 7

安装前不要添加任何硬件直通,先安装好Windows 7系统,安装好后在添加直通硬件。

直通显卡,安装驱动

uhd630没有官方驱动支持Windows 7,网上有一些非官方驱动,经过测试,可以使用并开启aero特效,下载地址:uhd630

其他配置

备份虚拟机

虚拟机的备份路径在: /var/lib/vz/dump

安装完成后备份一下虚拟机,避免后续操作失误导致系统损坏需要重新安装。

几个影响体验的配置:

  • 配置开机启动Windows 7虚拟机

最后的配置文件如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
args: -set device.hostpci0.addr=02.0 -set device.hostpci0.x-igd-gms=0x2 -set device.hostpci0.x-igd-opregion=on
bios: seabios
boot: order=ide0;net0
cores: 4
cpu: host
efidisk0: local-lvm:vm-101-disk-0,efitype=4m,pre-enrolled-keys=1,size=4M
hostpci0: 0000:00:02,pcie=1,romfile=vbios.rom,x-vga=1
ide0: local-lvm:vm-101-disk-1,size=64G,ssd=1
machine: pc-q35-9.2+pve1
memory: 8192
meta: creation-qemu=9.2.0,ctime=1763559028
name: Win7
net0: virtio=BC:24:11:40:48:63,bridge=vmbr0,firewall=1
numa: 0
onboot: 1
ostype: win7
scsihw: virtio-scsi-single
smbios1: uuid=0e0a8442-7f0f-4f04-9b3d-11b99fef952f
sockets: 1
usb0: host=0bda:c811
usb1: host=a8a6:3353
vga: none
vmgenid: a8801d6f-2180-4e9d-85fd-17e71d1d5b48

Nginx反向代理配置

反向代理

由于使用了自签证书,nginx的配置文件里面需要读取证书文件和私钥文件,但默认重启后,证书的保存位置需要在pve-cluster.service之后,所以需要在nginx的systemd配置文件中添加对pve-cluster.service的依赖。否则会出现nginx开机启动由于找不到证书文件而启动失败的问题。这一部分在可以参考官方文档

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
[Unit]
Description=A high performance web server and a reverse proxy server
Documentation=man:nginx(8)
After=network-online.target remote-fs.target nss-lookup.target pve-cluster.service
Wants=network-online.target
Requires=pve-cluster.service

[Service]
Type=forking
PIDFile=/run/nginx.pid
ExecStartPre=/usr/sbin/nginx -t -q -g 'daemon on; master_process on;'
ExecStart=/usr/sbin/nginx -g 'daemon on; master_process on;'
ExecReload=/usr/sbin/nginx -g 'daemon on; master_process on;' -s reload
ExecStop=-/sbin/start-stop-daemon --quiet --stop --retry QUIT/5 --pidfile /run/nginx.pid
TimeoutStopSec=5
KillMode=mixed

[Install]
WantedBy=multi-user.target