Windows 98, Linux, and SolarisTM
I really enjoyed Brian Wilson's article, "Using VMware
as a Development Tool," in Sys Admin (March 2001). Wilson
described using VMware to emulate a Windows machine running on top
of a Linux box but, rephrasing his theme, it is also a technique
for getting more out of your hardware. You might wonder why bother
-- hardware is so cheap that you can go out and get another
box for peanuts. As I write this, I find ads selling complete systems
for $800, 256 MB RAM for $80, and a 30-GB hard drive for $60. It's
true that hardware is dirt cheap, but I find that my most limiting
factor is not dollars but space. I run out of desk space before
I run out of dollars to buy machines. So, to get more out of my
hardware, I use the old Linux technique of multi-booting. Sometimes
you just need the native OS, or sometimes the hardware you're
working with is too underpowered to handle the overhead that an
emulator/virtual machine adds. In this article, I present a formula
to quickly set a machine to boot Windows 98, Linux, and Intel Solaris
at no cost beyond the operating systems.
Multi-booting means that you can select which operating system
to run when the computer is booting up. You can access one OS at
a particular time, play computer games, and then reboot into a different
OS. Most OSs have some form of a boot loader, and I use Linux's
LILO most of the time because of its power and flexibility. For
this article, I assume that the reader can do customized installations
of Windows 98, Linux, and Intel Solaris. Here are the baseline requirements
for hardware -- whatever is compatible with the three OSs, CD-ROM,
floppy, and 6+ GB hard drive that hasn't been partitioned.
If the disk has been partitioned, you will have to follow the spirit
of the various steps and make adjustments as necessary. For software,
I used Windows 98, Red Hat 6.2, and Intel Solaris 8, 6/00. I have
used the formula below to set up many machines to triple-boot, but
there can be differences depending on how completely the hardware
is supported by Solaris. Also, this is my way of doing it. There
are probably others, and I welcome hearing about other techniques.
The cardinal rule when doing any kind of disk partitioning is to
back up your data first.
Quick summary of steps:
1. Install Windows.
2. Install Linux in an extended partition.
3. Install Solaris.
4. Fix LILO.
I'll go through the formula below and explain at the end
why some of the steps are done this way. The crux of the problem
is that Solaris really slices up a hard drive during installation,
leaving it in a state that Linux can't handle. Using this formula,
I've set up triple-boot machines in less than six hours.
Disk Partitioning 101
There are some basic things to know about how a hard drive can
be partitioned, which means dividing it into different areas. Always
back up your data before doing any partitioning. Each OS has a tool
to partition a hard drive. Windows, Linux, and Solaris all have
a tool called fdisk, although they have different capabilities and
interfaces. Use the fdisk tool from the particular OS you're
installing. Windows can have a primary partition and an extended
partition. The extended partition can be sliced up further into
smaller logical partitions. The primary partition on the first hard
drive will become c:, and the other partitions will pick
up drive letters according to Windows rules.
Many versions of Linux, except for the newest ones, and Solaris
must have a boot partition that is below the 1023th cylinder on
the hard drive. The fdisk from Linux can set up four primary partitions
or three primary and one extended. Like Windows, the extended partition
can be further divided. The master IDE drive on the first channel
is hda. Solaris requires a primary partition during installation
that it will divide into two primaries. The first partition can
be divided up into slices 0 through 7, with 2 being the overlap
slice that shouldn't be modified by the user. Both Linux and
Solaris have very powerful fdisk tools and can specify what type
each partition will be. They can even say that a partition will
be for Windows.
Step 1: Installing Windows
Do a regular Windows 98 installation according to the manual.
Consider the 1023 cylinder limitations for the boot manager when
you are partitioning the hard drive so don't make it too big.
Since the hard drive has no partitions on it, the first time you
boot it up, you will run fdisk, specify a partition, and exit fdisk.
You will have to reboot, then format your partition by typing format
c:, and then run the Windows setup program. Windows will
be on partition 1.
Step 2: Installing Linux
Further partition the hard drive. Set up the extended partition
on partition 4, dividing it as you desire for the Linux installation.
You need at least two logical partitions, one for / and a
swap partition. Many people set up several more, /home
being the most common. Do the install. Make a floppy boot disk (this
is critical). You will use the boot floppy in a later step to reestablish
LILO. My habit is to install Linux at the high end of the hard drive
so that after the installations are complete, the partitions are
in numerical order according to the cylinders. A better reason for
doing this is so you can modify Linux to live above cylinder 1023.
Solaris can't do that, so I put it lower on the hard drive.
For this article, I assume you're using two partititions: /
in 5, swap in 6.
Step 2a: Modifying Linux
Some files on Linux need to be modified before we can move onto
the Solaris install. First, modify /etc/lilo.conf as root.
Change the line with /dev/hda5 in it for booting Linux to
/dev/hda9. See Listing 1 for a sample /etc/lilo.conf
file. Next, modify /etc/fstab. The line for hda5 needs
to become hda9 and the swap line from hda6 to hda10.
Listing 2 shows a modified /etc/fstab file. These changes
are because of the way Solaris will install. Finally, trust me on
this next part. Run fdisk /dev/hda and delete the extended partition,
which will also delete your / and swap partitions.
This is because of the way Solaris will install. We will re-establish
these partitions later, so you won't lose any data. Make sure
that you record the exact start and stop cylinders of the /
and swap partitions. If done correctly, the only partition
visible on the hard drive right now is Windows in partition 1.
Step 3: Installing Solaris 8
Put in the Solaris installation media and boot. The Solaris installation
sequence should come right up. Run fdisk to establish partition
2 for Solaris. A catch in this step is the boundary cylinders on
the hard drive. Give yourself a couple of cylinders buffer between
the end of the your Windows partition and where you start the Solaris
partition. Also allow some buffer between the end of your Solaris
partition and the start of your Linux partition. I use a rule of
thumb of two cylinders on each side. If you don't add this
buffer, your installation will fail. Install what you want on partition
2. Note that Solaris will divide partition 2 into partitions 2 and
3 during the install. Late in the install process, you will have
a chance to look at the filesystem layout. Partition 2 will be sliced
up into / in s0, swap in s1, overlap will be
in s2, and /export/home in s7. These four slices are the
reason that in Step 2a we added four to several lines. After the
Solaris install, Linux will see hda5 as hda9. If you
use more than four slices in Solaris, you will have to modify Step
2a as appropriate. Reboot. Study Listing 3 to see what the partition
table looks like after the Solaris installation, especially the
cylinder buffers around the Solaris partitions.
Step 4: Boot Manager
Now you have three operating systems on your computer, but you
can only access Windows and Solaris. We'll fix this by configuring
LILO to give you all three. First, start a Linux install again and
bring it to the point of partitioning the hard drive. Use fdisk
and re-establish the partitions you previously deleted. Make sure
you put the exact cylinder numbers in. You will probably have an
option to use disk druid but use fdisk. Disk druid is a friendly
disk partitioner, but it doesn't give you the cylinder control
you need right now. You will see several messages about partitions
having different logical and physical beginnings. This doesn't
matter to us. Save the updated disk partitions and reboot using
the boot floppy you made. Type linux root=/dev/hda9 at the
LILO: prompt and log in. Edit /etc/lilo.conf, adding
the lines other=/dev/hda3 and label=solaris to the
end of it. Then run LILO using a special option: lilo -P ignore.
The -P ignore option tells LILO to ignore any partition tables
that it considers corrupt, which we have because of Solaris.
Using Your Triple-Boot Machine
Now you have a machine that can run Windows, Linux, and Solaris.
When you turn it on, you will see the normal BIOS prompts and finally
get a prompt LILO:. If you hit the tab key quickly, you will
see the different operating systems available. Type in which one
you want, and hit enter. The machine will then boot as if that OS
is the only one on the machine. You will have to reboot to get to
a different one. Still, this approach gives you three machines in
the space of one, and it is free. You have only used tools that
were part of the various operating systems.
Many of the steps may look like the ravings of a madman, but once
you understand the impact of the various operating systems, especially
Solaris, they make more sense. It's easy to set up a system
to dual boot. Windows and Linux or Windows and Solaris set up easily,
provided the hardware is supported. The hard part is when you want
to combine Linux and Solaris 8. As a historical note, I've
been setting up machines to triple boot for years. With Solaris
7, it was easier in some regards. Linux didn't give the error
messages that you see working with Solaris 8, and it stayed in one
primary partition. The biggest catch was that a native Solaris partition
looks like a swap partition to Linux. This normally isn't a
problem, but with Red Hat 6.2 and some other distributions, you
have no control over which swap space is used.
The Linux install will reformat any swap partition it finds. This
means that your Solaris distribution is gone and is being used as
a Linux swap space, so I hope you have a backup. With Solaris 2.7,
I would install Windows, then Solaris, and then Linux. During the
Linux install, I would change the partition type of Solaris to something
like FAT32 and complete the install. That way, the Linux
installation would leave that fake Windows partition containing
Solaris alone. After I finished and rebooted, I would change it
back and set up LILO to boot the three systems. Solaris 8 invalidates
this trick. If you change anything about the Solaris partitions
using fdisk, you mess up Solaris' boot signature and it won't
come up. As a sidenote, this last statement might not be totally
true. I've used Linux's fdisk to manage the partitions.
Some versions of Linux also have cfdisk and sfdisk. These are more
powerful and also harder to use partitioning tools. These tools
might be able to reslice the partition so that Solaris still works.
Since they aren't universal, I didn't explore using them.
Also, Linux can't install on a disk with the type of cylinder
boundary problems that Solaris 8 creates. In other words, Solaris
can't be installed before Linux.
Another new catch with Solaris 8 is that it requires two partitions
on the hard drive. Remember that in this setup, partition 1 is Windows,
and I specified that 4 be set up as an extended partition for Linux.
There can only be four partitions, so this scheme leaves 2 and 3
for Solaris. Set it up for 2, and during the install it will add
3. Summarizing, partition 1 is Windows, 2 and 3 are Solaris, and
partition 4 is extended and subdivided into logical partitions for
Linux. All of these are below cylinder 1023 unless your Linux distribution
can overcome this problem. Finally, remember the way that Solaris
subdivides partition 2 internally. This means that some boot files
need to be modified by the number of slices you set up during the
Solaris installation. But, when you're using fdisk, you see
those Solaris slices as one partition. It's a little confusing,
but you can keep track of it by remembering the way the boot process
I've also done this basic procedure on a system with two
hard drives, and it's considerably simpler. I put Linux on
the second hard drive by itself and tweaked the procedure. First,
put Windows in partition 1 on the first drive and Solaris in partition
2, which will become 2 and 3. Then, put Linux on hdb. Since
you're not going to install Linux on hda, you don't
have to worry about the problematic partition table.
The procedure I've described will result in a machine that
can boot into three different operating systems. This can save you
considerable desk space in the office or a lot of weight if you're
on the road. The procedure is fairly complicated but doesn't
cost anything. Be careful, because messing up a step can mean that
you have to back up several steps or start from the beginning to
recover. Always back up your data before trying anything like this.
Brian Gollsneider is working on a PhD in Electrophysics at
the University of Maryland, College Park. He can be reached at: