A friend recently bought an Acer AspireOne at a clearance sale -- this particular one was seriously discounted because it had Vista on it. Anyway, she wanted XP, as she didn't want to deal with Vista or the dumptruck load of absolute garbage that comes preinstalled on these things. (Seriously, if you ever buy an Acer, don't even *try* to boot it out of the box, just wipe it clean right away.)

Anyway, for some reason none of the "how to install XP on a machine without a CD drive" tutorials out there worked, and none of the methods of converting the XP install CD to a bootable flash drive resulted in anything more than boot errors and lockups. I'm not sure why; maybe this particular machine is too new?

I'm not terribly surprised, though, as most of them seemed to be grotesque hacks. So, I came up with an even more grotesque hack, and here are the details:

First, a note about the freedos boot image on the UBCD: it seemed to have some serious issues with something in this netbook involving partitions over 2 GB (be that a partition more than 2 GB in size, a partition that started after the 2 GB mark on the disk, a partition that crossed the 2 GB mark on the disk, etc.). Every time I tried to create such a partition, one of the following things would happen:

- A very panicky error about "lbacache int STAK nest??!!" (and yes, it really had question marks and exclamation points in it like that, and a pair of hex numbers that I didn't write down).

- It would see the partition, but after I'd written any files to it, it would be completely corrupt next boot (garbage directory listings).

- It would not see the partition at all.

- It would sit on extracting AUTORUN3.CAB for about 5 minutes on boot, then not see the partition.

- It would lock up solid after spewing a bunch of the STAK nest errors.

(Note: I'm aware of MSDOS's dislike of more than one primary partition on a disk; I assumed that freedos has the same issues and all attempted second partitions were extended, not primary.)

(Also note: I am very confused how a bad/disagreeable partition table on a *non-boot* drive can possibly mess up the boot process of freedos this badly. Any ideas?)

So, there's some kind of block addressing issue there I think. Not sure if that's the BIOS, the drive, the SATA controller, or what. (I don't *think* Freedos has any inherent 2 GB limits, as it correctly saw the drive itself as being 250 GB.)

Bearing in mind that in light of the above I limited my further experiments to a single 2 GB partition, here's what finally worked:

0. Make a version of the XP install CD that contains drivers for such modern conveniences as SATA controllers. This can be done via the wonderful packages of drivers found at driverpacks.net (you only need the mass storage and possibly chipset and CPU packages -- go to Download > Software and get the BASE program; download the driver packs through there rather than manually). Note that you do not need to go to the trouble of re-creating a bootable ISO image after slipstreaming, as we will not be using one -- all you need are the files.

1. Install the UBCD to a USB stick, as per the instructions in ubcd/tools/linux/ubcd2usb/.

2. Boot to parted magic from the USB stick.

3. Nuke everything on the netbook's hard drive and create a single primary FAT partition smaller than 2 GB. I can't remember whether I formatted it FAT or FAT32, probably the latter.

4. Now do the steps in ubcd/tools/linux/ubcd2usb/ again, this time onto the FAT partition on the hard drive. This seems like a twisted thing to do, but it's necessary, see below.

4.5 You have two options here: you're going to need the files from the XP install CD on the next boot. You can either load them onto the netbook's hard drive now (which is what I did), or put them on a USB stick (the same one if there's room) and leave it plugged in next boot. I *think* freedos will be able to see the USB stick, but I didn't try. You're also going to need a copy of smartdrv.exe (SmartDrive). You can find this on the Windows 98 install CD, if you have one, and I imagine there are lots of places online to get it.

5. Reboot, this time from the hard drive. Boot into freedos. The netbook's hard drive should be C:.

6. Run smartdrv.exe to start SmartDrive. This is optional, but if you don't, the next step will take half an hour.

7. Now find the Windows XP install CD files and cd into the i386 directory. Run this command:

winnt /t:c:\

This starts some kind of preinstall version of the Windows XP setup, which I'm guessing is normally used for PXE/network installs. The "/t:c:\" parameter tells it to preload the setup files onto C: drive. It also overwrites the boot sector and MBR of whatever drive you booted from -- which is why it was important that we installed the UBCD to the hard drive, so that we could boot from there. Otherwise, winnt.exe clobbers the boot record on the USB stick, while copying its system files to the hard drive, which really doesn't work. And it breaks your UBCD USB stick.

8. After winnt.exe chugs through all of its file copying, reboot to the USB stick (do NOT boot to the hard drive again!) and go back into parted magic.

9. Run dosfsck -r on the hard drive partition (/dev/sda1), and repair the corrupted boot sector backup by choosing "copy original to backup" -- for some reason winnt.exe overwrote only one of these, and forgot about the other one. I suspect that this is related to the block addressing foulups described above; even though we're under the 2 GB limit there are still issues.

10. Now mount the hard drive partition and delete all the UBCD files. This is necessary, in order to free up enough space to install Windows XP to the same partition. You might be tempted to resize the partition at this point to make more room -- don't; it doesn't work and you'll have to go back to the beginning. Be careful not to delete any of the new files that winnt.exe made!

11. Moment of truth. Unmount the hard drive partition, pull out the USB drive, and reboot. Windows XP setup should start, looking exactly as if you'd booted from the CD. When you get to the "choose a partition to install to", choose the current one.

12. Hopefully the installer worked. If it did, yay. Once you're all booted up, open up a command prompt and run "convert c: /fs:ntfs" to convert your partition to NTFS.

There. You should be ready to start disabling unnecessary services, installing proprietary drivers, telling windows security centre to go screw itself, changing your user interface out of fisher price mode, and all that other fun stuff involved in Windows installs. Yay! (And try not to think about the fact that you could have installed Linux in 1/50th the time on the first try and had all the hardware just work, except maybe the graphics...)

I post this in the hope that it may help someone else, but it's a really ugly workaround and I wouldn't wish it on anyone unless everything else has failed.

Remembering why I left Windows behind,


PS: It should in theory be possible to do this a bit more nicely using Freedos directly; however, I was not able to. The UBCD approach is the only one that's worked so far, and now that I've got it working I've decided to get on with my life and not mess with it any more. (As fun as it would be to try to create a version of the winnt.exe preinstall that boots natively from a USB stick...)