Windows 98 Qcow2

You have two options: build it yourself or download a pre-made image.

| Problem | Solution | |--------|----------| | “Windows Protection Error” on boot | Add MaxPhysPage=30000 to system.ini [386Enh] | | No sound in DOS games | Use -soundhw sb16 and run SET BLASTER=A220 I5 D1 H5 | | USB not working | QEMU USB tablet + generic OHCI driver in Win98 | | Mouse freezes | Use -usb -device usb-mouse instead of PS/2 |


This write-up explains how and why you might run Windows 98 using a qcow2 virtual disk (QEMU’s Copy-On-Write image format), covers compatibility considerations, steps to create and convert images, recommended QEMU settings, drivers and peripherals, common troubleshooting, and preservation/legality notes.

qm set 999 --ide0 local:999/win98.qcow2,cache=writeback

Windows 98 has a hostile relationship with modern CPU virtualization.

The Secret: Force QEMU to use a single thread for V8086 mode:

-accel tcg,thread=single -smp 1

Never give Windows 98 more than 1 CPU core. It will blue screen during vmm32.vxd loading.

The email from the client was short and panicked: "We have a legal hold on the design files for the 1998 Metro interface. The only machine that can read the proprietary format crashed. If we don't open these .prs files by tomorrow, we lose the case."

I called the client immediately. "What kind of machine are we talking about?"

"A custom workstation," the client said. "It ran Windows 98. The hard drive is making a clicking noise. It’s dead."

I rubbed my temples. Finding a replacement hard drive for a 25-year-old proprietary workstation was possible, but not in 24 hours. Installing Windows 98 on modern hardware was a nightmare of driver incompatibilities and BIOS settings.

"Send me the drive," I said. "But I’m not fixing the hardware. I’m moving your house to a new neighborhood." windows 98 qcow2

The Setup

Three hours later, a courier handed me a heavy, dusty tower. I didn't bother plugging in a monitor or keyboard. I popped the side panel, removed the failing IDE drive, and hooked it up to a USB-to-IDE adapter. My Linux workstation recognized it immediately, though the partition table was badly damaged.

I wasn't going to repair the file system on the metal. That was too risky. I needed a pristine environment.

I opened a terminal. I didn't reach for a Windows 10 ISO. I needed the specific environment the software was built for. I needed Windows 98.

The Command

I typed the search query into my browser: windows 98 qcow2.

For a sysadmin, this specific search string is a lifeline. It bypasses the need to hunt down a physical CD-ROM, rip it, and convert it. It looks for a pre-configured, copy-on-write disk image format (qcow2) used by QEMU and KVM. Ideally, I was looking for a ready-made image that had the OS installed, saving me an hour of installation time.

I found a trusted archive containing Win98.qcow2. I downloaded it and placed it in my working directory.

Now came the surgery. I wasn't going to use that fresh image as my primary drive; I was going to use it as the "donor" for the operating system.

I created a new, larger disk image to house the system and the recovered data: qemu-img create -f qcow2 recovery_drive.qcow2 10G

Then, I cloned the fresh Windows 98 install onto the new drive: qemu-img dd if=Win98.qcow2 of=recovery_drive.qcow2 You have two options: build it yourself or

Finally, I needed to attach the client's failing drive as a secondary drive. I used ddrescue to image the physical drive into a raw image file first, to minimize stress on the dying hardware, then converted that raw image to qcow2 format.

qemu-img convert -O qcow2 failing_drive.raw failing_drive.qcow2

The Boot

I launched the virtual machine.

qemu-system-i386 -m 512 -hda recovery_drive.qcow2 -hdb failing_drive.qcow2 -enable-kvm

The window popped up. The familiar BIOS POST text scrolled by, followed by the iconic Windows 98 splash screen.

I held my breath. Windows 98 was notoriously finicky about hardware changes. Moving from a custom 1998 workstation to a virtualized Intel Icelake architecture could trigger a blue screen instantly.

The desktop loaded. It was a clean, default Windows 98 desktop.

I double-clicked My Computer.

Drive C: was the fresh Windows install. Drive D: was the client's old drive.

I navigated to D:\Projects\Metro. The folder opened instantly. The proprietary .prs files were there. The file system corruption that prevented the old hardware from booting hadn't affected the actual user data.

The Export

The files were visible, but I couldn't just drag and drop them to my Linux host because Windows 98 doesn't understand modern network protocols or USB mass storage easily.

I had a trick up my sleeve. I shut down the VM and mounted the qcow2 image directly on my Linux host using guestmount.

guestmount -a recovery_drive.qcow2 -m /dev/sda1 /mnt/vm

I copied the files from the mounted image to a shared network folder. The client received the files twenty minutes later.

The Aftermath

The client asked, "Can you send back the working computer?"

"It never left," I replied. "You have the files. The computer is a 20MB file on my server called windows 98 qcow2."


After installing Windows 98 and its applications, the image might be larger than expected. You can shrink it:

  • Use qemu-img:

    qemu-img shrink windows98.qcow2
    
  • Windows 98 crashes on startup if it sees more than ~1.5GB of RAM. Even with 512MB, you might get "Insufficient memory to initialize windows."