1273 lines
34 KiB
Plaintext
1273 lines
34 KiB
Plaintext
Boot + Root + Raid + Lilo : Software Raid mini-HOWTO
|
||
Michael Robinton, Michael@BizSystems.com
|
||
<mailto:michael@bizsystems.com>
|
||
v1.04, July 20, 2000
|
||
|
||
This document provides a cookbook for setting up root raid using the
|
||
0.90 raidtools for bootable raid mounted on root using standard LILO.
|
||
Also covered is the conversion of a conventional disk to a raid1 or
|
||
raid5 mirror set without the loss of data on the original disk.
|
||
______________________________________________________________________
|
||
|
||
Table of Contents
|
||
|
||
|
||
1. Introduction
|
||
|
||
1.1 Acknowledgements
|
||
1.2 Bugs
|
||
1.3 Copyright Notice
|
||
|
||
2. What you need BEFORE YOU START
|
||
|
||
2.1 Required Packages
|
||
2.2 Where to get Up-to-date copies of this document.
|
||
2.3 Documentation -- Recommended Reading
|
||
2.4 RAID resources
|
||
|
||
3. Bootable Raid
|
||
|
||
3.1 Booting RAID 1 with standard LILO
|
||
3.2 Detailed explaination of lilo.conf for raid boot
|
||
|
||
4. Upgrading from non-raid to RAID1/4/5
|
||
|
||
4.1 Step 1 - prepare a new kernel
|
||
4.2 Step 2 - set up raidtab for your new raid.
|
||
4.3 Create, format, and configure RAID
|
||
4.4 Copy the current OS to the new raid device
|
||
4.5 Test your new RAID
|
||
4.6 Integrate old disk into raid array
|
||
|
||
5. Appendix A. - example raidtab
|
||
|
||
6. Appendix B. - SCSI reference implementation RAID5
|
||
|
||
7. Appendix C. - ide RAID10 with initrd
|
||
|
||
8. Appendix D. - ide RAID1-10 with initrd
|
||
|
||
|
||
|
||
______________________________________________________________________
|
||
|
||
1. Introduction
|
||
|
||
|
||
1.1. Acknowledgements
|
||
|
||
The essence of the information I've put together here was originally
|
||
provided by Harald Nordgård-Hansen <hnh@bukharin.hiof.no
|
||
<mailto:hnh@bukharin.hiof.no>> and posted to the raid mail list in a
|
||
lilo.conf file with commentary by Martin Bene <mb@sime.com
|
||
<mailto:mb@sime.com>>. Many thanks for your contribution. I've tried
|
||
to put this information and the helpful work of many others who
|
||
contribute to the raid mail list and linux raid project into a
|
||
COOKBOOK form, including many examples from real systems so that
|
||
bootable root raid is easy to set up and understand. One section is
|
||
devoted to the conversion of a standard single drive system to RAID.
|
||
The key to the conversion, in my humble opinion, is the understanding
|
||
of bootable root raid.
|
||
|
||
|
||
1.2. Bugs
|
||
|
||
Yes, I'm sure there are some. If you'd be good enough to report them,
|
||
I will correct the document. ;-)
|
||
|
||
|
||
1.3. Copyright Notice
|
||
|
||
This document is GNU copyleft by Michael Robinton
|
||
Michael@BizSystems.com <mailto:michael@bizsystems.com>.
|
||
|
||
Permission to use, copy, distribute this document for any purpose is
|
||
hereby granted, provided that the author's / editor's name and this
|
||
notice appear in all copies and/or supporting documents; and that an
|
||
unmodified version of this document is made freely available. This
|
||
document is distributed in the hope that it will be useful, but
|
||
WITHOUT ANY WARRANTY, either expressed or implied. While every effort
|
||
has been taken to ensure the accuracy of the information documented
|
||
herein, the author / editor / maintainer assumes NO RESPONSIBILITY for
|
||
any errors, or for any damages, direct or consequential, as a result
|
||
of the use of the information documented herein.
|
||
|
||
|
||
|
||
2. What you need BEFORE YOU START
|
||
|
||
The packages you need and the documentation that answers the most
|
||
common questions about setting up and running raid are listed below.
|
||
Please review them throughly.
|
||
|
||
|
||
2.1. Required Packages
|
||
|
||
You need to obtain the most recent versions of these packages.
|
||
|
||
· a linux kernel that supports raid, initrd
|
||
|
||
I used linux-2.2.14 <ftp://ftp.kernel.org/pub/linux/ker
|
||
nel/v2.2/> from kernel.org
|
||
|
||
|
||
· ftp://ftp.kernel.org/pub/linux/daemons/raid/alpha/
|
||
<ftp://ftp.kernel.org/pub/linux/daemons/raid/alpha/> the most
|
||
recent tools and patch that adds support for modern raid1/4/5
|
||
|
||
I used http://people.redhat.com/mingo/raid-patches/
|
||
<http://people.redhat.com/mingo/raid-patches/raid-2.2.14-B1>
|
||
|
||
|
||
|
||
2.2. Where to get Up-to-date copies of this document.
|
||
|
||
Click here to browse the author's latest version
|
||
<ftp://ftp.bizsystems.net/pub/raid/Boot+Root+Raid+LILO.html> of this
|
||
document. Corrections and suggestions welcome!
|
||
|
||
Boot Root Raid + LILO HOWTO
|
||
|
||
Available in LaTeX (for DVI and PostScript), plain text, and HTML.
|
||
|
||
http://www.linuxdoc.org/HOWTO/Boot+Root+Raid+LILO.html
|
||
<http://www.linuxdoc.org/HOWTO/Boot+Root+Raid+LILO.html>
|
||
|
||
|
||
Available in SGML and HTML.
|
||
|
||
ftp.bizsystems.net/pub/raid/ <ftp://ftp.bizsys
|
||
tems.net/pub/raid/>
|
||
|
||
|
||
|
||
2.3. Documentation -- Recommended Reading
|
||
|
||
If you plan on using raid1/5 over raid0, please read:
|
||
|
||
/usr/src/linux/Documentation/initrd.txt
|
||
|
||
|
||
|
||
as well as the documentation and man pages that accompany the
|
||
raidtools set.
|
||
|
||
|
||
and..... Software-RAID-HOWTO.html
|
||
<http://metalab.unc.edu/mdw/HOWTO/Software-RAID-HOWTO.html>
|
||
|
||
|
||
2.4. RAID resources
|
||
|
||
Mailing lists can be joined at:
|
||
|
||
· This one seems quiet: majordomo@nuclecu.unam.mx
|
||
<mailto:majordomo@nuclecu.unam.mx> send a message to subscribe
|
||
raiddev
|
||
|
||
send mail to: raiddev@nuclecu.unam.mx
|
||
<mailto:raiddev@nuclecu.unam.mx>
|
||
|
||
|
||
|
||
· Raid development: majordomo@vger.rutgers.edu
|
||
<mailto:majordomo@vger.rutgers.edu> send a message to subscribe
|
||
linux-raid
|
||
|
||
send mail to: linux-raid@vger.rutgers.edu <mailto:linux-
|
||
raid@vger.rutgers.edu> (this seems to be the most active list)
|
||
|
||
|
||
|
||
3. Bootable Raid
|
||
|
||
I'm not going to cover the fundamentals of setting up raid0/1/5 on
|
||
Linux, that is covered in detail elsewhere. The problem I will address
|
||
is setting up raid on root and making it bootable with standard LILO.
|
||
The documentation that comes with the LILO sources (not the man pages)
|
||
and with the raidtools-0.90, covers the details of booting and boot
|
||
parameters as well as general raid setup - respectively.
|
||
|
||
|
||
There are two scenarios which are covered here. Set up of bootable
|
||
root raid and the conversion of an existing non-raid system to
|
||
bootable root raid without data loss.
|
||
|
||
|
||
|
||
3.1. Booting RAID 1 with standard LILO
|
||
|
||
To make the boot information redundant and easy to maintain, set up a
|
||
small RAID1 and mount it on the /boot directory of your system disk.
|
||
LILO does not know about device 0x9?? and can not find the information
|
||
at boot time because the raid sub system is not active then. As a
|
||
simple work around, you can pass LILO the geometry information of the
|
||
drive(s) and from that, LILO can determine the position of the
|
||
information needed to load the kernel even though it is on the RAID1
|
||
partition. This is because the RAID1 partition is the same as a
|
||
standard partition but with a raid super-block written at the end. The
|
||
boot raid set should fall with the first 1024 mbytes of the disk
|
||
drive. In theory the start of the raid partition could fall anywhere
|
||
in the 1024 megs, but in practice I was unable to get it to work
|
||
unless the boot-raid started at the first block of the set. This is
|
||
probably because of something dumb that I did, but it was not worth
|
||
following up at the time. Since then I've simply set up all my systems
|
||
with the boot-raid set as the first partition. I have root raid system
|
||
configurations with bootable RAID1 mounted on /boot with root raid
|
||
sets as follows: RAID1, RAID5, RAID10 & RAID1-10 ( 1 mirror + 1 raid0
|
||
set). The last has a very peculiar lilo file pair since none of the
|
||
disk geometries are the same, however, the principals are the same for
|
||
the initial boot process. The RAID10 and RAID1-10 root mounts require
|
||
the use of initrd to mount root after the boot process has taken
|
||
place. See the appendices for the configuration files for all of
|
||
these example systems.
|
||
|
||
|
||
A conventional LILO config file stripped down looks like this:
|
||
|
||
|
||
# lilo.conf - assumes drive less than 1024
|
||
boot = /dev/hda
|
||
delay = 40 # extra, but nice
|
||
vga = normal # not normally needed
|
||
image = /bzImage
|
||
root = /dev/hda1
|
||
read-only
|
||
label = Linux
|
||
|
||
|
||
|
||
A raid LILO config file pair would look like this:
|
||
|
||
|
||
|
||
# lilo.conf.hda - primary ide master
|
||
disk=/dev/md0
|
||
bios=0x80
|
||
sectors=63
|
||
heads=16
|
||
cylinders=39770
|
||
partition=/dev/md1
|
||
start=63
|
||
boot=/dev/hda
|
||
map=/boot/map
|
||
install=/boot/boot.b
|
||
image=/boot/bzImage
|
||
root=/dev/md0
|
||
read-only
|
||
label=LinuxRaid
|
||
|
||
# ---------------------
|
||
|
||
# lilo.conf.hdc - secondary ide master
|
||
disk=/dev/md0
|
||
bios=0x80 # see note below
|
||
sectors=63
|
||
heads=16
|
||
cylinders=39770
|
||
partition=/dev/md1
|
||
start=63
|
||
boot=/dev/hdc # this is the other disk
|
||
map=/boot/map
|
||
install=/boot/boot.b
|
||
image=/boot/bzImage
|
||
root=/dev/md0
|
||
read-only
|
||
label=LinuxRaid
|
||
|
||
|
||
|
||
# BIOS=line -- if your bios is smart enough (most are not) to detect
|
||
that that the first disk is missing or failed and will automatically
|
||
boot from the second disk, then bios=81 would be the appropriate entry
|
||
here. This is more common with SCSI bios than IDE bios. I simply plan
|
||
on relocating the drive so it will replace the dead drive C: in the
|
||
event of failure of the primary boot drive.
|
||
|
||
|
||
The geometry information for the drive can be obtained from fdisk with
|
||
the command:
|
||
|
||
|
||
fdisk -ul (little L)
|
||
fdisk -ul /dev/hda
|
||
|
||
Disk /dev/hda: 16 heads, 63 sectors, 39770 cylinders
|
||
Units = sectors of 1 * 512 bytes
|
||
|
||
Device Boot Start End Blocks Id System
|
||
/dev/hda1 63 33263 16600+ fd Linux raid autodetect
|
||
/dev/hda2 33264 443519 205128 82 Linux swap
|
||
/dev/hda3 443520 40088159 19822320 fd Linux raid autodetect
|
||
|
||
* note the listing of the START of each partition
|
||
|
||
|
||
|
||
3.2. Detailed explaination of lilo.conf for raid boot
|
||
|
||
The raid lilo.conf file above, commented in detail for each entry.
|
||
|
||
|
||
# lilo.conf.hda - primary ide master
|
||
# the location of the /boot directory that will be
|
||
# designated below as containing the kernel, map, etc...
|
||
# note that this is NOT the actual partition containing
|
||
# the boot image and info, but rather the device
|
||
# that logically contains this directory.
|
||
# in this example, /dev/md1 is mounted on /dev/md0/boot
|
||
disk=/dev/md0
|
||
|
||
# tell LILO which bios device to use for boot, i.e. C: drive
|
||
bios=0x80
|
||
|
||
# tell LILO the geometry of the device
|
||
# this is usually but not always the "logical"
|
||
# geometry. Check the /proc file system or watch
|
||
# the boot messages when the kernel probes for the drive
|
||
#
|
||
sectors=63
|
||
heads=16
|
||
cylinders=39770
|
||
|
||
# this is a dummy entry to make LILO happy so it
|
||
# will recognize the raid set 0x9?? and then find
|
||
# the START of the boot sector. To really see
|
||
# what this was for, read the documentation
|
||
# that comes with the LILO source distribution.
|
||
# This parameter "must" be different than the
|
||
# disk= entry above. It can be any other mdx
|
||
# device, used or unused and need not be the one
|
||
# that contains the /boot information
|
||
#
|
||
partition=/dev/md1
|
||
|
||
# the first sector of the partition containing /boot information
|
||
start=63
|
||
|
||
# the real device that LILO will write the boot information to
|
||
boot=/dev/hda
|
||
|
||
# logically where LILO will put the boot information
|
||
map=/boot/map
|
||
install=/boot/boot.b
|
||
|
||
# logically where lilo will find the kernel image
|
||
image=/boot/bzImage
|
||
|
||
# standard stuff after this
|
||
# root may be a raid1/4/5 device
|
||
root=/dev/md0
|
||
read-only
|
||
label=LinuxRaid
|
||
|
||
|
||
|
||
4. Upgrading from non-raid to RAID1/4/5
|
||
|
||
Upgrading a non-raid system to raid is fairly easy and consists of
|
||
several discrete steps described below. The description is for a
|
||
system with a boot partition, root partition and swap partition.
|
||
|
||
OLD disk in the existing system:
|
||
|
||
/dev/hda1 boot, may be dos+lodlin or lilo
|
||
/dev/hda2 root
|
||
/dev/hda3 swap
|
||
|
||
|
||
We will add an additional disk and convert the entire system to RAID1.
|
||
You could easily add several disks and make a RAID5 set instead using
|
||
the same procedure.
|
||
|
||
|
||
4.1. Step 1 - prepare a new kernel
|
||
|
||
Download a clean kernel, raidtools-0.90 (or the most recent version),
|
||
and the kernel patch to upgrade the kernel to 0.90 raid.
|
||
|
||
Compile and install the raidtools and READ the documentation.
|
||
|
||
Compile and install the kernel to support all the flavors (0/1/4/5 ?)
|
||
of raid that you will be using. Make sure to specify autostart of
|
||
raid devices in the kernel configuration. Test that the kernel boots
|
||
properly and examine /proc/mdstat to see that the raid flavors you
|
||
will use are supported by the new kernel.
|
||
|
||
|
||
4.2. Step 2 - set up raidtab for your new raid.
|
||
|
||
The new disk will be added to an additional IDE controller as the
|
||
master device, thus becomming /dev/hdc
|
||
|
||
|
||
/dev/hdc1 16megs -- more than enough for several kernel images
|
||
/dev/hdc2 most of the disk
|
||
/dev/hdc3 some more swap space, if needed. otherwise add to hdc2
|
||
|
||
|
||
|
||
Change the partition types for /dev/hdc1 and /dev/hdc2 to "fd" for
|
||
raid-autostart.
|
||
|
||
Using the failed-disk parameter, create a raidtab for the desired
|
||
RAID1 configuration. The failed disk must be the last entry in the
|
||
table.
|
||
|
||
|
||
|
||
# example raidtab
|
||
# md0 is the root array
|
||
raiddev /dev/md0
|
||
raid-level 1
|
||
nr-raid-disks 2
|
||
chunk-size 32
|
||
# Spare disks for hot reconstruction
|
||
nr-spare-disks 0
|
||
persistent-superblock 1
|
||
device /dev/hdc2
|
||
raid-disk 0
|
||
# this is our old disk, mark as failed for now
|
||
device /dev/hda2
|
||
failed-disk 1
|
||
|
||
# md1 is the /boot array
|
||
raiddev /dev/md1
|
||
raid-level 1
|
||
nr-raid-disks 2
|
||
chunk-size 32
|
||
# Spare disks for hot reconstruction
|
||
nr-spare-disks 0
|
||
persistent-superblock 1
|
||
device /dev/hdc1
|
||
raid-disk 0
|
||
# boot is marked failed as well
|
||
device /dev/hda1
|
||
failed-disk 1
|
||
|
||
|
||
|
||
4.3. Create, format, and configure RAID
|
||
|
||
Create the md devices with the commands:
|
||
|
||
mkraid /dev/md0
|
||
mkraid /dev/md1
|
||
|
||
|
||
|
||
The raid devices should be created and start. Examination of
|
||
/proc/mdstat should show the raid personalities in the kernel and the
|
||
raid devices running.
|
||
|
||
Format the boot and root devices with:
|
||
|
||
mke2fs /dev/md0
|
||
mke2fs /dev/md1
|
||
|
||
|
||
Mount the new root device somewhere handy and create the /boot direc
|
||
tory and mount the boot partition.
|
||
|
||
mount /dev/md0 /mnt
|
||
mkdir /mnt/boot
|
||
mount /dev/md1 /mnt/boot
|
||
|
||
|
||
|
||
4.4. Copy the current OS to the new raid device
|
||
|
||
This is pretty straightforward.
|
||
|
||
|
||
cd /
|
||
# set up a batch file to do this
|
||
cp -a /bin /mnt
|
||
cp -a /dev /mnt
|
||
cp -a /etc /mnt
|
||
cp -a (all directories except /mnt, /proc, and nsf mounts) /mnt
|
||
|
||
|
||
This operation can be tricky if you have mounted or linked other disks
|
||
to your root file system. The example above assumes a very simple sys
|
||
tem, you may have to modify the procedure somewhat.
|
||
|
||
|
||
4.5. Test your new RAID
|
||
|
||
Make a boot floppy and rdev the kernel.
|
||
|
||
|
||
dd if=kernal.image of=/dev/fd0 bs=2k
|
||
rdev /dev/fd0 /dev/md0
|
||
rdev -r /dev/fd0 0
|
||
rdev -R /dev/fd0 1
|
||
|
||
|
||
|
||
Modify the fstab on the RAID device to reflect the new mount points as
|
||
follows:
|
||
|
||
/dev/md0 / ext2 defaults 1 1
|
||
/dev/md1 /boot ext2 defaults 1 1
|
||
|
||
|
||
|
||
Dismount the raid devices and boot the new file system to see that all
|
||
works correctly.
|
||
|
||
|
||
umount /mnt/boot
|
||
umount /mnt
|
||
raidstop /dev/md0
|
||
raidstop /dev/md1
|
||
shutdown -r now
|
||
|
||
|
||
|
||
Your RAID system should now be up and running in degraded mode with a
|
||
floppy boot disk. Carefully check that you transferred everything to
|
||
the new raid system. If you mess up here without a backup, YOU ARE
|
||
DEAD!
|
||
|
||
If something did not work, reboot your old system and go back and fix
|
||
things up until you successfully complete this step.
|
||
|
||
|
||
4.6. Integrate old disk into raid array
|
||
|
||
Success in the previous step means that the raid array is now
|
||
operational, but without redundancy. We must now re-partition the old
|
||
drive(s) to fit into the new raid array. Remember that if the
|
||
geometries are not the same, the the partition size on the old drive
|
||
must be the same or larger than the raid partitions or they can not be
|
||
added to the raid set.
|
||
|
||
Re-partition the old drive as required. Example:
|
||
|
||
|
||
/dev/hda1 same or larger than /dev/hdc1
|
||
/dev/hda2 same or larger than /dev/hdc2
|
||
/dev/hda3 anything left over for swap or whatever...
|
||
|
||
|
||
|
||
Change the failed-disk parameter in the raidtab to raid-disk and hot
|
||
add the new (old) disk partitions to the raid array.
|
||
|
||
raidhotadd /dev/md1 /dev/hda1
|
||
raidhotadd /dev/md0 /dev/hda2
|
||
|
||
|
||
Examining /proc/mdstat should show one or more of the raid devices
|
||
reconstructing the data for the new partitions. After a minute or
|
||
two... or so, the raid arrays should be fully synchronized (this
|
||
could take a while for a large partition).
|
||
|
||
|
||
Using the procedure described in the first sections of this document,
|
||
set up bootable raid on the new raid pair. Hang on to that boot floppy
|
||
while setting up and testing this last step.
|
||
|
||
|
||
5. Appendix A. - example raidtab
|
||
|
||
RAID1 example described in the first sections of this document
|
||
|
||
|
||
|
||
df
|
||
Filesystem 1k-blocks Used Available Use% Mounted on
|
||
/dev/md0 19510780 1763188 16756484 10% /
|
||
/dev/md1 15860 984 14051 7% /boot
|
||
|
||
# --------------------------
|
||
|
||
fdisk -ul /dev/hda
|
||
|
||
Disk /dev/hda: 16 heads, 63 sectors, 39770 cylinders
|
||
Units = sectors of 1 * 512 bytes
|
||
|
||
Device Boot Start End Blocks Id System
|
||
/dev/hda1 63 33263 16600+ fd Linux raid autodetect
|
||
/dev/hda2 33264 443519 205128 83 Linux native
|
||
/dev/hda3 443520 40088159 19822320 fd Linux raid autodetect
|
||
|
||
# --------------------------
|
||
|
||
fdisk -ul /dev/hdc
|
||
|
||
Disk /dev/hdc: 16 heads, 63 sectors, 39770 cylinders
|
||
Units = sectors of 1 * 512 bytes
|
||
|
||
Device Boot Start End Blocks Id System
|
||
/dev/hdc1 63 33263 16600+ fd Linux raid autodetect
|
||
/dev/hdc2 33264 443519 205128 82 Linux swap
|
||
/dev/hdc3 443520 40088159 19822320 fd Linux raid autodetect
|
||
|
||
# --------------------------
|
||
|
||
# md0 is the root array, about 20 gigs
|
||
raiddev /dev/md0
|
||
raid-level 1
|
||
nr-raid-disks 2
|
||
chunk-size 32
|
||
# Spare disks for hot reconstruction
|
||
nr-spare-disks 0
|
||
persistent-superblock 1
|
||
device /dev/hda3
|
||
raid-disk 0
|
||
device /dev/hdc3
|
||
raid-disk 1
|
||
|
||
# md1 is the /boot array, about 16 megs
|
||
raiddev /dev/md1
|
||
raid-level 1
|
||
nr-raid-disks 2
|
||
chunk-size 32
|
||
# Spare disks for hot reconstruction
|
||
nr-spare-disks 0
|
||
persistent-superblock 1
|
||
device /dev/hda1
|
||
raid-disk 0
|
||
device /dev/hdc1
|
||
raid-disk 1
|
||
|
||
# --------------------------
|
||
|
||
# GLOBAL SECTION
|
||
# device containing /boot directory
|
||
disk=/dev/md0
|
||
# geometry
|
||
bios=0x80
|
||
sectors=63
|
||
heads=16
|
||
cylinders=39770
|
||
# dummy
|
||
partition=/dev/md1
|
||
# start of device "disk" above
|
||
start=63
|
||
|
||
boot=/dev/hda
|
||
map=/boot/map
|
||
install=/boot/boot.b
|
||
|
||
image=/boot/bzImage
|
||
root=/dev/md0
|
||
label=LinuxRaid
|
||
read-only
|
||
|
||
# -------------------------
|
||
|
||
# GLOBAL SECTION
|
||
# device containing /boot directory
|
||
disk=/dev/md0
|
||
# geometry
|
||
bios=0x80
|
||
sectors=63
|
||
heads=16
|
||
cylinders=39770
|
||
# dummy
|
||
partition=/dev/md1
|
||
# start of device "disk" above
|
||
start=63
|
||
|
||
boot=/dev/hdc
|
||
map=/boot/map
|
||
install=/boot/boot.b
|
||
|
||
image=/boot/bzImage
|
||
root=/dev/md0
|
||
label=LinuxRaid
|
||
read-only
|
||
|
||
|
||
|
||
6. Appendix B. - SCSI reference implementation RAID5
|
||
|
||
4 disk SCSI RAID5
|
||
|
||
|
||
|
||
df
|
||
Filesystem 1k-blocks Used Available Use% Mounted on
|
||
/dev/md0 11753770 2146076 9000678 19% /
|
||
/dev/md1 15739 885 14042 6% /boot
|
||
|
||
# --------------------------
|
||
|
||
fdisk -ul /dev/sda
|
||
|
||
Disk /dev/sda: 64 heads, 32 sectors, 4095 cylinders
|
||
Units = sectors of 1 * 512 bytes
|
||
|
||
Device Boot Start End Blocks Id System
|
||
/dev/sda1 32 32767 16368 fd Linux raid autodetect
|
||
/dev/sda2 32768 292863 130048 5 Extended
|
||
/dev/sda3 292864 8386559 4046848 fd Linux raid autodetect
|
||
/dev/sda5 32800 260095 113648 82 Linux swap
|
||
/dev/sda6 260128 292863 16368 83 Linux native - test
|
||
|
||
# ------------------------
|
||
|
||
fdisk -ul /dev/sdb
|
||
|
||
Disk /dev/sdb: 64 heads, 32 sectors, 4095 cylinders
|
||
Units = sectors of 1 * 512 bytes
|
||
|
||
Device Boot Start End Blocks Id System
|
||
/dev/sdb1 32 32767 16368 fd Linux raid autodetect
|
||
/dev/sdb2 32768 292863 130048 5 Extended
|
||
/dev/sdb3 292864 8386559 4046848 fd Linux raid autodetect
|
||
/dev/sdb5 32800 260095 113648 82 Linux swap
|
||
/dev/sdb6 260128 292863 16368 83 Linux native - test
|
||
|
||
# ------------------------
|
||
|
||
# fdisk -ul /dev/sdc
|
||
|
||
Disk /dev/sdc: 64 heads, 32 sectors, 4095 cylinders
|
||
Units = sectors of 1 * 512 bytes
|
||
|
||
Device Boot Start End Blocks Id System
|
||
/dev/sdc2 32 292863 146416 5 Extended
|
||
/dev/sdc3 292864 8386559 4046848 fd Linux raid autodetect
|
||
/dev/sdc5 64 260095 130016 83 Linux native - development
|
||
/dev/sdc6 260128 292863 16368 83 Linux native - test
|
||
|
||
# ------------------------
|
||
|
||
fdisk -ul /dev/sdd
|
||
|
||
Disk /dev/sdd: 64 heads, 32 sectors, 4095 cylinders
|
||
Units = sectors of 1 * 512 bytes
|
||
|
||
Device Boot Start End Blocks Id System
|
||
/dev/sdd2 32 292863 146416 5 Extended
|
||
/dev/sdd3 292864 8386559 4046848 fd Linux raid autodetect
|
||
/dev/sdd5 64 260095 130016 83 Linux native - development
|
||
/dev/sdd6 260128 292863 16368 83 Linux native - test
|
||
|
||
# --------------------------
|
||
|
||
# raidtab
|
||
#
|
||
raiddev /dev/md0
|
||
raid-level 5
|
||
nr-raid-disks 4
|
||
persistent-superblock 1
|
||
chunk-size 32
|
||
|
||
# Spare disks for hot reconstruction
|
||
nr-spare-disks 0
|
||
device /dev/sda3
|
||
raid-disk 0
|
||
device /dev/sdb3
|
||
raid-disk 1
|
||
device /dev/sdc3
|
||
raid-disk 2
|
||
device /dev/sdd3
|
||
raid-disk 3
|
||
|
||
# boot partition
|
||
#
|
||
raiddev /dev/md1
|
||
raid-level 1
|
||
nr-raid-disks 2
|
||
persistent-superblock 1
|
||
chunk-size 32
|
||
|
||
# Spare disks for hot reconstruction
|
||
nr-spare-disks 0
|
||
device /dev/sda1
|
||
raid-disk 0
|
||
device /dev/sdb1
|
||
raid-disk 1
|
||
|
||
# --------------------------
|
||
|
||
# cat lilo.conf.sda
|
||
# GLOBAL SECTION
|
||
# device containing /boot directory
|
||
disk=/dev/md0
|
||
# geometry
|
||
bios=0x80
|
||
sectors=32
|
||
heads=64
|
||
cylinders=4095
|
||
# dummy
|
||
partition=/dev/md1
|
||
# start of device "disk" above
|
||
start=32
|
||
|
||
boot=/dev/sda
|
||
map=/boot/map
|
||
install=/boot/boot.b
|
||
|
||
image=/boot/bzImage
|
||
root=/dev/md0
|
||
label=LinuxRaid
|
||
read-only
|
||
|
||
# ------------------------
|
||
# cat lilo.conf.sdb
|
||
# GLOBAL SECTION
|
||
# device containing /boot directory
|
||
disk=/dev/md0
|
||
# geometry
|
||
bios=0x80
|
||
sectors=32
|
||
heads=64
|
||
cylinders=4095
|
||
# dummy
|
||
partition=/dev/md1
|
||
# start of device "disk" above
|
||
start=32
|
||
|
||
boot=/dev/sdb
|
||
map=/boot/map
|
||
install=/boot/boot.b
|
||
|
||
image=/boot/bzImage
|
||
root=/dev/md0
|
||
label=LinuxRaid
|
||
read-only
|
||
|
||
|
||
|
||
7. Appendix C. - ide RAID10 with initrd
|
||
|
||
RAID1 over striped RAID0 pair.... the disks in the RAID0 sets are not
|
||
quite the same size, but close enough.
|
||
|
||
|
||
|
||
/dev/md0 is the /boot partition and is autostarted by the kernel
|
||
/dev/md1 and /dev/md3 are the two RAID0 sets autostarted by the kernel
|
||
/dev/md2 is the root partition and is started by initrd
|
||
|
||
df
|
||
Filesystem 1k-blocks Used Available Use% Mounted on
|
||
/dev/md2 118531 76485 35925 68% /
|
||
/dev/md0 1917 1361 457 75% /boot
|
||
|
||
# ----------------------------
|
||
|
||
fdisk -ul /dev/hda
|
||
|
||
Disk /dev/hda: 4 heads, 46 sectors, 903 cylinders
|
||
Units = sectors of 1 * 512 bytes
|
||
|
||
Device Boot Start End Blocks Id System
|
||
/dev/hda1 46 4231 2093 fd Linux raid autodetect
|
||
/dev/hda2 4232 166151 80960 fd Linux raid autodetect
|
||
|
||
# ----------------------------
|
||
|
||
fdisk -ul /dev/hdb
|
||
|
||
Disk /dev/hdb: 5 heads, 17 sectors, 981 cylinders
|
||
Units = sectors of 1 * 512 bytes
|
||
|
||
Device Boot Start End Blocks Id System
|
||
/dev/hdb1 17 83384 41684 fd Linux raid autodetect
|
||
|
||
# ----------------------------
|
||
|
||
fdisk -ul /dev/hdc
|
||
|
||
Disk /dev/hdc: 7 heads, 17 sectors, 1024 cylinders
|
||
Units = sectors of 1 * 512 bytes
|
||
|
||
Device Boot Start End Blocks Id System
|
||
/dev/hdc1 17 84013 41998+ fd Linux raid autodetect
|
||
/dev/hdc2 84014 121855 18921 82 Linux swap
|
||
|
||
# ----------------------------
|
||
|
||
fdisk -ul /dev/hdd
|
||
|
||
Disk /dev/hdd: 4 heads, 46 sectors, 903 cylinders
|
||
Units = sectors of 1 * 512 bytes
|
||
|
||
Device Boot Start End Blocks Id System
|
||
/dev/hdd1 46 4231 2093 fd Linux raid autodetect
|
||
/dev/hdd2 4232 166151 80960 fd Linux raid autodetect
|
||
|
||
# ----------------------------
|
||
|
||
# raidtab
|
||
#
|
||
raiddev /dev/md0
|
||
raid-level 1
|
||
nr-raid-disks 2
|
||
persistent-superblock 1
|
||
chunk-size 8
|
||
device /dev/hda1
|
||
raid-disk 0
|
||
device /dev/hdd1
|
||
raid-disk 1
|
||
|
||
raiddev /dev/md1
|
||
raid-level 0
|
||
nr-raid-disks 2
|
||
persistent-superblock 1
|
||
chunk-size 8
|
||
device /dev/hdd2
|
||
raid-disk 0
|
||
device /dev/hdb1
|
||
raid-disk 1
|
||
|
||
raiddev /dev/md2
|
||
raid-level 1
|
||
nr-raid-disks 2
|
||
persistent-superblock 1
|
||
chunk-size 8
|
||
device /dev/md1
|
||
raid-disk 0
|
||
device /dev/md3
|
||
raid-disk 1
|
||
|
||
raiddev /dev/md3
|
||
raid-level 0
|
||
nr-raid-disks 2
|
||
persistent-superblock 1
|
||
chunk-size 8
|
||
device /dev/hda2
|
||
raid-disk 0
|
||
device /dev/hdc1
|
||
raid-disk 1
|
||
|
||
# ----------------------------
|
||
|
||
contents of linuxrc
|
||
|
||
cat linuxrc
|
||
#!/bin/sh
|
||
# ver 1.02 2-22-00
|
||
#
|
||
############# really BEGIN 'linuxrc' ###############
|
||
#
|
||
# mount the proc file system
|
||
/bin/mount /proc
|
||
|
||
# start raid 1 made of raid 0's
|
||
/bin/raidstart /dev/md2
|
||
|
||
# tell the console what's happening
|
||
/bin/cat /proc/mdstat
|
||
|
||
# Everything is fine, let the kernel mount /dev/md2
|
||
# tell the kernel to switch to /dev/md2 as the /root device
|
||
# The 0x900 value is the device number calculated by:
|
||
# 256*major_device_number + minor_device number
|
||
echo "/dev/md2 mounted on root"
|
||
echo 0x902>/proc/sys/kernel/real-root-dev
|
||
|
||
# umount /proc to deallocate initrd device ram space
|
||
/bin/umount /proc
|
||
exit
|
||
|
||
# ----------------------------
|
||
|
||
contents of initrd
|
||
|
||
./bin/ash
|
||
./bin/echo
|
||
./bin/raidstart
|
||
./bin/mount
|
||
./bin/umount
|
||
./bin/cat
|
||
./bin/sh
|
||
./dev/tty1
|
||
./dev/md0
|
||
./dev/md1
|
||
./dev/md2
|
||
./dev/md3
|
||
./dev/md4
|
||
./dev/console
|
||
./dev/hda
|
||
./dev/hda1
|
||
./dev/hda2
|
||
./dev/hda3
|
||
./dev/hdb
|
||
./dev/hdb1
|
||
./dev/hdb2
|
||
./dev/hdb3
|
||
./dev/hdc
|
||
./dev/hdc1
|
||
./dev/hdc2
|
||
./dev/hdc3
|
||
./dev/hdd
|
||
./dev/hdd1
|
||
./dev/hdd2
|
||
./dev/hdd3
|
||
./dev/initrd
|
||
./dev/ram0
|
||
./dev/ram1
|
||
./dev/ram2
|
||
./dev/ram3
|
||
./dev/ram4
|
||
./dev/ram5
|
||
./dev/ram6
|
||
./dev/ram7
|
||
./etc/raidtab
|
||
./etc/fstab
|
||
./lib/ld-2.1.2.so
|
||
./lib/ld-linux.so.1
|
||
./lib/ld-linux.so.1.9.9
|
||
./lib/ld-linux.so.2
|
||
./lib/ld.so
|
||
./lib/libc-2.1.2.so
|
||
./lib/libc.so.6
|
||
./linuxrc
|
||
./proc
|
||
|
||
|
||
|
||
8. Appendix D. - ide RAID1-10 with initrd
|
||
|
||
This is a system made up of an assortment of odds and ends. The root
|
||
mounted raid device is comprised of a RAID1 made up of one RAID0 array
|
||
from odd sized disks and a larger regular disk partition. Examination
|
||
of the lilo.conf files may give you better insight into the reasoning
|
||
behind the various parameters.
|
||
|
||
|
||
|
||
/dev/md0 is the /boot partition and is autostarted by the kernel
|
||
/dev/md1 is one half of the mirror set for md2, autostarted by kernel
|
||
/dev/hda3 is the other half of the mirror set for md2
|
||
/dev/md2 is the RAID1 /dev/md1 + /dev/hda3, started by initrd
|
||
|
||
df
|
||
Filesystem 1k-blocks Used Available Use% Mounted on
|
||
/dev/md2 138381 74421 56815 57% /
|
||
/dev/md0 2011 1360 549 71% /boot
|
||
|
||
# ----------------------------
|
||
|
||
fdisk -ul /dev/hda
|
||
|
||
Disk /dev/hda: 8 heads, 46 sectors, 903 cylinders
|
||
Units = sectors of 1 * 512 bytes
|
||
|
||
Device Boot Start End Blocks Id System
|
||
/dev/hda1 46 4415 2185 fd Linux raid autodetect
|
||
/dev/hda2 4416 43423 19504 82 Linux swap
|
||
/dev/hda3 43424 332303 144440 83 Linux native
|
||
|
||
# ----------------------------
|
||
|
||
fdisk -ul /dev/hdc
|
||
|
||
Disk /dev/hdc: 8 heads, 39 sectors, 762 cylinders
|
||
Units = sectors of 1 * 512 bytes
|
||
|
||
Device Boot Start End Blocks Id System
|
||
/dev/hdc1 39 4367 2164+ fd Linux raid autodetect
|
||
/dev/hdc2 4368 70199 32916 82 Linux swap
|
||
/dev/hdc3 70200 237743 83772 fd Linux raid autodetect
|
||
|
||
# ----------------------------
|
||
|
||
fdisk -ul /dev/hdd
|
||
|
||
Disk /dev/hdd: 4 heads, 39 sectors, 762 cylinders
|
||
Units = sectors of 1 * 512 bytes
|
||
|
||
Device Boot Start End Blocks Id System
|
||
/dev/hdd1 39 118871 59416+ fd Linux raid autodetect
|
||
|
||
# ----------------------------
|
||
|
||
# raidtab
|
||
#
|
||
raiddev /dev/md0
|
||
raid-level 1
|
||
nr-raid-disks 2
|
||
persistent-superblock 1
|
||
chunk-size 8
|
||
device /dev/hdc1
|
||
raid-disk 1
|
||
device /dev/hda1
|
||
raid-disk 0
|
||
|
||
raiddev /dev/md1
|
||
raid-level 0
|
||
nr-raid-disks 2
|
||
persistent-superblock 1
|
||
chunk-size 8
|
||
device /dev/hdc3
|
||
raid-disk 0
|
||
device /dev/hdd1
|
||
raid-disk 1
|
||
|
||
raiddev /dev/md2
|
||
raid-level 1
|
||
nr-raid-disks 2
|
||
persistent-superblock 1
|
||
chunk-size 8
|
||
device /dev/md1
|
||
raid-disk 1
|
||
device /dev/hda3
|
||
raid-disk 0
|
||
|
||
# ----------------------------
|
||
|
||
cat linuxrc
|
||
#!/bin/sh
|
||
# ver 1.02 2-22-00
|
||
#
|
||
############# really BEGIN 'linuxrc' ###############
|
||
#
|
||
# mount the proc file system
|
||
/bin/mount /proc
|
||
|
||
# autostart /boot partition and raid0
|
||
/bin/raidstart /dev/md2
|
||
|
||
# tell the console what's happening
|
||
/bin/cat /proc/mdstat
|
||
|
||
# Everything is fine, let the kernel mount /dev/md2
|
||
# tell the kernel to switch to /dev/md2 as the /root device
|
||
# The 0x900 value is the device number calculated by:
|
||
# 256*major_device_number + minor_device number
|
||
echo "/dev/md2 mounted on root"
|
||
echo 0x902>/proc/sys/kernel/real-root-dev
|
||
|
||
# umount /proc to deallocate initrd device ram space
|
||
/bin/umount /proc
|
||
exit
|
||
|
||
# ----------------------------
|
||
|
||
contents of initrd.gz
|
||
|
||
./bin
|
||
./bin/ash
|
||
./bin/echo
|
||
./bin/raidstart
|
||
./bin/mount
|
||
./bin/umount
|
||
./bin/cat
|
||
./bin/sh
|
||
./dev/tty1
|
||
./dev/md0
|
||
./dev/md1
|
||
./dev/md2
|
||
./dev/md3
|
||
./dev/console
|
||
./dev/hda
|
||
./dev/hda1
|
||
./dev/hda2
|
||
./dev/hda3
|
||
./dev/hdc
|
||
./dev/hdc1
|
||
./dev/hdc2
|
||
./dev/hdc3
|
||
./dev/hdd
|
||
./dev/hdd1
|
||
./dev/hdd2
|
||
./dev/hdd3
|
||
./dev/initrd
|
||
./dev/ram0
|
||
./dev/ram1
|
||
./dev/ram2
|
||
./dev/ram3
|
||
./dev/ram4
|
||
./dev/ram5
|
||
./dev/ram6
|
||
./dev/ram7
|
||
./etc/raidtab
|
||
./etc/fstab
|
||
./lib/ld-2.1.2.so
|
||
./lib/ld-linux.so.1
|
||
./lib/ld-linux.so.1.9.9
|
||
./lib/ld-linux.so.2
|
||
./lib/ld.so
|
||
./lib/libc-2.1.2.so
|
||
./lib/libc.so.6
|
||
./linuxrc
|
||
./proc
|
||
|
||
# ----------------------------
|
||
|
||
cat lilo.conf.hda
|
||
# GLOBAL SECTION
|
||
# device containing /boot directory
|
||
disk=/dev/md2
|
||
# geometry
|
||
bios=0x80
|
||
cylinders=903
|
||
heads=8
|
||
sectors=46
|
||
# geometry for 2nd disk
|
||
# bios will be the same because it will have to be moved to hda
|
||
# cylinders=762
|
||
# heads=8
|
||
# sectors=39
|
||
|
||
# dummy
|
||
partition=/dev/md0
|
||
# start of device "disk" above
|
||
start=46
|
||
# second device
|
||
# start=39
|
||
|
||
# seem to have some trouble with 2.2.14 recognizing the right IRQ
|
||
append = "ide1=0x170,0x376,12 ether=10,0x300,eth0 ether=5,0x320,eth1"
|
||
|
||
boot=/dev/hda
|
||
map=/boot/map
|
||
install=/boot/boot.b
|
||
|
||
initrd=/boot/initrd.gz
|
||
|
||
image=/boot/zImage
|
||
root=/dev/md2
|
||
label=LinuxRaid
|
||
read-only
|
||
|
||
# ----------------------------
|
||
|
||
cat lilo.conf.hdc
|
||
# GLOBAL SECTION
|
||
# device containing /boot directory
|
||
disk=/dev/md2
|
||
# geometry
|
||
bios=0x80
|
||
# cylinders=903
|
||
# heads=8
|
||
# sectors=46
|
||
# geometry for 2nd disk
|
||
# bios will be the same because it will have to be moved to hda
|
||
cylinders=762
|
||
heads=8
|
||
sectors=39
|
||
|
||
# dummy
|
||
partition=/dev/md0
|
||
# start of device "disk" above
|
||
# start=46
|
||
# second device
|
||
start=39
|
||
|
||
# seem to have some trouble with 2.2.14 recognizing the right IRQ
|
||
append = "ide1=0x170,0x376,12 ether=10,0x300,eth0 ether=5,0x320,eth1"
|
||
|
||
boot=/dev/hdc
|
||
map=/boot/map
|
||
install=/boot/boot.b
|
||
|
||
initrd=/boot/initrd.gz
|
||
|
||
image=/boot/zImage
|
||
root=/dev/md2
|
||
label=LinuxRaid
|
||
read-only
|
||
|
||
|
||
|