Aleph 0 Computing: Dual-booting OpenBSD and Windows XP
This page is no longer being updated. Please visit Aleph 0 Computing for information on current projects.
The OpenBSD FAQ contains some rudimentary information on multibooting, in fact enough that I was able to install both OpenBSD 3.6 (I haven't yet attempted with more recent versions) and Windows XP on my Dell Inspiron 1100 laptop. The information in the FAQ is repeated and somewhat expanded upon here; some idiosyncracies still remained after following the instructions there.
I'll generally assume you're starting from scratch here. I have no recent experience with hard disk “re-partitioners” like Partition Magic, FIPS, or GNU Parted. Try them if you like, but I most certainly find it easier (and safer) to just back up my important files and reformat the disk.
Personally, I chose to use a minimum amount of space for Windows and the rest for OpenBSD. That minimum seems to be around 4 GB (a number which has likely continued to rise for newer versions) for Windows, its updates, Microsoft Office or OpenOffice.org, Firefox, and miscellaneous smaller utilities, along with the swap file. Sure, there are probably ways to make that size smaller, but I'd prefer to spend my time with just a basic Windows install, not significantly tweaked or changed, for those few times I have to use it.
Installing Windows XP
Install Windows first. Boot the CD, wait, and repartition your drive to have
an empty primary partition. Depending on your needs, I'd suggest using a
FAT partition instead of NTFS, just because OpenBSD can read and write small
files from and to it more reliably (see the
mount_ntfs(8) for more information). FAT is generally considered
less secure and slower, though, and Windows won't make a FAT partition
larger than 32 GB. However, as I mentioned, a 4 GB one seems to do fine. Make sure
to leave space on the drive for at least the OpenBSD root filesystem;
Windows's boot manager can only boot from the primary hard disk.
The rest of the Windows installation shouldn't significantly differ from a normal installation. Click, wait, configure, repeat. You might as well go ahead and do all the updating and application installing; no need to waste time installing OpenBSD if you end up messing up and needing to start over.
When you're ready to install OpenBSD, follow the general installation
instructions, with only a couple of caveats. First, when asked if you want
to use the entire hard disk for OpenBSD, be sure to say no! (It's actually
the default.) This will take you to OpenBSD's
and you can add a partition for OpenBSD. Personally, I just started on the
cylinder after the Windows partition and went to the end of the disk.
will run to finish preparing the OpenBSD partition. Most importantly,
don't delete the Windows partition that's already labelled;
on my machine (and on most), it's partition
i. Add your OpenBSD
filesystems around it, and go on to naming the mountpoints.
Again, the rest of installation shouldn't really depend on this being a dual-boot machine. Finish up, and we'll make a few more changes before we're done.
Using the Windows XP boot manager
This is really just as described in the
FAQ. To boot into OpenBSD, use the CD again, but at the
boot hd0a:/bsd. Login as
dd if=/dev/rwd0a of=openbsd.pbr bs=512 count=1, changing
rsd0a if you boot from a SCSI hard disk.
If you formatted your Windows XP partition as FAT, mount that partition and
copy the file over. If you chose NTFS, use a network or writable media to
transfer the file.
Finally, remove the OpenBSD boot CD, and reboot into Windows. Open the
Start Menu, right-click on My Computer, and choose “Properties”.
Click on the “Advanced” tab, click the “Settings”
button under “Startup Recovery”, and under “System
Startup” click “Edit”. Add
C:\openbsd.pbr="OpenBSD" to the end of the file, and save it.
Reboot, and you should have a simple dual-boot menu.
Local time hardware clock
Next, there's no way to tell Windows XP that the computer's hardware clock is set to anything other than local time. That is, the time that's displayed in the “system tray” is the same time that's saved in the internals of the computer. However, OpenBSD assumes that the hardware clock time is Universal time, or UTC (also known as GMT). Therefore, we need to tell OpenBSD that's not actually the case.
We do this by configuring the OpenBSD kernel to offset the hardware clock
time by some amount. This doesn't actually require a kernel recompile;
since OpenBSD 2.6 the
tool allows changes to be made to an already-compiled kernel. First, identify
the offset from UTC; I live in Los Angeles, so we're 8 hours behind UTC
during the winter (that is, Pacific Standard Time). That's 480 minutes.
Therefore, we will set an offset of 480 minutes. If you're ahead
of UTC, like, say, Budapest, the offset will be negative.
config -e -f /bsd. At
the prompt, enter
timezone 480, substituting whatever number is
appropriate. If you're currently under daylight saving time (during the summer), use
timezone 480 1. Enter
quit, reboot, and
you're all set.
All information on this website (http://www.aleph0.com/), unless otherwise noted, is wholly the work of Christian Jones (firstname.lastname@example.org). All information, data, and formatting is hereby released into the public domain, with no rights reserved. For questions, concerns, or comments, please email the author.