W7 virtualization on Fedora Server?

Hi good people!
Ofesad here from Argentina.

I am working on setting up a new server for a client (accountant office).

The main problem is that their systems/software runs on a +12yo Celeron with Windows 7. And the software cant be migrated to newer versions of Windows nor Linux.
The hardware is starting to fail: some caps bulged on the mobo, running out of ram, so on.

The original idea was to migrate to a new server, however newer hardware doesn’t support W7 natively.

So I was thinking on moving to Fedora Server an virtualize the W7.

My questions are:

  1. Wich software would you recommend to do virtualization on Fedora server and run the W7 in it?

  2. I might not be able to access the router configuration and I need to set up a fixed ip on the W7 or change the mac address of the W7 ethernet interface. Any idea how?

  3. The W7 only runs as a file sharing server + contability software (for 2 clients only). How much RAM would you recommend for the server?

  4. Intel or AMD platform? Any prefference or advantage of one over the other in this case?

Thank you so much in advance.

2 Likes

libvirt+KVM/QEMU is the recommended virtualization solution.

The server side can be installed like this:
Minimal virt-manager install? - #4 by vgaetera

The recommended client is Virtual Machine Manager aka virt-manager.
However you can also manage it using the Cockpit web interface.

Guest CPU/RAM/MAC/IP/etc. can be easily tuned if necessary.

Shared host bridge:
How to make a Virtual Machine present itself to my home network as if it were another physical computer - #7 by vgaetera

Hardware requirements:
1.2. KVM Hypervisor Requirements | Red Hat Product Documentation

4 Likes

So, after couple of days of testing, sadly it has’nt been possible to boot the W7 x86 (32bits) VM.

What I try’d:

  • Imaging the original SSD W7 install using Disk2VHD, Clonezilla, HDD SuperCloneDisk,
  • Converting the image to Oracle VM
  • Tested in Oracle VirtualBox = Works fine
  • Convert the .vdi to Qcow2 → Fails to boot (0xc0000000e error)
  • Convert the .vdi to raw and then to Qcow2 → Same error
  • Convert .bin to Qcow2 → Same
  • Convert someotherformatIdontremember to Qcow2 → Same
  • Convert vhd/vhdx to Qcow2 → Same
  • Changed Bios to UEFI → Wont even try to boot, doesnt detect HDD or DVD drive
  • Try’d to repair mbr, boot, rebuild bcd → Does nothing
  • Created a VM from scratch and installed W7 X64 iso, it works fine. BUT X86 iso wont detect mouse nor keyboard.

Kinda out of ideas.

Please advice.

Do those tools copy the boot sector as well? I’d probably use dd if=/dev/sdX of=w7.raw bs=1MiB in this case to be sure I had a bit-for-bit identical copy.

You might want to try matching the emulated CPU with whatever the OS was originally installed on. QEMU is capable of emulating many different kinds of CPUs:

$ qemu-system-i386 -cpu help
Available CPUs:
  486                   (alias configured by machine type)
  486-v1                
  Broadwell             (alias configured by machine type)
  Broadwell-IBRS        (alias of Broadwell-v3)
  Broadwell-noTSX       (alias of Broadwell-v2)
  Broadwell-noTSX-IBRS  (alias of Broadwell-v4)
  Broadwell-v1          Intel Core Processor (Broadwell)
  Broadwell-v2          Intel Core Processor (Broadwell, no TSX)
  Broadwell-v3          Intel Core Processor (Broadwell, IBRS)
  Broadwell-v4          Intel Core Processor (Broadwell, no TSX, IBRS)
  Cascadelake-Server    (alias configured by machine type)
  Cascadelake-Server-noTSX  (alias of Cascadelake-Server-v3)
  Cascadelake-Server-v1  Intel Xeon Processor (Cascadelake)
  Cascadelake-Server-v2  Intel Xeon Processor (Cascadelake) [ARCH_CAPABILITIES]
  Cascadelake-Server-v3  Intel Xeon Processor (Cascadelake) [ARCH_CAPABILITIES, no TSX]
  Cascadelake-Server-v4  Intel Xeon Processor (Cascadelake) [ARCH_CAPABILITIES, no TSX]
  Cascadelake-Server-v5  Intel Xeon Processor (Cascadelake) [ARCH_CAPABILITIES, EPT switching, XSAVES, no TSX]
  Conroe                (alias configured by machine type)
  Conroe-v1             Intel Celeron_4x0 (Conroe/Merom Class Core 2)
  Cooperlake            (alias configured by machine type)
  Cooperlake-v1         Intel Xeon Processor (Cooperlake)
  Cooperlake-v2         Intel Xeon Processor (Cooperlake) [XSAVES]
  Denverton             (alias configured by machine type)
  Denverton-v1          Intel Atom Processor (Denverton)
  Denverton-v2          Intel Atom Processor (Denverton) [no MPX, no MONITOR]
  Denverton-v3          Intel Atom Processor (Denverton) [XSAVES, no MPX, no MONITOR]
  Dhyana                (alias configured by machine type)
  Dhyana-v1             Hygon Dhyana Processor
  Dhyana-v2             Hygon Dhyana Processor [XSAVES]
  EPYC                  (alias configured by machine type)
  EPYC-Genoa            (alias configured by machine type)
  EPYC-Genoa-v1         AMD EPYC-Genoa Processor
  EPYC-IBPB             (alias of EPYC-v2)
  EPYC-Milan            (alias configured by machine type)
  EPYC-Milan-v1         AMD EPYC-Milan Processor
  EPYC-Milan-v2         AMD EPYC-Milan-v2 Processor
  EPYC-Rome             (alias configured by machine type)
  EPYC-Rome-v1          AMD EPYC-Rome Processor
  EPYC-Rome-v2          AMD EPYC-Rome Processor
  EPYC-Rome-v3          AMD EPYC-Rome-v3 Processor
  EPYC-Rome-v4          AMD EPYC-Rome-v4 Processor (no XSAVES)
  EPYC-v1               AMD EPYC Processor
  EPYC-v2               AMD EPYC Processor (with IBPB)
  EPYC-v3               AMD EPYC Processor
  EPYC-v4               AMD EPYC-v4 Processor
  GraniteRapids         (alias configured by machine type)
  GraniteRapids-v1      Intel Xeon Processor (GraniteRapids)
  Haswell               (alias configured by machine type)
  Haswell-IBRS          (alias of Haswell-v3)
  Haswell-noTSX         (alias of Haswell-v2)
  Haswell-noTSX-IBRS    (alias of Haswell-v4)
  Haswell-v1            Intel Core Processor (Haswell)
  Haswell-v2            Intel Core Processor (Haswell, no TSX)
  Haswell-v3            Intel Core Processor (Haswell, IBRS)
  Haswell-v4            Intel Core Processor (Haswell, no TSX, IBRS)
  Icelake-Server        (alias configured by machine type)
  Icelake-Server-noTSX  (alias of Icelake-Server-v2)
  Icelake-Server-v1     Intel Xeon Processor (Icelake)
  Icelake-Server-v2     Intel Xeon Processor (Icelake) [no TSX]
  Icelake-Server-v3     Intel Xeon Processor (Icelake)
  Icelake-Server-v4     Intel Xeon Processor (Icelake)
  Icelake-Server-v5     Intel Xeon Processor (Icelake) [XSAVES]
  Icelake-Server-v6     Intel Xeon Processor (Icelake) [5-level EPT]
  Icelake-Server-v7     Intel Xeon Processor (Icelake) [TSX, taa-no]
  IvyBridge             (alias configured by machine type)
  IvyBridge-IBRS        (alias of IvyBridge-v2)
  IvyBridge-v1          Intel Xeon E3-12xx v2 (Ivy Bridge)
  IvyBridge-v2          Intel Xeon E3-12xx v2 (Ivy Bridge, IBRS)
  KnightsMill           (alias configured by machine type)
  KnightsMill-v1        Intel Xeon Phi Processor (Knights Mill)
  Nehalem               (alias configured by machine type)
  Nehalem-IBRS          (alias of Nehalem-v2)
  Nehalem-v1            Intel Core i7 9xx (Nehalem Class Core i7)
  Nehalem-v2            Intel Core i7 9xx (Nehalem Core i7, IBRS update)
  Opteron_G1            (alias configured by machine type)
  Opteron_G1-v1         AMD Opteron 240 (Gen 1 Class Opteron)
  Opteron_G2            (alias configured by machine type)
  Opteron_G2-v1         AMD Opteron 22xx (Gen 2 Class Opteron)
  Opteron_G3            (alias configured by machine type)
  Opteron_G3-v1         AMD Opteron 23xx (Gen 3 Class Opteron)
  Opteron_G4            (alias configured by machine type)
  Opteron_G4-v1         AMD Opteron 62xx class CPU
  Opteron_G5            (alias configured by machine type)
  Opteron_G5-v1         AMD Opteron 63xx class CPU
  Penryn                (alias configured by machine type)
  Penryn-v1             Intel Core 2 Duo P9xxx (Penryn Class Core 2)
  SandyBridge           (alias configured by machine type)
  SandyBridge-IBRS      (alias of SandyBridge-v2)
  SandyBridge-v1        Intel Xeon E312xx (Sandy Bridge)
  SandyBridge-v2        Intel Xeon E312xx (Sandy Bridge, IBRS update)
  SapphireRapids        (alias configured by machine type)
  SapphireRapids-v1     Intel Xeon Processor (SapphireRapids)
  SapphireRapids-v2     Intel Xeon Processor (SapphireRapids)
  SapphireRapids-v3     Intel Xeon Processor (SapphireRapids)
  SierraForest          (alias configured by machine type)
  SierraForest-v1       Intel Xeon Processor (SierraForest)
  Skylake-Client        (alias configured by machine type)
  Skylake-Client-IBRS   (alias of Skylake-Client-v2)
  Skylake-Client-noTSX-IBRS  (alias of Skylake-Client-v3)
  Skylake-Client-v1     Intel Core Processor (Skylake)
  Skylake-Client-v2     Intel Core Processor (Skylake, IBRS)
  Skylake-Client-v3     Intel Core Processor (Skylake, IBRS, no TSX)
  Skylake-Client-v4     Intel Core Processor (Skylake, IBRS, no TSX) [IBRS, XSAVES, no TSX]
  Skylake-Server        (alias configured by machine type)
  Skylake-Server-IBRS   (alias of Skylake-Server-v2)
  Skylake-Server-noTSX-IBRS  (alias of Skylake-Server-v3)
  Skylake-Server-v1     Intel Xeon Processor (Skylake)
  Skylake-Server-v2     Intel Xeon Processor (Skylake, IBRS)
  Skylake-Server-v3     Intel Xeon Processor (Skylake, IBRS, no TSX)
  Skylake-Server-v4     Intel Xeon Processor (Skylake, IBRS, no TSX)
  Skylake-Server-v5     Intel Xeon Processor (Skylake, IBRS, no TSX) [IBRS, XSAVES, EPT switching, no TSX]
  Snowridge             (alias configured by machine type)
  Snowridge-v1          Intel Atom Processor (SnowRidge)
  Snowridge-v2          Intel Atom Processor (Snowridge, no MPX)
  Snowridge-v3          Intel Atom Processor (Snowridge, no MPX) [XSAVES, no MPX]
  Snowridge-v4          Intel Atom Processor (Snowridge, no MPX) [no split lock detect, no core-capability]
  Westmere              (alias configured by machine type)
  Westmere-IBRS         (alias of Westmere-v2)
  Westmere-v1           Westmere E56xx/L56xx/X56xx (Nehalem-C)
  Westmere-v2           Westmere E56xx/L56xx/X56xx (IBRS update)
  athlon                (alias configured by machine type)
  athlon-v1             QEMU Virtual CPU version 2.5+
  core2duo              (alias configured by machine type)
  core2duo-v1           Intel(R) Core(TM)2 Duo CPU     T7700  @ 2.40GHz
  coreduo               (alias configured by machine type)
  coreduo-v1            Genuine Intel(R) CPU           T2600  @ 2.16GHz
  kvm32                 (alias configured by machine type)
  kvm32-v1              Common 32-bit KVM processor
  kvm64                 (alias configured by machine type)
  kvm64-v1              Common KVM processor
  n270                  (alias configured by machine type)
  n270-v1               Intel(R) Atom(TM) CPU N270   @ 1.60GHz
  pentium               (alias configured by machine type)
  pentium-v1            
  pentium2              (alias configured by machine type)
  pentium2-v1           
  pentium3              (alias configured by machine type)
  pentium3-v1           
  phenom                (alias configured by machine type)
  phenom-v1             AMD Phenom(tm) 9550 Quad-Core Processor
  qemu32                (alias configured by machine type)
  qemu32-v1             QEMU Virtual CPU version 2.5+
  qemu64                (alias configured by machine type)
  qemu64-v1             QEMU Virtual CPU version 2.5+
  base                  base CPU model type with no features enabled
  host                  processor with all supported host features 
  max                   Enables all features supported by the accelerator in the current host
2 Likes

Converting an existing Windows installation to a VM is a non-trivial task.
As far as I remember, it requires to install specific drivers and apply certain registry modifications to the working system before migration.

This is the easiest way to achieve the goal.

Change the chipset model before installation:

2 Likes

Did a new raw image with dd. Converted it to Qcow2. Created new VM and imported image.
Same error.
Also, try’d changing cpu model to more accurate to the original (conroe). Did nothing.
Same error.

On Oracle VM works flawlessly at first boot.
On the driver situacion: I cant find the proper drivers for W7 x86.

Sadly creating a brand new VM and reinstall everything aint an option.
I have to virtualize this PC ASAP since the original motherboard has started to degrade (blown caps) plus the owner doesnt want to pay for a new license for his invoice software (wich is outdated too).

So… quite a mess.

I think you had to enable/install the standard ide drivers on the host system before creating the image.

found this
https://edoceo.com/sys/kvm-windows-p2v
and Advanced Migration Techniques to Proxmox VE - Proxmox VE

3 Likes

I’d avoid trying to convert it to any other format until after you get it working. QEMU should be able to work with raw images.

Also, you might try -machine q35. That will add a SATA controller, among other things, and it might be enough to get your Windows 7 image working.

The tool to do that in Windows is called sysprep. But be warned that MS will only let you attempt it three times.

You’ll want to make another dd copy of your SSD after sysprep shuts down the machine and before you boot it again. When it boots back up, the hardware auditing will run and undo the “generalized” mode that sysprep set just before shutdown.

Edit: I’d keep that original raw dd image you made as a backup. You might be able to use that to revert Windows to its previous state after you’ve run sysprep. I’m not sure if sysprep will invalidate the license on your installed software. It might.

1 Like

This the current default for Windows 7 in libvirt.
Unfortunately, it makes the Windows installer unresponsive:

I reproduced the issue with Windows 7 SP1 x86.
Meanwhile, the i440FX chipset works fine.

1 Like

SOLVED (maybe):

Instead of creating the VM via Copilot, I just need to do it via console:

virt-install -v --disk /raw/w7.raw --os-type=windows --os-variant=win7 -r 2048 --boot hd --graphics vnc --import

booted flawlessly…-ish
It gave some memory error but then worked fine!

3 Likes