Re: RAID 1 on Sun E250 running 3.0 sparc r1
I'm replying to the list directly, although I'm not subscribed. If anyone
has replies to this message, they're probably better off going to this list
where everyone can benefit. With that said...
I wrote a somewhat cryptic guide on setting up a root RAID for Linux Sparc64
on my Ultra 30. You can find the most up-to-date version here:
I used Linux 2.4.18 with the RAID 1 patch for Sparc64 (to work around the
egcs64 miscompile). Below is a copy of revision 0.2 of the guide:
Mirrored Root RAID On Sparc64 Linux
Summary: Experiences configuring a Sun Ultra 30 to boot off of a mirrored
software RAID under Debian Linux with kernel version 2.4.18.
As part of my migration to a Sun Ultra 30 from my previous Slackware-based
server, I wanted to utilize the Linux built-in software raid ("md") to
protect my root (and boot) partition. I made many mistakes along the way,
and this guide will not attempt to recount all of them. It will attempt to
explain how I (finally) got my UltraSparc to boot off of a software RAID1,
and point out a few of the pitfalls so readers can avoid them.
My chosen operating system is Debian "Woody" running the Linux kernel
version 2.4.18. Newer versions of the Linux kernel are available, and you
may chose to use one of these instead. To start, I did a base install of
Debian, being sure to install the latest versions of the packages as
recommended by apt and dselect.
The RAID devices will be built from partitions on two 18 GB SCSI drives,
/dev/sda and /dev/sdb. The layout is as follows:
* /dev/md0 - /dev/sda1, /dev/sdb1 - RAID1 (Mirror) - Mounted as / (root
* /dev/md1 - /dev/sda4, /dev/sdb4 - RAID0 (Stripe) - Mounted as /tmp
* /dev/md2 - /dev/sda5, /dev/sdb5 - RAID1 (Mirror) - Mounted as /var/log
* /dev/md3 - /dev/sda6, /dev/sdb6 - RAID0 (Stripe) - Mounted as /var
(mounts before /var/log)
* /dev/md4 - /dev/sda7, /dev/sdb7 - RAID0 (Stripe) - Mounted as /usr
* /dev/md5 - /dev/sda8, /dev/sdb8 - RAID0 (Stripe) - Mounted as /home
* swap - /dev/sda2, /dev/sdb2 - Striped swap (each use "priority=0" as a
I started out by getting the Woody install image on CD. In OBP, while the
memory is counting, hit L1-A (Stop-A), then "boot cdrom" to start the Debian
install. The ISO I downloaded would not boot normally with SILO; use the
"rescue" feature and the system will boot off the CD as expected. I
partitioned both drives so they both had identical partition maps. Note that
partition 3 usually fills the whole disk. When this was done, I selected
/dev/sda8 as my root partition, and installed Debian to it.
To compile a kernel on Debian-Sparc64, you need to install a few packages
first: egcs64, libncurses-dev, dpkg-dev, and kernel-package as well as the
"regular" compiler tools. In all likelihood GCC and friends are already
installed, but you will need to install egcs64 to compile the 64-bit kernel
for Sparc. You can install the required packages with the following command:
apt-get install egcs64 libncurses-dev dpkg-dev kernel-package
You can also add these packages through dselect, using the '/' key to find
them by name. If you're adventurous, GCC 3.2.1 may work; it is available as
a package from Debian "Sid" ("unstable" as of this writing).
Next I downloaded the kernel sources. I wanted to use 2.4.20, which was the
latest available, but I always got "mcount" errors on all the modules. After
I finished with this project, I stumbled upon a solution
on the Debian-Sparc Mailing List. I ended up with version 2.4.18, but you
may end up with a different version. You can get the kernel sources via apt,
using a command such as "apt-get source kernel-image-2.4.18" but I opted to
download the source directly from the Linux Kernel Archives. Be sure to get
the "full" source and not just one of the patches. I extracted them (tar
xzvf file.tgz) to /usr/src/linux-2.4.18 and then changed to that directory.
If you're running any kernel prior to 2.4.20, you will need to patch the
RAID1 support in the kernel, as egcs64 miscompiles it on Sparc, and will
lead to an "oops" when you try to write to your new software raid. Here is
the Linux Kernel Mailing List.
Configure your kernel as necessary and then compile it; you may wish to
refer to the Debian FAQ on building custom kernels. Be sure to answer "yes"
to RAID support, and verify that RAID1 support is compiled into the kernel
(instead of a module). When you have finished with the kernel configuration,
save the configuration, and run the "make-kpkg" command with the appropriate
arguments to build the new kernel. Next, install the kernel using the "dpkg"
If you already have RAID support enabled in the kernel, we can configure the
RAID devices. Otherwise, reboot the system. Save the following RAID
# / raiddev /dev/md0
# raid-level 0
# nr-raid-disks 2
# nr-spare-disks 0
# chunk-size 16
# persistent-superblock 1
# device /dev/sda8
# raid-disk 0
# device /dev/sdb8
# raid-disk 1
Note that /home will not be created until we are finished building the rest
of the RAID devices. Later, you will need to enable /home by uncommenting
the lines below "# /home" by removing the pound sign/hash sign ("#") at the
beginning of each line.
Now we want to make the actual RAID drives and mount them. Run the commands:
mkraid /dev/md0 mke2fs -j /dev/md0
Adjust for each RAID device. This will create the RAIDs and filesystems on
the devices. You can check the RAID build status with the following command:
To configure SILO in preparation for the root RAID, I added an
"append=md=0,/dev/sda1,/dev/sdb1" line to /etc/silo.conf and verified that
the root partition was /dev/sda1 (it might work with /dev/md0, but I don't
see how SILO would know /dev/md0 pointed to /dev/sda1 and /dev/sdb1). My
silo.conf looks like this:
In the mean time, if you need to reboot for some reason, you can enter
"disk:8 linux root=/dev/sda8" in OBP and/or "linux root=/dev/sda8" at the
SILO prompt to get back to our temporary boot partition. Install SILO into
the boot block as follows:
Mount the root device under a suitable directory; I used /mnt but any empty
directory will suffice (but keep it simple). Mount the rest of the devices
under /mnt so what will end up being /usr is currently /mnt/usr and so on.
Now, we will want to copy all of our data over to the new RAID devices. This
can be accomplished a number of ways (usually involving the cp -cipR dir1
dir2 dir3 --targetdir=/mnt command). Be careful that you don't copy /mnt
into /mnt/mnt or you will find your free disk space vanish. Alternately, you
can use the "failed disk" method
(http://marc.theaimsgroup.com/?l=linux-sparc&m=101787980731878&w=2) to get
the data onto the RAID devices.
Reboot and in OBP select "disk:1" as the primary boot device and your new
RAID should boot.
Finally, adjust /etc/raidtab to enable the /home RAID device, make the RAID,
and then the filesystem. You should now be able to mount it and copy the
contents of /home to it.
Hopefully you find this helpful!
- Philip L. McMahon