[ OK ] case-study loaded :: houston-law-firm-proxmox
[ OK ] 3 PCs migrated → 1 Proxmox host → 0 apps replaced
[ OK ] VMs: VM-Money (Win7) / VM-Server (Win10) / VM-Workstation (Win10)
[INFO] engagement tier: FORTRESS  ·  window: single Saturday
[ -- ] identities anonymized per engagement agreement

We saved a law firm's
20-year-old software
without touching it.

$0 hardware cost — repurposed existing machines
1 saturday migration window — done by 6 PM
3 VMs migrated — all apps intact, zero replaced
0 hours of downtime — monday was a normal workday
location:Houston, TX
size:6-person law firm
tier:FORTRESS
completed:Q2 2026
migration window:1 Saturday
hardware cost:$0

Three machines. Three single points of failure.

"We have a Windows 7 computer in the corner that runs Microsoft Money. Nobody's allowed to touch it. If it dies, we lose decades of financial history."

It wasn't just one PC. It was three.

  • The "do not touch" PC — Windows 7, running Microsoft Money. No one remembered the admin password. Hard drive was 9 years old.
  • The file server — aging Windows 10 box with every shared file, scan folder, and the TimeSlip billing database. No RAID. No offsite backup.
  • The paralegal's workstation — WordPerfect X9 and Sage on a Windows 10 machine from 2014.

The firm ran on all three, every day. Replacement wasn't an option: Money hasn't been sold since 2009, WordPerfect licenses are non-transferable, and TimeSlip migration is a multi-month project.

The real risk: the Win7 drive was already showing reallocated sectors in CrystalDiskInfo. Not if it fails — when.

Freeze the computers in amber. Move them to safety.

We migrated the whole computer — OS, apps, registry, drivers, local files — into a virtual machine using Proxmox VE. Three times.

End state before we left the building:

pca-tech :: engagement summary
[ OK ] 3 physical PCs → 1 Proxmox VE host
[ OK ] VM-Money (Windows 7) :: Microsoft Money runs unmodified
[ OK ] VM-Server (Windows 10) :: file shares / TimeSlip intact
[ OK ] VM-Workstation (Windows 10) :: WordPerfect X9 / Sage intact
[ OK ] UNC paths (\\Server\Data, \\Server\Scan) :: unchanged
[ OK ] Tailscale mesh :: remote access without firewall changes
[ OK ] Proxmox Backup Server :: nightly snapshots, 7-day retention
[ OK ] Hardware cost :: $0 (repurposed existing i5 Skylake unit)
[ -- ] Legacy apps :: no modification required or performed

Each PC runs as a locked-down kiosk VM. Users connect via RDP from their existing workstations. From their seat, nothing changed. We manage one host instead of three, with centralized backups and per-VM snapshots.

Infrastructure — before and after

BEFORE AFTER +--[PC-Money] Win7, 2011----------+ +--[Proxmox Host] i5 Skylake, 16GB SSD----+ | USB kbd / monitor | | | | Microsoft Money (no backup) | | +--[VM-Money] Win7 image, frozen-------+ | | 9-yr-old drive: FAILING | | | Microsoft Money runs unmodified | | +----------------------------------+ | | RDP <--- Tailscale mesh | | | +---------------------------------------+ | +--[PC-Server] Win10, 2016---------+ | | | \\Server\Data | | +--[VM-Server] Win10 image, frozen------+ | | \\Server\Scan | | | \\Server\Data \\Server\Scan | | | TimeSlip DB (no RAID, no backup) | | | TimeSlip DB preserved | | +----------------------------------+ | +---------------------------------------+ | | | +--[PC-Work] Win10, 2014---------+ | +--[VM-Workstation] Win10 image---------+ | | WordPerfect X9 (non-transferable| | | WordPerfect X9, Sage intact | | | Sage billing software | | +---------------------------------------+ | +----------------------------------+ | | | Proxmox Backup Server: nightly snapshots | 3 machines 3 failure points | 7-day retention tested restore confirmed | 0 backups no DR plan +--------------------------------------------+ 1 host 0 app changes hardware-independent
all three VMs boot simultaneously on the same host and have been running continuously since migration

How we ran the migration

[1/5]

Discovery without disruption

We installed Tailscale and Win32-OpenSSH on each machine and ran a PowerShell audit script remotely: CPU, RAM, disk health via Get-PhysicalDisk, installed apps via Get-Package, active shares.

The locked Win7 box — no admin password on record — required the Utilman technique: boot recovery, swap Utilman.exe for cmd.exe, get a SYSTEM shell from the login screen, reset the password. 15 minutes.

# Audit script excerpt -- hardware inventory
Get-PhysicalDisk | Select FriendlyName,MediaType,HealthStatus,Size,OperationalStatus |
  ConvertTo-Json | Out-File "$env:TEMP\disk-health.json"

Get-WmiObject Win32_ComputerSystem |
  Select Name,TotalPhysicalMemory,NumberOfLogicalProcessors |
  ConvertTo-Json | Out-File "$env:TEMP\hw.json"

# Check VT-x / VT-d via msinfo32 export
msinfo32 /report "$env:TEMP\msinfo.txt" /categories +systemsummary
[2/5]

Snapshot every PC into a portable image

Disk2vhd (Sysinternals) captured each machine live via VSS — no shutdown, no disruption. Three .VHDX images totaling ~120 GB, staged to a portable drive over the network.

disk2vhd :: PC-Money capture
C:\Sysinternals> disk2vhd.exe C: \\pca-staging\images\money-pc.vhdx
# VSS snapshot created -- live capture, no downtime
Snapshotting volume C: ...
Creating VHDX: \\pca-staging\images\money-pc.vhdx
Copying 38.4 GB ... done.
money-pc.vhdx :: 38.4 GB :: VSS consistent

# Repeat for PC-Server (52.1 GB) and PC-Work (29.7 GB)
Total staged: 120.2 GB across 3 images

These images alone are a complete DR solution. Before the Proxmox host existed, all three machines were portable files restorable to any hardware in under an hour.

[3/5]

Repurpose the healthiest PC as the Proxmox host

The healthiest of the three machines — i5-6500, 16 GB DDR4, Samsung 860 EVO — became the host. Pre-install prep:

  • Verified VT-x and VT-d enabled in BIOS (required for full hardware virtualization and PCI passthrough)
  • Cleaned chassis, replaced thermal paste, inspected PSU capacitors
  • Confirmed SSD health via smartctl -a /dev/sda after Proxmox boot
# Proxmox VE 8.1 install -- USB boot, guided installer
# Target disk: /dev/sda (Samsung 860 EVO 500 GB)
# Filesystem: ext4 (ZFS not used -- single-disk host, no RAID)
# Management IP: 192.168.1.50/24 (static, assigned in BIOS DHCP reservation)

# Post-install: verify Intel VT-d is active
dmesg | grep -i "DMAR\|IOMMU"
# Expected: [    0.000000] DMAR: IOMMU enabled

New hardware purchased: $0.

[4/5]

Convert VHDX images to Proxmox VMs

Converted each .VHDX to .qcow2 using qemu-img on the host, then attached each disk to a new VM.

# Convert VHDX to qcow2 (run on Proxmox host after SCP of images)
qemu-img convert -f vhdx -O qcow2 /tmp/money-pc.vhdx \
  /var/lib/vz/images/100/vm-100-disk-0.qcow2

qemu-img convert -f vhdx -O qcow2 /tmp/server-pc.vhdx \
  /var/lib/vz/images/101/vm-101-disk-0.qcow2

qemu-img convert -f vhdx -O qcow2 /tmp/work-pc.vhdx \
  /var/lib/vz/images/102/vm-102-disk-0.qcow2

# VM config example (VM 100 = Money PC)
# /etc/pve/qemu-server/100.conf
# ---
# bios: seabios
# cores: 2
# memory: 4096
# net0: virtio=XX:XX:XX:XX:XX:XX,bridge=vmbr0
# scsi0: local:100/vm-100-disk-0.qcow2,size=40G
# scsihw: virtio-scsi-pci
# vga: std

VirtIO drivers injected into the Win7 VM post-boot via virtio-win ISO — significant disk and network performance improvement. Each VM received:

  • Tailscale installed — persistent mesh node, auto-connect on boot
  • RDP enabled — port 3389, Windows Firewall rule added
  • Kiosk lockdown — Task Manager disabled via Group Policy, Start Menu restricted, auto-login configured, crash auto-restart enabled via sc failure
  • Proxmox Backup Server job — nightly at 02:00, 7-day retention, all VMs
[5/5]

Deliver — users RDP to "their" computer

Each user got a labeled shortcut on their workstation desktop. mstsc.exe with pre-filled Tailscale IP.

# Shortcut target -- "Open Money" desktop icon
# C:\Windows\System32\mstsc.exe /v:100.x.x.x /f /w:1920 /h:1080
# 100.x.x.x = VM-Money's Tailscale IP
# /f = full-screen, /w /h = resolution match

# File shares remain accessible at original UNC paths:
# \\Server\Data     -> maps to VM-Server's C:\Data share
# \\Server\Scan     -> maps to VM-Server's C:\Scan share
# \\Server\TimeSlip -> maps to VM-Server's C:\TimeSlip share
# (Tailscale resolves "Server" via MagicDNS to VM-Server's node IP)

Double-click. App opens full-screen. Files where they always were. From their seat, nothing changed.

Before and after

beforeafter
3 aging PCs, each a single point of failure1 host — all VMs backed up nightly
Windows 7 box nobody was allowed to touchWin7 VM — snapshotted, cloneable, restorable in minutes
Decades of financial data tied to dying hardwareSame data — hardware-independent, portable as a file
3 machines to monitor, patch (or ignore), support1 Proxmox dashboard — all VMs visible in one pane
If Money PC dies, financial history may be unrecoverableVM-Money survives any hardware failure — restore in <1 hour
No backup strategy — "we just hope it doesn't die"Nightly PBS snapshots retained 7 days — tested restore confirmed
Hardware replacement = forced app migrationHost hardware is replaceable — apps inside VMs are permanent

Same software, same workflows, same files — on infrastructure we can replace without touching the apps inside. Host dies? Restore VMs to any $300 mini PC. Back online same day.

✓ active partnership — ongoing FORTRESS monitoring

PCA migrated 3 machines in a saturday window. monday morning everyone signed in like nothing happened. we kept the proxmox host. the savings paid for the engagement in 5 months.

— managing partner, houston law firm (anonymized per engagement agreement)

Tools used

Proxmox VE 8.1
Open-source hypervisor. Runs all three VMs simultaneously on the single host. Web-based management console. Native snapshot and backup integration.
free
Disk2vhd
Microsoft Sysinternals tool. Captures a live, VSS-consistent snapshot of a running Windows disk as a .VHDX file. No shutdown required.
free
qemu-img
Bundled with Proxmox. Converts between disk image formats (VHDX → qcow2). Lossless conversion, bit-for-bit identical.
free
Tailscale
Zero-config private mesh network built on WireGuard. Each VM and each user workstation is a Tailscale node. RDP traffic stays encrypted, private, and doesn't require firewall changes. MagicDNS resolves "Server" to the VM's Tailscale IP.
free tier
Win32-OpenSSH
Microsoft's official OpenSSH server for Windows. Used during discovery phase for remote auditing via PowerShell over SSH.
free
virtio-win
VirtIO paravirtualized drivers for Windows guests. Dramatically improves disk and network I/O performance inside Windows VMs on KVM/Proxmox.
free
Proxmox BS
Proxmox Backup Server. Runs on the same host. Scheduled nightly backups of all VMs. Deduplication keeps storage requirements low. 7-day retention confirmed with a tested restore before we closed the engagement.
free

all tools listed ran on hardware the customer already owned. total software licensing cost for this engagement: $0.

Timeline

day 1 (remote)
Discovery audit via Tailscale + OpenSSH. PowerShell inventory of all three machines. Disk health confirmed critical on Win7 drive. Locked machine unlocked via Utilman technique. Full JSON reports staged.
day 2 (remote)
Disk2vhd captures started on all three machines simultaneously over network. 120 GB of images staged to portable NVMe drive. Images verified with qemu-img check. Proxmox VE 8.1 ISO prepared and USB flashed.
Saturday (onsite)
Host PC selected, chassis cleaned, BIOS configured (VT-x/VT-d on). Proxmox installed. Three VMs created. VHDX-to-qcow2 conversion run. All three VMs booted and validated. VirtIO drivers injected. Tailscale installed on each VM. RDP verified from client workstations. File shares confirmed accessible via UNC paths. Desktop shortcuts deployed. Proxmox Backup Server configured and test restore run. Done by 6 PM.
Monday morning
Staff arrived, opened shortcuts, worked normally. Zero support tickets related to the migration.
ongoing
FORTRESS monitoring active. Nightly backup alerts routed to PCA dashboard. Host health monitored via SNMP. Any VM-level issue triggers alert before the user notices.

Why virtualization is the third option

A lot of small businesses run software that runs the company on hardware that's quietly dying. The usual options:

  • "Just upgrade" — new version won't import old data, costs five figures, requires a year of retraining. For a 6-person firm, that's not a project. That's a crisis.
  • "Just replace the PC" — install media gone, license non-transferable, vendor no longer exists.
  • "Just live with it" — until the drive fails.

Virtualization is the third option. Move the entire machine — OS, apps, registry, drivers — into a container that runs on modern hardware and can be snapshotted like any other file. The app doesn't know anything changed. Hardware underneath gets swapped on a Saturday.

The PC becomes a file. The file is forever.

Have a "do not touch" PC of your own?

If your business is one hard drive failure away from losing software that can't be replaced, this fits the FORTRESS tier. 30-minute assessment, no obligation.

related: all case studies · service tiers · about pca technology

does your situation look like this?

if you check most of these, we should talk.

running vmware, hyper-v, or bare-metal windows servers?
licensing renewal coming up — or already overdue?
1-20 VMs or PCs you'd want to consolidate?
based in houston or the greater texas area?
software that can't be replaced — old billing apps, legacy databases, discontinued tools?