Next
Previous
Contents
This is the procedure to make an 'initrd' ramdisk with rescue tools for raid.
Specifically, this document referrs to RAID1 and RAID5 implementations.
The rescue file system may be used stand alone. Should your raid array
fail to mount, you are left with the rescue system mounted and running.
TAKE THE APPROPRIATE SECURITY PRECAUTIONS!!!
The first thing that must be done is to patch and build your kernel
and become familiar with the raid tools. Make sure and include
Gadi's raid stop patch in Appendix E.
Configure, mount and test your raid device(s). The details of how to do this
are included in the raidtools package and briefly reviewed later in
this document.
I used the Slackware-3.4 distribution to build both the Rescue/Boot
filesystem and the filesystem for the production machine. Any linux
distribution should work fine. If you use a different distribution, review
the Slackware specific portion of this procedure and modify it to suit your needs.
I use loadlin to boot the kernel image and ramdisk from a dos partition
simply because there are oddball devices in my system that have dos
configuration software. Lilo will work just as well and a small linux
partition can be used instead containing only the raid/boot files and the
lilo record.
For the raid boot/rescue system,
I chose to create a minimum ramdisk system using the Slackware 'setup'
script followed by installing the 'linuxthreads' package and 'raidtools'
over the clean Slackware installation on my ramdisk. I used the
identical procedure to build the production system. So the
rescue and production systems are very similar.
This installation process gives me a 'bare' system
(save a copy of the file) to which I overlay
/lib/modules/2.x.x......
/etc .... with a modified fstab, mdtab, raidX.conf, raidboot.conf
/etc/rc.d
/dev/md*
from my current system to customize it for the particular kernel
and machine that it is/will-be running on.
This makes the boot/rescue system the same system that is running
on the root mounted raid device, just skinnyed down a bit, while
allowing the library, etc... revisions to always be current.
From the root home directory (/root):
cd /root
mkdir raidboot
cd raidboot
Create a mountpoints to work on
mkdir mnt
mkdir mnt2
Make a file large enough to do the file system install. This
will be a lot larger than the final rescue file system.
I chose 24 megs since 16 megs is not large enough
dd if=/dev/zero of=build bs=1024k count=24
associate the file with a loop device
and generate an ext2 file system on the file
losetup /dev/loop0 build
mke2fs -v -m0 -L initrd /dev/loop0
mount /dev/loop0 mnt
...skip Slackware Specific stuff
and go to next section.
Now that an empty filesystem is created and mounted, run "setup".
Specify /root/raidboot/mnt
as the 'target'. The source is whatever you normally install from.
Select the packages you wish to install and proceed but DO NOT configure.
Choose 'EXPERT' prompting mode.
I chose 'A', 'AP, and 'N' installing only the minimum to run the system
plus an editor I am familiar with (vi, jed, joe) that is reasonably compact.
lqqqqqqqq SELECTING PACKAGES FROM SERIES A (BASE LINUX SYSTEM) qqqqqqqqk
x lqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqk x
x x [X] aaa_base Basic filesystem, shell, and utils - REQUIRED x x
x x [X] bash GNU bash-1.14.7 shell - REQUIRED x x
x x [X] devs Device files found in /dev - REQUIRED x x
x x [X] etc System config files & utilities - REQUIRED x x
x x [X] shadow Shadow password suite - REQUIRED x x
x x [ ] ide Linux 2.0.30 no SCSI (YOU NEED 1 KERNEL) x x
x x [ ] scsi Linux 2.0.30 with SCSI (YOU NEED 1 KERNEL) x x
x x [ ] modules Modular Linux device drivers x x
x x [ ] scsimods Loadable SCSI device drivers x x
x x [X] hdsetup Slackware setup scripts - REQUIRED x x
x x [ ] lilo Boots Linux (not UMSDOS), DOS, OS/2, etc. x x
x x [ ] bsdlpr BSD lpr - printer spooling system x x
x x [ ] loadlin Boots Linux (UMSDOS too!) from MS-DOS x x
x x [ ] pnp Plug'n'Play configuration tool x x
x x [ ] umsprogs Utilities needed to use the UMSDOS filesystem x x
x x [X] sysvinit System V-like INIT programs - REQUIRED x x
x x [X] bin GNU fileutils 3.12, elvis, etc. - REQUIRED x x
x x [X] ldso Dynamic linker/loader - REQUIRED x x
x x [ ] ibcs2 Runs SCO/SysVr4 binaries x x
x x [X] less A text pager utility - REQUIRED x x
x x [ ] pcmcia PCMCIA card services support x x
x x [ ] getty Getty_ps 2.0.7e - OPTIONAL x x
x x [X] gzip The GNU zip compression - REQUIRED x x
x x [X] ps Displays process info - REQUIRED x x
x x [X] aoutlibs a.out shared libs - RECOMMENDED x x
x x [X] elflibs The ELF shared C libraries - REQUIRED x x
x x [X] util Util-linux utilities - REQUIRED x x
x x [ ] minicom Serial transfer and modem comm package x x
x x [ ] cpio The GNU cpio backup/archiving utility x x
x x [X] e2fsbn Utilities for the ext2 file system x x
x x [X] find GNU findutils 4.1 x x
x x [X] grep GNU grep 2.0 x x
x x [ ] kbd Change keyboard mappings x x
x x [X] gpm Cut and paste text with your mouse x x
x x [X] sh_utils GNU sh-utils 1.16 - REQUIRED x x
x x [X] sysklogd Logs system and kernel messages x x
x x [X] tar GNU tar 1.12 - REQUIRED x x
x x [ ] tcsh Extended C shell version 6.07 x x
x x [X] txtutils GNU textutils-1.22 - REQUIRED x x
x x [ ] zoneinfo Configures your time zone x x
x mqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqj x
From the 'AP series, I use only 'JOE', and editor I like, and 'MC' a
small and useful file management tool. You choose the utilities you
will need on your system.
lqqqqqqqqq SELECTING PACKAGES FROM SERIES AP (APPLICATIONS) qqqqqqqqqk
x x [ ] ispell The International version of ispell x x
x x [ ] jove Jonathan's Own Version of Emacs text editor x x
x x [ ] manpgs More man pages (online documentation) x x
x x [ ] diff GNU diffutils x x
x x [ ] sudo Allow special users limited root access x x
x x [ ] ghostscr GNU Ghostscript version 3.33 x x
x x [ ] gsfonts1 Ghostscript fonts (part one) x x
x x [ ] gsfonts2 Ghostscript fonts (part two) x x
x x [ ] gsfonts3 Ghostscript fonts (part three) x x
x x [ ] jed JED programmer's editor x x
x x [X] joe joe text editor, version 2.8 x x
x x [ ] jpeg JPEG image compression utilities x x
x x [ ] bc GNU bc - arbitrary precision math language x x
x x [ ] workbone a text-based audio CD player x x
x x [X] mc The Midnight Commander file manager x x
x x [ ] mt_st mt ported from BSD - controls tape drive x x
x x [ ] groff GNU troff document formatting system x x
x x [ ] quota User disk quota utilities x x
x x [ ] sc The 'sc' spreadsheet x x
x x [ ] texinfo GNU texinfo documentation system x x
x x [ ] vim Improved vi clone x x
x x [ ] ash A small /bin/sh type shell - 62K x x
x x [ ] zsh Zsh - a custom *nix shell x x
x mqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqj x
From the 'N' package I only loaded TCPIP. This isn't really necessary,
but is very handy and allows access to the network while working on a
repair or update with the root raid array dismounted. TCPIP also
contains 'biff' which is used by some of the applications in 'A'. If
you don't install 'N' you might want to install the biff package anyway.
lqqqq SELECTING PACKAGES FROM SERIES N (NETWORK/NEWS/MAIL/UUCP) qqqqqk
x lqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqk x
x x [ ] apache Apache WWW (HTTP) server x x
x x [ ] procmail Mail delivery/filtering utility x x
x x [ ] dip Handles SLIP/CSLIP connections x x
x x [ ] ppp Point-to-point protocol x x
x x [ ] mailx The mailx mailer x x
x x [X] tcpip TCP/IP networking programs x x
x x [ ] bind Berkeley Internet Name Domain server x x
x x [ ] rdist Remote file distribution utility x x
x x [ ] lynx Text-based World Wide Web browser x x
x x [ ] uucp Taylor UUCP 1.06.1 with HDB && Taylor configs x x
x x [ ] elm Menu-driven user mail program x x
x x [ ] pine Pine menu-driven mail program x x
x x [ ] sendmail The sendmail mail transport agent x x
x x [ ] metamail Metamail multimedia mail extensions x x
x x [ ] smailcfg Extra configuration files for sendmail x x
x x [ ] cnews Spools and transmits Usenet news x x
x x [ ] inn InterNetNews news transport system x x
x x [ ] tin The 'tin' news reader (local or NNTP) x x
x x [ ] trn 'trn' for /var/spool/news x x
x x [ ] trn-nntp 'trn' for NNTP (install 1 'trn' maximum) x x
x x [ ] nn-spool 'nn' for /var/spool/news x x
x x [ ] nn-nntp 'nn' for NNTP (install 1 'nn' maximum) x x
x x [ ] netpipes Network pipe utilities x x
x mqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqj x
With the installation complete, say no to everything else (no to all
configuration requests) and exit the script.
Now you must install the 'linuxthreads-0.71' library.
I have included this diff for the linuxthreads Makefile rather
than explain the details of the
installation by hand. Save the original Makefile, apply the diff
and then:
cd /usr/src/linuxthreads-0.71
patch
make
make install
-------------------diff Makefile.old Makefile.raid-----------------
2a3,13
> # If you are building "linuxthreads" for installation on a mount
> # point which is not the "root" partition, redefine 'BUILDIR' to
> # the mount point to use as the "root" directory
> # You may wish to do this if you are building an 'initial ram disk'
> # such as used with bootable root raid devices.
> # REQUIRES ldconfig version 1.9.5 or better
> # do ldconfig -v to check
> #
> BUILDIR=/root/raidboot/mnt
> #BUILDIR=
>
81,82c92,93
< install pthread.h $(INCLUDEDIR)/pthread.h
< install semaphore.h $(INCLUDEDIR)/semaphore.h
---
> install pthread.h $(BUILDIR)$(INCLUDEDIR)/pthread.h
> install semaphore.h $(BUILDIR)$(INCLUDEDIR)/semaphore.h
84c95
< test -f /usr/include/sched.h || install sched.h $(INCLUDEDIR)/sched.h
---
> test -f $(BUILDIR)/usr/include/sched.h || install sched.h $(BUILDIR)$(INCLUDEDIR)/sched.h
86,89c97,103
< install $(LIB) $(LIBDIR)/$(LIB)
< install $(SHLIB) $(SHAREDLIBDIR)/$(SHLIB)
< rm -f $(LIBDIR)/$(SHLIB0)
< ln -s $(SHAREDLIBDIR)/$(SHLIB) $(LIBDIR)/$(SHLIB0)
---
> install $(LIB) $(BUILDIR)$(LIBDIR)/$(LIB)
> install $(SHLIB) $(BUILDIR)$(SHAREDLIBDIR)/$(SHLIB)
> rm -f $(BUILDIR)$(LIBDIR)/$(SHLIB0)
> ln -s $(SHAREDLIBDIR)/$(SHLIB) $(BUILDIR)$(LIBDIR)/$(SHLIB0)
> ifneq ($(BUILDIR),)
> ldconfig -r ${BUILDIR} -n $(SHAREDLIBDIR)
> else
91c105,106
< cd man; $(MAKE) MANDIR=$(MANDIR) install
---
> endif
> cd man; $(MAKE) MANDIR=$(BUILDIR)$(MANDIR) install
The next step is the installation of the raid tools.
raidtools-0.42
You must run the "configure" script to point the Makefile
at the build directory for the ramdisk files
cd /usr/src/raidtools-0.42
configure --sbindir=/root/raidboot/mnt/sbin --prefix=/root/raidboot/mnt/usr
make
make install
Now!! the Makefile for install is not quite right so do the following
to clean up. This will be fixed in future releases so that the re-linking
will not be necessary.
Fix the make install error
The file links specified in the Makefile at 'LINKS' must be removed
and re-linked to operate properly.
cd /root/raidboot/mnt/sbin
ln -fs mdadd mdrun
ln -fs mdadd mdstop
Delete the following directories from filesystem
(CAUTION DON'T DELETE FROM YOUR RUNNING SYSTEM)
it's easy to do, guess how I found out!!!
cd /root/raidboot/mnt
rm -r home/ftp/*
rm -r lost+found
rm -r usr/doc
rm -r usr/info
rm -r usr/local/man
rm -r usr/man
rm -r usr/openwin
rm -r usr/share/locale
rm -r usr/X*
rm -r var/man
rm -r var/log/packages
rm -r var/log/setup
rm -r var/log/disk_contents
The last step simply copies the /dev/md* devices from the current file system
onto the rescue file system. You could create these with mknode.
cp -a /dev/md* /root/raidboot/mnt/dev
Now you have a clean re-useable filesystem ready for customization.
Once customized, this file system can be used for rescue should the raid
device(s) become corrupted and the raid tools needed to fix them. It will
also be used to boot and root-mount the raid device by adding the linuxrc
file which will be discussed next.
Copy the file system to a smaller device for the initrd file,
16 megs should be large enough.
Create the smaller file system and mount it
cd /root/raidboot
dd if=/dev/zero of=bare.fs bs=1024k count=16
associate the file with a loop device
and generate a ext2 file system on the file
losetup /dev/loop1 bare.fs
mke2fs -v -m0 -L initrd /dev/loop1
mount /dev/loop1 mnt2
Copy the 'build' file system to 'bare.fs'
cp -a mnt/* mnt2
Save the 'bare.fs' system before customization so later update is easy.
The 'build' file system is no longer needed and may be deleted.
cd /root/raidboot
umount mnt
umount mnt2
losetup -d /dev/loop0
losetup -d /dev/loop1
rm build
cp bare.fs rescue
gzip -9 bare.fs
Create the BOOT/RESCUE initrd filesystem
Now copy the system dependent items that match the kernel from the
development platform, or you can manually modify the files in the
rescue file system to match your target system.
losetup /dev/loop0 rescue
mount /dev/loop0 mnt
Make sure your etc directory is clean of *~ , core and log files.
The next 2 commands creates some warning messages, ignore them.
cp -dp /etc/* mnt/etc
cp -dp /etc/rc.d/* mnt/etc/rc.d
mkdir mnt/lib/modules
cp -a /lib/modules/2.x.x mnt/lib/modules <--- your current 2.x.x
Corrections for the Rescue System
Edit the following files to correct them for your rescue system. Some file
names listed below are Slackware specific but have equivalents in other
distributions.
cd mnt
Non-network
etc/fstab
etc/mdtab should work OK
Network
etc/hosts
etc/resolv.conf
etc/hosts.equiv and related files
etc/rc.d/rc.inet1 correct ip#, mask, gateway, etc...
etc/rc.d/rc.S remove entire section on file system status
from:
# Test to see if the root partition is read-only
to but not including:
# remove /etc/mtab* so that mount will .....
This avoids the annoying warning that
the ramdisk is mounted rw.
etc/rc.d/rc.xxxxx others as required, see later on in this doc
root/.rhosts if present
home/xxxx/xxxx others as required
WARNING: The above procedure moves your password and shadow
files onto the rescue disk!!!!!
WARNING: You may not wish to do this for security reasons.
Create any directories for mounting /dev/disk... as may be required
that are unique to your system. These are the mountpoints for booting
the system (boot partition and backup boot partition). My system boot from
dos using loadlin, however linux partition(s) and lilo will work fine.
My system uses:
cd /root/raidboot/mnt <--- initrd root
mkdir dosa dos partition mount point
mkdir dosb dos mirror mount point
The rescue file system is complete!
You will note upon examination of the files in the rescue file
system, that there are still many files that could be deleted.
I have not done this since it would overly complicate this
procedure and most raid systems have adequate disk and memory.
If you wish to skinny down the file system, go to it!
To make the rescue disk boot the raid device, you need only copy
the executable script file:
linuxrc
to the root of the device.
The theory of operation for this linuxrc file is discussed in
Appendix G, linuxrc theory of operation.
A very simple and much easier to understand (working) linuxrc is
included in
Appendix D,
obsolete linuxrc and shutdown scripts. Copy the following text to
linuxrc and save in your development area.
-------------------- linuxrc ----------------------
#!/bin/sh
# ver 1.13 3-6-98
#
################# BEGIN 'linuxrc' ##################
# DEFINE FUNCTIONS #
####################################################
# Define 'Fault' function in the event something
# goes wrong during the execution of 'linuxrc'
#
FaultExit () {
# correct fstab to show '/dev/ram0' for rescue system
/bin/cat /etc/fstab | {
while read Line
do
if [ -z "$( echo ${Line} | /usr/bin/grep md0 )" ]; then
echo ${Line}
else
echo "/dev/ram0 / ext2 defaults 1 1"
fi
done
} > /etc/tmp.$$
/bin/mv /etc/tmp.$$ /etc/fstab
# point root at /dev/ram0 (the rescue system)
echo 0x100>/proc/sys/kernel/real-root-dev
/bin/umount /proc
exit
}
# Define 'Warning' procdure to print banner on boot terminal
#
Warning () {
echo '*********************************'
echo -e " $*"
echo '*********************************'
}
# Define 'SplitKernelArg' to help extract 'Raid' related kernel arguments
SplitKernelArg () { eval $1='$( IFS=,; echo $2)' }
#Define 'SplitConfArgs' to help extract system configuration arguments
SplitConfArgs () {
RaidBootType=$1
RaidBootDevice=$2
RaidConfigPath=$3
}
########################################################
################### MAIN linuxrc #######################
########################################################
# mount the proc file system
/bin/mount /proc
# Get the boot partition and configuration location from command line
CMDLINE=`/bin/cat /proc/cmdline`
for Parameter in $CMDLINE; do
Parameter=$( IFS='='; echo ${Parameter} )
case $Parameter in
Raid*) SplitKernelArg $Parameter;;
esac
done
# check for 'required raid boot'
if [ -z "${Raid_Conf}" ]; then
Warning Kernel command line \'Raid_Conf\' missing
FaultExit
fi
SplitConfArgs $Raid_Conf
# tmp mount the boot partition
/bin/mount -t ${RaidBootType} ${RaidBootDevice} /mnt
# get etc files from primary raid system
pushd /etc
# this will un-tar into 'etc' (see rc.6)
if [ ! -f /mnt/${RaidConfigPath}/raidboot.etc ]; then
# bad news, this file should be here
Warning required file \'raidboot.etc\' \
missing from ${RaidBootDevice}/${RaidConfigPath} \\n \
\\tUsing rescue system defaults
else
/bin/tar -xf /mnt/${RaidConfigPath}/raidboot.etc
fi
# get 'real' raidboot device for this boot
# status path, and name of raidX.conf
if [ ! -f /mnt/${RaidConfigPath}/raidboot.cfg ]; then
# bad news, this file should be here
Warning required file 'raidboot.cfg' \
missing from ${RaidBootDevice}/${RaidConfigPath}\\n \
\\tUsing rescue system defaults
# Get the first raidX.conf file name in $RArg1
RaidBootDevs=$RaidBootDevice
RaidStatusPath=$RaidConfigPath
for RaidConfigEtc in $( ls raid*.conf )
do break; done
else
{
read RaidBootDevs
read RaidStatusPath
read RaidConfigEtc
} < /mnt/${RaidConfigPath}/raidboot.cfg
fi
popd
/bin/umount /mnt
# Set a flag in case the raid status file is not found
#
RAIDOWN="raidboot.ro not found"
RAIDREF="raidgood.ref not found"
echo "Reading md0 shutdown status."
# search for raid shutdown status
for Device in ${RaidBootDevs}
do
# these filesystem types should be in 'fstab' since
# the partitions must be mounted for a clean raid shutdown
/bin/mount ${Device} /mnt
if [ -f /mnt/${RaidStatusPath}/raidboot.ro ]; then
RAIDOWN=`/bin/cat /mnt/${RaidStatusPath}/raidboot.ro`
RAIDREF=`/bin/cat /mnt/${RaidStatusPath}/raidgood.ref`
/bin/umount /mnt
break
fi
/bin/umount /mnt
done
# Test for a clean shutdown with array matching reference
if [ "${RAIDOWN}" != "${RAIDREF}" ]; then
Warning shutdown ERROR ${RAIDOWN}
FaultExit
fi
# The raid array is clean, remove shutdown status files
for Device in ${RaidBootDevs}
do
/bin/mount ${Device} /mnt
/bin/rm -f /mnt/${RaidStatusPath}/raidboot.ro
/bin/umount /mnt
done
# Write a clean superblock on all raid devices
echo "write clean superblocks"
/sbin/mkraid -f --only-superblock /etc/${RaidConfigEtc}
# Activate raid array(s)
if [ -z "$Raid_ALT" ]; then
/sbin/mdadd -ar
else
/sbin/mdadd $Raid_ALT
fi
# If there are errors - BAIL OUT and leave rescue running
if [ $? -ne 0 ]; then
Warning some RAID device has errors
FaultExit
fi
# Everything is fine, let the kernel mount /dev/md0
# tell the kernel to switch to /dev/md0 as the /root device
# The 0x900 value is the device number calculated by:
# 256*major_device_number + minor_device number
echo "/dev/md0 mounted on root"
echo 0x900>/proc/sys/kernel/real-root-dev
# umount /proc to deallocate initrd device ram space
/bin/umount /proc
exit
#------------------ end linuxrc ----------------------
Add 'linuxrc' to initrd boot device
cd /root/raidboot
chmod 777 linuxrc
cp -p linuxrc mnt
To complete the installation, modify the rc scripts to save
the md status to the real root device when shutdown occurs.
In slackware this is rc.0 -> rc.6
In debian 'bo' this is in both 'halt' and 'reboot'
If you implement this in another distribution, please e-mail
the instructions and sample files so they can be included here.
I have modified Bohumil Chalupa's raid stop work-around slightly. His
original solution is presented in
Appendix A.
Since there are no linux partitions left on the production system except
md0, the boot partitions are used to store the raidOK readonly status.
I chose to write a file to each of the duplicate boot partitions containing the
status of the md array at shutdown and signifying that the
md device has been remounted RO. This allows the system to be fail safe
when any of the hard drives die.
The shutdown script is modified to call
rc.raidown which saves the necessary
information to successfully reboot and mount the raid device. Examples of
shutdown scripts for various linux distributions are shown in
Appendix B.
To capture the raid array shutdown status insert a call to
rc.raidown
after any case statements (if present) but before the actual shutdown
(kills, status saves, etc...) begins and before the file systems are
dismounted.
############ Save raid boot and status info ##############
#
if [ -x /etc/rc.d/rc.raidown ]; then
/etc/rc.d/rc.raidown
fi
################## end raid boot #########################
After all the file systems are dismounted (the root file system
'will not' dismount) but before any powerfail status check add:
################ for raid arrays #########################
# Stop all known raid arrays (except root which won't stop)
if [ -x /sbin/mdstop ]; then
echo "Stopping raid"
/sbin/mdstop -a
fi
##########################################################
This will cleanly stop all raid devices except root. Root status
is passed to the next boot in raidstat.ro.
Copy the rc file to your new raid array, the rescue file system that is
still mounted on /root/raidboot/mnt and the development system
if it is on the same machine.
Modify rescue etc/fstab as needed
and make sure rescue mdtab is correct.
Now copy the rescue disk to your dos partition and everything should
be ready to boot the raid device as root.
umount mnt
losetup -d /dev/loop0
gzip -9 rescue
Copy rescue.gz to your boot partitions.
All that remains is to creat the configuration file raidboot.conf
and test the new file system by rebooting.
The comments following the example configuration file explain each of the
three lines. This example file is for a 4 drive raid5 scsii array with
duplicate boot partitions on drives sda1 and sdb1. Put the paramaters
descriptive of your file systems here instead.
/dev/sda1 /dev/sdb1
linux
raid5.conf
# comments may only be placed 'after' the three
# configuration lines.
#
# This is 'raidboot.conf'
#
# line one, the partition(s) containing the 'initrd' raid-rescue system
# It is not necessary to boot from these partitions, however,
# since the rescue system will not fit on floppy, it is necessary
# to know which partitions are to be used to load the rescue system
#
# line two, the path to the raidboot config information
# Where the shutdown status, etc... is located at boot time
# It does NOT include the mount point information, only 'path'
# /mntpoint/'path'
#
# line -3-, name of the raid configuration file
# Current raid configuration file i.e. raid1.conf, raid5.conf
There are two kernel variables for the RESCUE and RAID system, only the first need
be specified.
- Raid_Conf=msdos,/dev/sda1,raidboot
This variable points to raid boot device and configuration file.
For floppy rescue boot, you may want to specify
this on the kernel command line or in the loadlin or lilo boot file
format: 'filesystem-type,device,path-to-config-from-mountpoint'
- Raid_ALT=-r,-p5,/dev/md0,/dev/sda3 /dev/sdb3 /dev/sdc3 /dev/sdd3
Alternate mdadd parameters
necessary when booting with non-redundant raid array. These are the comma
separated command line parameters for mdadd. Unless they are needed to
start a failed/non-redundant array, COMMENT OUT OR SPECIFY WITH A 'NULL'.
i.e. Raid_ALT=
Either of these parameters may be specified in the lilo or loadlin boot parameter
file or on the loadlin kernel command line. Care must be taken that the maximum
line length is not exceeded, however, if the command line is used
(128 characters).
When booting with lilo, the parameters are included in the lilo config
file in the form:
append="Raid_Conf=msdos,/dev/sda1,raidboot"
append="Raid_ALT=-r,-p5,/dev/md0,/dev/sda3 /dev/sdb3 /dev/sdc3 /dev/sdd3"
See man lilo.conf for more detailed information.
Since I have some hardware that requires DOS configuration utilities, I
have a small dos partition on the system.
Therefore, I used loadlin to boot the raid5 system from the dos
partition with a mirror (copy) on the companion disk. An identical method is
used for the raid1 system. The example below uses loadlin, but the procedure
is very similar for lilo.
My dos root system contains a small editor among the utilities so I can modify
the boot parameters of loadlin if necessary, allowing me to reboot the
linux system on my swap disk while testing.
The dos system contains this tree for linux"
c:\raidboot.bat
c:\raidboot\loadlin.exe
c:\raidboot\zimage
c:\raidboot\rescue.gz
c:\raidboot\raidboot.cfg
c:\raidboot\raidboot.etc
c:\raidboot\raidgood.ref
c:\raidboot\raidstat.ro (only at shutdown)
linux.bat contains:
---------------------- linux.bat ---------------------------
echo "Start the LOADLIN process:"
c:\raidboot\loadlin @c:\raidboot\boot.par
-------------------- end linux.bat -------------------------
boot.par contains:
# loadlin boot parameter file
#
# version 1.02 3-6-98
# linux kernel image
c:\linux\zimage
# target root device
root=/dev/md0
#root=/dev/ram0
#root=/dev/sdc5
# mount root device as 'ro'
ro
# size of ram disk
ramdisk_size=16384
# initrd file name
initrd=c:\raidboot\rescue.gz
#noinitrd
# memory ends here
mem=131072k
# points to raid boot device, configuration file
# for floppy rescue boot, you may want to specify
# this on the command line instead of here
# format 'filesystem-type,device,path-to-config-frm_mntpnt'
Raid_Conf=msdos,/dev/sda1,raidboot
# Alternate mdadd parameters
# necessary when boot with non-redundant raid
# otherwise, COMMENT OUT OR SPECIFY 'NULL'
#Raid_ALT=-r,-p5,/dev/md0,/dev/sda3 /dev/sdb3 /dev/sdc3 /dev/sdd3
# ethernet devices
ether=10,0x300,eth0
***** >> NOTE!! the only difference between forcing the rescue system to
run and the raid device mounting, is the loadlin parameter
root=/dev/ram0 for the rescue system
root=/dev/md0 for RAID
With root=/dev/ram0 the RAID device will not mount
and the rescue system will run unconditionally.
If the RAID array fails, the rescue system is left mounted and running.
Next
Previous
Contents
|