gPXE + AoE + gigE = XP - SATA

For a while I've been putting off building/buying a new desktop since my Shuttle died. I've been using an old Dell server as a "desktop" and it worked fine for my daily Linux stuff but it didn't have PCIe so I couldn't play TF2 or SupCom or anything. Good for working, bad for relaxing. Finally I begged/borrowed/stole enough parts to get a machine with my 7800GT up and running. (Aside, dropped the 2xSATA hard drives in and rebooted with not a single bit of hardware in common between the two machines, Arch picked everything up and every bit of functionality Just Worked. No hardware support in Linux my ass.)

Problem. This machine only has space/slots for 2 SATA drives and I run LVM2 over MD software raid in linux religiously, and I didn't leave a spare partition for Windows. I could get a PCI sata controller but that would involve spending money. And more importantly it would be sane.

Enter the insanity. I have Gigabit ethernet to the desktop, my server has enough space to handle a windows install and conveniently, gPXE lets you boot Windows XP from an AoE 'SAN'. This, terrifyingly, does work; I'm typing from it now. As a bonus I get my windows install on a multi-disk RAID without having to buy a raid card. Next step is to have the same install boot from VMware (though not at the same time obviously).

A couple of notes on what I found out doing this for real:

  • Have your network card's drivers ready. Use Intel Pro/1000 cards for sanity.
  • Use the gpxe:all-drivers lkrn if you have grub installed, otherwise start with the .iso and burn a cd. Space is cheaper than reboots when you guessed the driver wrong. Rom-O-Matic is your friend.
  • Don't bother if you don't have the ability to install windows for real on the first partition of a physical disk, getting the drivers into an existing XP install isn't worth it even if it is possible and editing the partition table to move a later partition forward is not fun unless you're a real MBR guru (sfdisk!).
  • The instructions say to use a file, but vblade can export an arbitrary block device, if I had free unallocated LVM space I'd make a LV and get cheap snapshotting in addition to RAID.
  • 4GB isn't enough. A fresh SP2 install basically fills it and I haven't investigated expanding the file, though it ought to be doable using the dd seek command as below. If I get annoyed enough I'll recreate it with a 10-15 GB LV/sparse disk which should be enough for Windows AND Steam.

To make a second (10GB) disk in the meantime I did (in gentoo):

#create a 10G sparse file
dd if=/dev/zero of=aoe_data.img bs=1 seek=10737418240 count=0
#add a vblade
echo "config_vblade1=\"0 1 eth1 /home/aoe_data.img\"" >> /etc/conf.d/vblade
#enable and start it
ln -s /etc/init.d/vblade.vblade0 /etc/init.d/vblade.vblade1
/etc/init.d/vblade.vblade1 start

On the windows side, first attach the disk (use the MAC of your server obviously).

aoe mount 00:DE:AD:BE:EF:00 0 1

Then you can go into Administrative Tools -> Computer Mangement -> Storage -> Disk Management (Local) (Don't have that menu item?) and find the disk that you just made. Note the label, it's Disk 8 on my machine. To be sure you can right-click to Properties and make sure it says "Location: AoE e0.1" or similar. Create a new Dynamic Disk volume (so you can expand it later if you want), format it NTFS and set the right drive letter. To make it come up on boot, I had to dig. Thanks to this and this you can do this (where 8 is the number of the "disk" in the local storage snap in (save as C:bring_e_online.txt maybe.):

select disk 8 online

Then regedit HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionRun and add the value "C:mount_aoe_drive_e.bat", call it whatever you like. The contents are:

aoe mount 00:DE:AD:BE:EF:00 0 1 diskpart /s C:\bring_e_online.txt