3

I had a server running Windows 2003 that resided on a RAID5 array formed by Promise FastTrak SX4100, which I thought was hardware-based because of its dedicated processor and buffer memory and its ability to boot DOS and Windows. As it turns out, however, that controller is only hardware-assisted, with higher level logic carried out by x86 firmware running on host processor. Now that the aged motherboard (or processor?) has died, and I tried to migrate to a more modern UEFI-oriented hardware, the RAID controller cannot initialize even in legacy (BIOS) mode — it hangs when scanning disks, i. e. its firmware receives the control from UEFI/BIOS and prints welcoming messages on screen, but makes no progress in identifying connected SATA drives.

Therefore I thought I may have better luck running Windows inside a virtual machine with PCI card passed through to it, the more so that NT 5.2 is unlikely to be compatible with modern chipsets, while Qemu provides totally comfortable emulated environment in classic BIOS mode. The problem, however, is that SeaBIOS does not list the RAID controller as a bootable device, despite being able to communicate with it successfully.

That is:

  • The controller firmware does receive control and is able to initialize the RAID array before the boot menu is displayed by SeaBIOS, however that menu lacks any mention of the array disk.
  • The array configuration utility that can be invoked during POST process clearly shows that the array is healthy.
  • When Windows installer is run and loaded with RAID drivers, it also clearly displays the disk contents, proving its availability.

In other words, the array seems totally operational inside the VM environment, but for some season not recognized by SeaBIOS as a bootable device, although the later does support PCI devices for Boot ROM option, as is evident with iPXE network boot ROM built into SeaBIOS itself.

I also had an idea that GRUB may be of any help here, i. e. booting from SeaBIOS into GRUB (on a small separate disk) and then chain-loading to Windows. However I was not very successful at configuring it, since Linux environments do not see the array due to the lack of drivers and thus cannot assist with menu creation, yet GRUB itself is not too friendly nor verbose — I could not even understand whether it actually sees the array as a disk drive, or needs some drivers to be loaded beforehand, or any other prerequisites. Rescue kits like RescaTux or PartedMagic are not helpful either, since they are focused on repairing existing GRUB installations — not setting up new ones.

For reference, I experimented with Xen 4.7.2 using upstream Qemu 2.6.2 with SeaBIOS 1.9.1, on top of openSUSE 42.2 with Linux 4.4.62. Forums and mailing lists indicate that booting from PCI RAID was already possible in much older versions, for over a decade, so I assume that it is my particular setup to blame. But I cannot understand, is SeaBIOS indeed capable of booting from my RAID controller?

The ultimate goal is to get the server back by any means available, including by acquiring another compatible old hardware. But I just got curious with this specific technology, as virtual machines seemed more versatile and future-proof method of prolonging the life of legacy systems.

2 Answers2

0

Then you have only one way:

  1. You must found old motherboard with PCI V2.2 expansion slot and try to boot from raid controller.
  2. Then install special drivers for KVM all virtual hardware (see below).
  3. Make backup. Then boot from Linux live CD (by example from SystemRescueCD) and reduce size of partitions without changing the start position of boot and root partition​ (it's usually window's disk C:) by GParted program. You must have more 8Gb+RAM free unpartitioned size on logical RAID drive. Be sure that you can boot after it.
  4. Duplicate logical disk by dd command to a file on a backup drive. Then connect disks to the new motherboard, install Linux on software RAID1

By example: you have 4 x 120Gb disks in RAID5 and one logical drive /dev/sda. You have only one partition /dev/sda1 which is Windows disk C:. It has 300Gb size after reducing by GParted. You mount another backup drive by command: mount /dev/sdb1 /mnt. Then copy first 301Gb of RAID disk to backup drive by command dd if=/dev/sda of=/mnt/disk-c.img bs=4M count=77056. When it is copied do umount /mnt.

  1. Create soft RAID5 on free space. Create LVM group on it and LVM volume with size more than the image file.
  2. Copy data from the image file to LVM volume. Attache this volume as RAW disk to virtual machine.

By example: Create logical volume by command lvcreate -L 302G -n win_disk vg0. Mount backup drive and copy data to the volume dd of=/dev/vg0/win_disk if=/mnt/disk-c.img bs=4M count=77056.

Drop your RAID controller to a recycle bin.

PS:

When I created Windows 2000 virtual machine I assigned next virtual hardware:

  • CPU - Hypervisor default
  • Disk - IDE raw
  • NIC - Device model rtl8139
  • Mouse and Keyboard - PS/2
  • Video - Cirrus

Drivers:

Realtek RTL3189C

Windows guest drivers for KVM libvirt

Old Intel Chipset Support

Win2000 Device Manager

0

Yes, SeaBIOS supports loading and running PCI option roms. Which apparently actually works as you can see the raid controller boot messages. The PCI rom then has to register any bootable disks, which is not happening here. Could be a configuration issue. Check the array configuration utility whenever you can configure the boot volume there. Could also be some bug or incompatibility ...

If that doesn't work out you can try something completely different: Connect the disks to some linux-supported sata controller, then check whenever dmraid is able to decode the raid volume. If that works you can attach it as simple disk to your win2k3 virtual machine.