A Bit of Slack Never Hurt Anyone

Installing Slackware Linux version 8.1 with root on raid0.

written by Karl Magnus KolstÝ
20021009 v 1.0.1
      Copyright (c)  2002  Karl Magnus KolstÝ.
      Permission is granted to copy, distribute and/or modify this document
      under the terms of the GNU Free Documentation License, Version 1.1
      or any later version published by the Free Software Foundation;
      with no Invariant Sections, no Front-Cover Texts, and no
      Back-Cover Texts.
      A copy of the license can be found here;

If you screw up something (like your data and/or your hardware) while using this document it is your fault, not mine. You should know what you are doing. Reading some documentation on software RAID is highly recommended.
(I.e the Software-RAID-HOWTO; http://www.tldp.org/HOWTO/Software-RAID-HOWTO.html )

Document History:

	v 1.0.1	20021009	Fix up the wording of a couple of sentences.
	v 1.0	20020913	Initial release.

Let's begin

This document is a small write-up on how I did install Slackware 8.1 on a software raid 0, aka striping. Note that this document does not cover troubleshooting, only the exact steps that should be nessesary to put Slack 8.1 on / At least they where the steps I had to do to make it work.

This write-up should be usable for setting up software raid level 4 or 5 on Slackware too (with some tweaking). As for raid level 1 the configuration should be similar too, but different enought to say that this write-up doesn't cover it.

My disk setup was 7 disks on one SCSI channel. (yes, I _know_ you shouldn't have that many drives on one channel :) The computer could boot from those drives.

First I booted from the Slackware 8.1 CD. Had to use kernel scsi.s because of my scsi setup.

At the prompt I started partitioning the drives with fdisk. All my drives where identical, so I decided to partition them identically. Partition 1 on each disk I put a 15MB partition. Partition 2 on each disk I put the partition to be raided. Partition 4 on each disk I put a swap partition. (Why 4 and not 3? Just a personal convention. I always put swap on the forth primary partition on a disk.)

Then I set partition types 83, FD and 82 respectively.

Why that 15MB partition? Linux can't boot the kernel directly off of a software raided partition (raid1 is another story) so it needs a partition to get the kernel from which is not a part of a raid set.

That first partition on first drive (/dev/sda1 in my case) I wanted to mount under /boot. But why waste disk space? I ended up setting up first partition on all the other drives to type 82 (linux swap). That way I ended up with 13(!) swap partitions. A better way would probably be to set up the raid partitions on the end of the drive and make a larger swap partition on the beginning of each drive. But then take 10-20MB of the the swap partition on the first drive and use that for /boot.

Anyway I now have 7 drives partitioned the way I want.

First I must configure the raid.

Check if /dev/md0 exists.ls -l /dev/md0

If it doesn't exist, create it;mknod /dev/md0 b 9 0

I created a /etc/raidtab which looked like this;raiddev /dev/md0 raid-level 0 nr-raid-disks 7 nr-spare-disks 0 chunk-size 32 persistent-superblock 1 device /dev/sda2 raid-disk 0 device /dev/sdb2 raid-disk 1 device /dev/sdc2 raid-disk 2 device /dev/sdd2 raid-disk 3 device /dev/sde2 raid-disk 4 device /dev/sdf2 raid-disk 5 device /dev/sdg2 raid-disk 6

Then we need to start the raid set;mkraid /dev/md0 (if you have an already started set you must stop that and restart with option --force. (read the instructions))

Now it's time to create a filesystem on the "new" device.mke2fs -j -c -b 4096 -R stride=8 /dev/md0

I want ext3 (-j) I want to check the filesystem (-c) I want 4k block size (-b 4096, which is default by the way) and I want to tell the formatting tool something about my raid chunk size.
Calculate it this way;stride = chunk-size / block-size (all values in kilobytes)
For me the calculation is;32 / 4 = 8

I must not forget to format the partition which is going to be /bootmke2fs -j -c /dev/sda1

Instead of letting the Slackware setup mount the partitions I do it myself. (the setup is *not* aware of raid devices anyway, so this needs to be done manually.)mount /dev/md0 /mnt mkdir /mnt/boot mount /dev/sda1 /mnt/boot

Then we can run 'setup'

Do a regular install, but be sure to *not* add any partitions to install on. Just choose;"--- (done adding partitions, continue with setup"

I also chose simple lilo install on mbr.

When the install is done, exit 'setup' and do the following;cp /etc/raidtab /mnt/etc/raidtab

edit /mnt/etc/fstab and add;/dev/md0 / ext3 defaults 1 1 /dev/sda1 /boot ext3 defaults 1 2

edit /mnt/etc/lilo.conf and be sure that;root = /dev/fd2 gets changed to;root = /dev/md0

Then runlilo -C /mnt/etc/lilo.conf

Now you should be able to boot the machine with / on a RAID 0 device.

When trying to follow my own write-up I had the following problem when trying to boot up the newly installed Slackware.
(This happend once of the 4 times I tested.)

For every partition I got;md: /dev/sda2's has invalid sb, not importing! (Or a similar error message, at that point I didn't take notes, sorry.) Then the computer halted with a Kernel Panic during boot.

I then booted from the CD again, created /etc/raidtab again (equal to the first one), and reran mkraid /dev/md0 After that I could mount /dev/md0, and everything looked ok there. Slackware was installed.
I did reboot, and everything came up as it should.

I still wonder if I followed this write-up to the letter or if something strange happened.

Suggestions and error corrections are welcome.


Thanks to John Jenkins and Erik Jan Tromp for looking through this doc and comming with suggestions.

Karl Magnus KolstÝ karl.kolsto@geo.uib.no