P2V Windows XP mit RS-232 und direkter Grafikausgabe + Steuerung

dwindling8499

New Member
Aug 8, 2025
7
1
3
Hallo Zusammen

ich habe hier einen Windows XP Rechner mit sterbender Hardware. Daher soll er virtualsiert werden. Niemand weiß noch, wie die Software installiert und konfiguriert wird. Er wird zum Verwalten einer Tankstelle über RS-232 verwendet (Berechtigung/Logging). Im besten Fall merkt der Endnutzer/Verwalter nicht einmal etwas vom Tausch.

Als Hardware soll ein PC mit i3 7100 + 500GB SSD und 8GB RAM dienen. Als dedizierte GPU eine P1000 für direkte Displayausgabe auf einen Monitor.

Ich habe mal testweise eine Windows 10 Maschine (BIOS/CSM/MBR) mit disk2vhd virtualisiert und konnte diese dann auch in Proxmox booten und über VNC anzeigen. Nur leider liefer die Maschine, sobald die Grafikkarte als "Primary GPU" ausgewählt wird kein Bild für den angeschlossenen Monitor. Sowohl in q35 als auch in i440fx.

Aktuelle Konfig:

1. GRUB-Konfiguration
(/etc/default/grub)
Bash:
GRUB_DEFAULT=0
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(. /etc/os-release && echo ${NAME})"
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt"
GRUB_CMDLINE_LINUX=""

2. VFIO-PCI-Modulkonfiguration (/etc/modprobe.d/vfio.conf)
Bash:
options vfio-pci ids=10de:1cb1,10de:0fb9 vfio_iommu_type1 allow_unsafe_interrupts=1

3. IOMMU-Status (dmesg | grep -e DMAR -e IOMMU)
Code:
[    0.007820] ACPI: DMAR 0x0000000086B08D88 0000C8 (v01 INTEL  KBL      00000001 INTL 00000001)
[    0.007839] ACPI: Reserving DMAR table memory at [mem 0x86b08d88-0x86b08e4f]
[    0.029153] DMAR: IOMMU enabled
... (gekürzt) ...
[    0.297968] DMAR: Intel(R) Virtualization Technology for Directed I/O

4. NVIDIA-GPU-Details (lspci -v)
Code:
01:00.0 VGA compatible controller: NVIDIA Corporation GP107GL [Quadro P1000] (rev a1)
    Subsystem: NVIDIA Corporation Device 11bc
    Flags: fast devsel, IRQ 16, IOMMU group 2
    Memory at ee000000 (32-bit, non-prefetchable) [size=16M]
    Memory at 2fe0000000 (64-bit, prefetchable) [size=256M]
    Memory at 2ff0000000 (64-bit, prefetchable) [size=32M]
    I/O ports at e000
    Expansion ROM at ef000000 [disabled] [size=512K]
    Kernel driver in use: vfio-pci
    Kernel modules: nvidiafb, nouveau

5. NVIDIA-Geräte-IDs (lspci -nn | grep NVIDIA)
Code:
01:00.0 VGA compatible controller [0300]: NVIDIA Corporation GP107GL [Quadro P1000] [10de:1cb1] (rev a1)
01:00.1 Audio device [0403]: NVIDIA Corporation GP107GL High Definition Audio Controller [10de:0fb9] (rev a1)

6. VFIO-Modulstatus (lsmod | grep vfio)
Code:
vfio_pci               16384  2
vfio_pci_core          86016  1 vfio_pci
irqbypass              12288  2 vfio_pci_core,kvm
vfio_iommu_type1       49152  1
vfio                   65536  9 vfio_pci_core,vfio_iommu_type1,vfio_pci
iommufd               110592  1 vfio

7. Treiber-Blacklist (/etc/modprobe.d/blacklist.conf)
[code bash]
blacklist nvidiafb
blacklist nouveau
[/code]

8. Automatisch ladende Kernelmodule (/etc/modules)
Code:
vfio
vfio_iommu_type1
vfio_pci
vfio_virqfd

9. Proxmox-VM-Konfiguration (/etc/pve/qemu-server/102.conf)
Bash:
balloon: 0
boot: order=ide3
cores: 2
cpu: x86-64-v2-AES
hostpci0: 0000:01:00.0,rombar=0,x-vga=1
hostpci1: 0000:01:00.1
ide0: local:iso/virtio-win-0.1.271.iso,media=cdrom,size=709474K
ide1: local-lvm:vm-102-disk-0,size=476944M
ide2: none,media=cdrom
ide3: local-lvm:vm-102-disk-1,size=228940M
machine: pc-i440fx-5.1
memory: 4096
meta: creation-qemu=10.0.2,ctime=1754660534
name: P2871bios
numa: 0
ostype: win10
scsihw: virtio-scsi-single
smbios1: uuid=e242cb42-33aa-4bd2-8c35-e48589d4ccaf
sockets: 1
vga: none
vmgenid: 114dc5f2-56b0-4fa2-b475-bf47015b797c

#Ohne PCI 01:00.0 alle Funktionen

Code:
root@pve:~# qm start 102
error writing '1' to '/sys/bus/pci/devices/0000:01:00.0/reset': Inappropriate ioctl for device
failed to reset PCI device '0000:01:00.0', but trying to continue as not all devices need a reset
Code:
root@pve:~# qm monitor 102
Entering QEMU Monitor for VM 102 - type 'help' for help
qm> info pci
  Bus  0, device   0, function 0:
    Host bridge: PCI device 8086:1237
      PCI subsystem 1af4:1100
      id ""
  Bus  0, device   1, function 0:
    ISA bridge: PCI device 8086:7000
      PCI subsystem 1af4:1100
      id ""
  Bus  0, device   1, function 1:
    IDE controller: PCI device 8086:7010
      PCI subsystem 1af4:1100
      BAR4: I/O at 0xf0a0 [0xf0af]
      id ""
  Bus  0, device   1, function 2:
    USB controller: PCI device 8086:7020
      PCI subsystem 1af4:1100
      IRQ 11, pin D
      BAR4: I/O at 0xf080 [0xf09f]
      id "uhci"
  Bus  0, device   1, function 3:
    Bridge: PCI device 8086:7113
      PCI subsystem 1af4:1100
      IRQ 9, pin A
      id ""
  Bus  0, device   5, function 0:
    PCI bridge: PCI device 1b36:0001
      IRQ 10, pin A
      BUS 0.
      secondary bus 1.
      subordinate bus 1.
      IO range [0xe000, 0xefff]
      memory range [0xfe400000, 0xfe5fffff]
      prefetchable memory range [0x7070000000, 0x707fffffff]
      BAR0: 64 bit memory at 0x7000000000 [0x70000000ff]
      id "pci.3"
  Bus  0, device  16, function 0:
    VGA controller: PCI device 10de:1cb1
      PCI subsystem 10de:11bc
      IRQ 11, pin A
      BAR0: 32 bit memory at 0xfd000000 [0xfdffffff]
      BAR1: 64 bit prefetchable memory at 0x7040000000 [0x704fffffff]
      BAR3: 64 bit prefetchable memory at 0x7080000000 [0x7081ffffff]
      BAR5: I/O at 0xf000 [0xf07f]
      id "hostpci0"
  Bus  0, device  17, function 0:
    Audio controller: PCI device 10de:0fb9
      PCI subsystem 10de:11bc
      IRQ 10, pin B
      BAR0: 32 bit memory at 0xfe600000 [0xfe603fff]
      id "hostpci1"
  Bus  0, device  30, function 0:
    PCI bridge: PCI device 1b36:0001
      IRQ 10, pin A
      BUS 0.
      secondary bus 2.
      subordinate bus 2.
      IO range [0xd000, 0xdfff]
      memory range [0xfe200000, 0xfe3fffff]
      prefetchable memory range [0x7060000000, 0x706fffffff]
      BAR0: 64 bit memory at 0x7000001000 [0x70000010ff]
      id "pci.1"
  Bus  0, device  31, function 0:
    PCI bridge: PCI device 1b36:0001
      IRQ 11, pin A
      BUS 0.
      secondary bus 3.
      subordinate bus 3.
      IO range [0xc000, 0xcfff]
      memory range [0xfe000000, 0xfe1fffff]
      prefetchable memory range [0x7050000000, 0x705fffffff]
      BAR0: 64 bit memory at 0x7000002000 [0x70000020ff]
      id "pci.2"

PCI ohne alle Funktionen
Code:
qm start 102
device '0000:01:00.1' assigned more than once

Gibt für diese Anwendung eine besser Lösung? Ich komm nicht weiter...
 
Last edited:
Hi, wenn du ein XP virtualisieren möchtest, muss du das XP erst einmal richtig IDE Bootfähig machen. Dafür gibt es das Tool "MergeIDE", damit werden die benötigten Registry Keys gesetzt und dann kannst du dein Backup oder Image von der Kiste in eine VM importieren und die OS Disk unbedingt als IDE einhängen. Dann bootet XP auch wieder.
Einen Seriellen Port durchreichen ist easy, nur aktuelle Hardware hat oft kein RS232 mehr, da kann man sich mit einem USB Dongle oder einer kleinen PCI Karte behelfen. Diese kannst du dann auch exklusiv an die VM durchreichen.
 
ich habe hier einen Windows XP Rechner mit sterbender Hardware
Ich habe mal testweise eine Windows 10 Maschine (BIOS/CSM/MBR) mit disk2vhd virtualisiert
Du hast ein XP System das virtualisiert werden soll und testest dann eine windows 10 installation als VM?
Wenn überhaupt müsstest du die alte Hardware mal mit einem Imager sichern und diese in Die VM zurückspielen. Da können noch ganz andere Überaschungen auf dich zu kommen, als die grafikkarte.

Schon mal daran gedacht, die alte Technik zu ersetzen?
 
Schon mal daran gedacht, die alte Technik zu ersetzen?
Das ist bei alten Industrieanlagen, die viele hunderttausende bis millionen €kosten,n mitunter nicht so einfach ;)

Neben dem Hinweis von @Falk R. bez. Treibern, die virtuelle HW so alt wie möglich für den Anfang:

Machine type: i440
Disk als IDE, maximal SATA

Falls der Rechner tatsächlich eine echte Serielle Schnittstell hat (mitunter muss diese noch mittels Kabel von einem Motherboarstecker an die Rückseite hinausgeführt werden, kannst du via CLI diesen direkt durchreichen: qm set VMID --serial0 /dev/ttySabc. Welches tty Device es tatsächlich ist, musst du natürlich herausfinden.

Und vom physichen Host mit einer Linux Live ISO am besten mal ein komplettes Abbild machen mit dem man dann auch mal erste Tests machen kann, und um ein Backup zu haben, falls die alte HW nicht mehr will ;)
 
Last edited:
Hey,

nicht ganz Proxmox, aber ich habe "letztens" (vor zwei drei Jahren) ein Windows NT ersetzen müssen, auch mit einer RS485 Karte, also ähnlich.
Es gibt so UDS1100 Geräte von Lantronix zum Beispiel.
Da habe ich das Windows NT auf einem Windows 10 Laptop mit Virtualbox virtualisiert, dort im Windows 10 per Netzwerk auf das UDS1100 an der Maschinensteuerung.
Der UDS Treiber stellt dann eine virtuelle Com-Schnittstelle bereit. Die habe ich der virtuellen Windows NT Maschine gegeben. Geht in Virtualbox einfach. Und auch NT oder auch XP läuft da "leichter".

Hat zwei Jahre gelaufen und der Laptop hatte auch gleich seine eigene USV.

Viel Erfolg.
 
Danke für den Tipp.
Ich habe jetzt mal Testweise eine Windows 11 VM (UEFI) aufgesetzt, GPU durchgereicht. Funktioniert wunderbar.
Leider läuft es unter i440fx überhaupt nicht. x-vga=1 schmeißt jedes mal Fehler und startet dann nicht:
qm start 101
error writing '1' to '/sys/bus/pci/devices/0000:01:00.0/reset': Inappropriate ioctl for device
failed to reset PCI device '0000:01:00.0', but trying to continue as not all devices need a reset
kvm: -device vfio-pci,host=0000:01:00.0,id=hostpci0,bus=pci.0,addr=0x10,rombar=0,x-vga=on,romfile=/usr/share/kvm/NVS300.rom: vfio 0000:01:00.0: failed getting region info for VGA region index 8: Invalid argument
device does not support requested feature x-vga
start failed: QEMU exited with code 1

cat /etc/pve/qemu-server/101.conf
balloon: 0
boot: order=ide1;ide2
cores: 2
cpu: x86-64-v2-AES
hostpci0: 0000:01:00.0,rombar=0,x-vga=1,romfile=NVS300.rom
hostpci1: 0000:01:00.1,rombar=0
ide0: local:iso/virtio-win-0.1.271.iso,media=cdrom,size=709474K
ide1: local-lvm:vm-101-disk-1,size=228940M
ide2: none,media=cdrom
kvm: 1
machine: pc-i440fx-9.2+pve1
memory: 4096
meta: creation-qemu=9.2.0,ctime=1754918892
name: Windows10SeaBios
numa: 0
ostype: win10
scsihw: virtio-scsi-single
smbios1: uuid=384b46a2-36e2-4f29-897a-01f81445a850
sockets: 1
usb0: host=0781:5583
vga: none
vmgenid: e700d439-74b2-4e3d-9b3d-b0b18aeed82e

Mir ist bewusst, dass Windows XP noch ganz andere Schwierigkeiten haben kann, aber im Grunde sollte es Ähnlich sein.
Selbst mit einer Uralt NVS300 läuft x-vga=1 nicht. Selbes verhalten wie mit der gt730 und P1000.

Gibt es eine andere Möglichkeit, den die Videoausgabe direkt über einen Videoport des Hosts zu schicken?
 
Last edited:
Windows 11 und i440fx - das passt ja auch technisch nicht so ganz zusammen,
Hier mal 440fx : https://www.qemu.org/docs/master/system/i386/pc.html

Als Hardware soll ein PC mit i3 7100 + 500GB SSD und 8GB RAM dienen
Warum installierst du auf der Kiste nicht ein Windows 10 und VMware Workstation. Ab V17 ist das teil auch kostenfrei für Business.
Brauchst nur ein Konto für den Download oder schaust mal bei Deskmodder vorbei.

Die VM kannst mit dem Vmware Standalone Converter in eine VM überführen, die Hardware die benötigt wird kannst durchreichen und das Teil dann im Vollbildmodus laufen lassen.

Wenn die VM wie gewünscht läuft kannst diese einfach komplett auf ein externes Medium sichern und im bedarf direkt auf einem neuen PC wieder einstellen, "VM moved" auswählen und das läuft dann auch wieder.

Ich will dich nicht von Proxmox abhalten - man kann es sich aber auch schwer machen!
Aber wenn Proxmox, dann mach es bitte gleich mit Windows XP - den dass ist deine Ausgangsbasis - old Technik needed.
 
Last edited:
  • Like
Reactions: Johannes S
Windows 11 lief unter q35 und uefi.
Die virtualisierte Windows 10 Kiste läuft auf BIOS/i440fx.

Offenbar ist x-vga nicht kompatibel mit i440fx. Hab ich nirgends in den Docs gefunden.

Mir bleibt wohl keine Wahl, als VMware zu nutzen...
Danke für dein feedback
 
  • Like
Reactions: ThoSo
Warum muss die (XP) VM denn unbedingt eine dedizierte Graka haben? Soll das Bild auf einen Monitor geleitet werden? SeaBios (440fx) erwartet beim passthrough ein option ROM, was es laden kann. Das geht aber meist nur mit wesentlich älteren Karten (K2000, GTX750, etc.)

Edit: Alternative für „echtes“ Bild wäre noch ein Raspi als VDI Client. Habe ich vor kurzem noch für eine Wasserstrahlschneidmaschine so umgesetzt.
 
Last edited:
Hast Du das passthrough auch mit aktiviertem IOMMU und rom file getestet?
 
Windows 11 lief unter q35 und uefi.
Die virtualisierte Windows 10 Kiste läuft auf BIOS/i440fx.

Offenbar ist x-vga nicht kompatibel mit i440fx. Hab ich nirgends in den Docs gefunden.

Mir bleibt wohl keine Wahl, als VMware zu nutzen...
Warum?
Du kannst jedes OS ab 2012/Win8 auf q35 umstellen. Läuft Problemlos.
 
Es geht aber um XP. Das ist ja bekanntlich noch einen Tacken älter als Win8/7/Vista ;-)
Entweder kannst du die Kiste per inplace Upgrade hochziehen um dann eine GPU zu nutzen oder das ganze mal ohne GPU versuchen. Das Ursprungsblech hatte doch auch keine moderne Grafikkarte, was eventuell von aktuellen CPUs auch gestemmt werden kann.
 
Entweder kannst du die Kiste per inplace Upgrade hochziehen
Das geht nicht, da es sich um eine Industrieanwendung handelt. Wir haben keine Ahnung, wie sich die Software verhält. Sie wurde speziell für Windows XP geschrieben. Deshalb machen die Leute ja A: Hardware durchtauschen oder B: P2V.

In unserem Anwendungsfall hätte es funktioniert, einen Thin Client (wie auch hier im Thread vorgeschlagen) zu nutzen und die Windows-XP-VM per VNC zu steuern. Das war bei uns aber nicht gewünscht, da man dafür zwei NICs auf dem Host benötigt (Management und Verbindung zum Client) und den Thinclient zusätzlich verwalten muss.
AiO ist da ein schöner Gedanke.Die Lösung mit VMware als Tier-2-Hypervisor ist in dem Fall nicht optimal, aber praktikabel.

Im Grunde habe ich immerhin rausgefunden, dass x-vga=1 nur auf UEFI basierten Systemen läuft, außer man belehr mich eines besseren.
 
Das geht nicht, da es sich um eine Industrieanwendung handelt. Wir haben keine Ahnung, wie sich die Software verhält. Sie wurde speziell für Windows XP geschrieben. Deshalb machen die Leute ja A: Hardware durchtauschen oder B: P2V.
Ja genau das ist der Vorteil an Virtualisierung. Du kannst eine Kopie der VM virtualisieren, dann einen Snapshot oder Backup machen vor dem Upgradeversuch.
Oft laufen die Anwendungen verwunderlicherweise doch noch nach einem Upgrade, wenn nicht , dann Snapshot zurückrollen und neu probieren.

Gerade Anwendungen im Industriebereich, sind nicht so Hochkomplex im Umgang mit dem OS, eher Komplex in ihrer Datenverarbeitung. Daher ist die Wahrscheinlichkeit groß, dass ein Upgrade funktioniert.
In unserem Anwendungsfall hätte es funktioniert, einen Thin Client (wie auch hier im Thread vorgeschlagen) zu nutzen und die Windows-XP-VM per VNC zu steuern. Das war bei uns aber nicht gewünscht, da man dafür zwei NICs auf dem Host benötigt (Management und Verbindung zum Client) und den Thinclient zusätzlich verwalten muss.
AiO ist da ein schöner Gedanke.Die Lösung mit VMware als Tier-2-Hypervisor ist in dem Fall nicht optimal, aber praktikabel.

Im Grunde habe ich immerhin rausgefunden, dass x-vga=1 nur auf UEFI basierten Systemen läuft, außer man belehr mich eines besseren.
 
  • Like
Reactions: Johannes S
Warum installierst du auf der Kiste nicht ein Windows 10 und VMware Workstation. Ab V17 ist das teil auch kostenfrei für Business.
Brauchst nur ein Konto für den Download oder schaust mal bei Deskmodder vorbei.

Oder Virtualbox (das wäre unter Windows meine Wahl für Windows-VMs, für Linuxanwendungen wäre WSL2 ja naheliegender).
 
Oder Virtualbox (das wäre unter Windows meine Wahl für Windows-VMs, für Linuxanwendungen wäre WSL2 ja naheliegender).
Mit Virtualbox wäre ich etwas vorsichtiger und rate eher ab. Die Extensions sind nur für private Nutzung kostenfrei. Und Oracle ist ja ein sehr kulantes Unternehmen wenn es bei Audits nicht lizenzierte Produkte findet (wenn man Google fragt)..
Auch technisch und funktional habe ich mit VMware Workstation deutlich bessere Erfahrungen gemacht als mit VirtualBox.
Läuft einfach, performanter und stabiler. Bisher konnte ich mich (*leider*) nicht von der VMware Workstation auf dem Desktop trennen.
 
Last edited:
  • Like
Reactions: Johannes S
Ich bin jetzt mit VMware workstation gegangen und habe ein kleines Script zum live sichern der VM gebaut. Das bietet VMware workstation leider nicht oob. Snapshot erstellen über vmrun --> VM-Dateien mit robocopy kopieren --> Snapshot mit vmrun löschen.
Zum Backup einspielen, die VM-Dateien kopieren und auf den Snapshot zurückrollen. Mal schauen ob es da mit der RS-232 Schnittstelle Probleme gibt.
Danke für euren Input!
 
Last edited: