Differences between current version and previous revision of HowToRootRAIDHOWTO.
Other diffs: Previous Major Revision, Previous Author, or view the Annotated Edit History
Newer page: | version 3 | Last edited on Sunday, October 31, 2004 1:35:17 am | by AristotlePagaltzis | |
Older page: | version 2 | Last edited on Friday, June 7, 2002 1:07:25 am | by perry | Revert |
@@ -1,2913 +1 @@
-
-
-
-Root RAID HOWTO cookbook
-
-
-
-----
-
-!!!Root RAID HOWTO cookbook
-
-!!Michael A. Robinton,
-michael@bzs.orgv1.13, July 17, 2000
-
-
-----
-''This document only applys to the __OLD__ raidtools, versions .50 and
-under. The workarounds and solutions addressed in this write up have largely
-been made obsolete by the vast improvment in the .90 raidtools and
-accompanying kernel patch to the 2..37, 2.2x and 2.3x series kernels. You
-may find the detailed descriptions useful, particularly if you plan to run
-root raid or use initrd. Check these links for a reference to set up of
-Boot Root Raid using conventional LILO and accompanying initrd working scripts. What
-follows is the description of the now __OBSOLETE Root RAID HOWTO__.
-This document was originally written to provide a cookbook for creating a root mounted raid filesystem and companion fallback rescue system using linux initrd. There are complete step-by-step instruction for both raid1 and raid5 md0 devices. Each step is accompanied by an explanation of it's purpose.
-Included with this revision is a generic __linuxrc__ initrd file which may
-be configured with a single three line
-/etc/raidboot.conf file for
-raid1 and raid5 configurations.''
-----
-
-
-
-
-!!1. Introduction
-
-
-*1.1 Where to get Up-to-date copies of this document.
-
-*1.2 More up-to-date Boot Root Raid with LILO howto
-
-*1.3 Bugs
-
-*1.4 Acknowledgements
-
-*1.5 Copyright Notice
-
-
-
-
-
-!!2. What you need BEFORE YOU START
-
-
-*2.1 Required Packages
-
-*2.2 Other similar implementations.
-
-*2.3 Documentation -- Recommended Reading
-
-*2.4 RAID resources
-
-
-
-
-
-!!3. Quick Start for ROOT RAID
-
-
-
-
-!!4. ''initrd'' Cookbook for root mounted RAID
-
-
-*4.1 Security Reminder
-
-*4.2 Build the Kernel and Raid Tools
-
-*4.3 Build the ''initrd'' Rescue and Boot filesystem
-
-*4.4 Start the STEP by STEP instructions
-
-*4.5 Install the distribution - Slackware Specific
-
-*4.6 Install linux __pthreads__
-
-*4.7 Install Raid Tools
-
-*4.8 Remove un-needed directories and files from new filesystem.
-
-*4.9 Create /dev/md''x''
-
-*4.10 Create a bare filesystem suitable for ''initrd''
-
-*4.11 Making 'initrd' boot the RAID device - linuxrc
-
-*4.12 Modifying the rc-scripts for SHUTDOWN
-
-*4.13 Configuring RAIDBOOT - raidboot.conf
-
-*4.14 Kernel 'loadlin and lilo' variables for RESCUE and RAID
-
-
-
-
-
-!!5. Configuring the Production RAID system.
-
-
-*5.1 System specs.
-
-*5.2 Partitioning the hard drives.
-
-
-
-
-
-!!6. Building the RAID file system.
-
-
-*6.1 /etc/raid5.conf
-
-*6.2 /etc/raid1.conf
-
-*6.3 Step by Step procedures for building production RAID file system.
-
-
-
-
-
-!!7. One last thought.
-
-
-
-
-!!8. Appendix A. - Bohumil Chalupa's md0 shutdown
-
-
-
-
-!!9. Appendix B. - Sample SHUTDOWN scripts
-
-
-*9.1 Slackware - /etc/rc.d/rc.6
-
-*9.2 Debian bo - /etc/init.d/halt and /etc/init.d/reboot
-
-
-
-
-
-!!10. Appendix C. - other setup files
-
-
-*10.1 linuxrc
-
-*10.2 loadlin -- linux.bat file - boot.par
-
-*10.3 linuxthreads Makefile.diff
-
-*10.4 raid1.conf
-
-*10.5 raid5.conf
-
-*10.6 raidboot.conf
-
-*10.7 rc.raidown
-
-
-
-
-
-!!11. Appendix D. - obsolete linuxrc and shutdown scripts
-
-
-*11.1 Obsolete working - linuxrc
-
-*11.2 Obsolete working - shutdown scripts
-
-
-
-
-
-!!12. Appendix E. - Gadi's raid stop patch for the linux kernel
-
-
-
-
-!!13. Appendix F. - rc.raidown
-
-
-
-
-!!14. Appendix G. - linuxrc theory of operation
-
-
-
-
-!!15. Appendix H. Setting up ROOT RAID on !RedHat
-----
-
-!!1. Introduction
-
-
-The reader is assumed to be familiar with the various types of raid
-implementations, their advantages and drawbacks. This is not a tutorial,
-just a set of instructions on how to implement root mounted raid on a linux
-system. All
-of the information necessary to become familiar with linux raid is listed
-here directly or by reference, please read it before send e-mail questions.
-
-
-
-
-!!1.1 Where to get Up-to-date copies of this document.
-
-
-
-Click here to browse the
-author's latest version of
-this document. Corrections and suggestions welcome!
-
-
-Root-RAID-HOWTO -- OBSOLETE
-
-
-Available in LaTeX (for DVI and !PostScript), plain text, and HTML.
-
-http://www.linuxdoc.org/HOWTO/Root-RAID-HOWTO.html
-Available in SGML and HTML.
-
-ftp.bizsystems.net/pub/raid/
-
-
-
-
-!!1.2 More up-to-date Boot Root Raid with LILO howto
-
-
-
-Available in LaTeX (for DVI and !PostScript), plain text, and HTML.
-
-http://www.linuxdoc.org/HOWTO/Boot+Root+Raid+LILO.html
-Available in SGML and HTML.
-
-ftp.bizsystems.net/pub/raid/
-
-
-
-
-
-
-
-!!1.3 Bugs
-
-
-
-As of this writing, the problem of stopping a root mounted RAID device has
-not yet been solved in a satisfactory way. A work-around proposed by Ed
-Welbon and implemented by Bohumil Chalupa is incorporated into this document
-which eliminates the need for a long ckraid at each boot for raid1 and raid5
-devices. Without the workaround, it is necessary to __ckraid__ the __md__ device
-each time the system is re-booted. On a large array this can cause a severe
-availability performance degradation. On my 6 gig RAID1 device running on a
-Pentium 166 with 128 megs of ram, it takes well over half an hour to ckraid
-:-(
-after each re-boot. It takes over an hour on my 13 gig RAID5 array with a
-20mb/sec scsi adaptor.
-
-
-The workaround stores the status of the array at
-shutdown on the __real__ boot device and compares it to a reference status
-placed there when the system is first built. If the status's match at
-reboot, the superblock on the array is rebuilt on the next boot, otherwise
-the operator is notified of the status error and the rescue system is left
-running with all the raid tools available.
-
-
-Rebuilding the superblock causes
-the system to ignore that the array was powered down without mdstop by
-marking all the drives as __OK__, as if nothing happened. This only works if
-all the drives are OK at shutdown. If the array was operating with a bad
-drive, the operator must remove the bad drive prior to restarting the md
-device or the data can be corrupted.
-
-
-None of this applies to raid0 which
-does not have to be mdstopped before shutdown.
-
-
-Final proposed solutions to this problem include a __finalrd__ similar to
-__initrd__, and __mdrootstop__ which writes the __clean__ flags to the array
-during shutdown when it is mounted read only. I am sure there are others.
-
-
-In the mean time, the problem has been by-passed for now
-Please let me know when this problem is solved more cleanly!!!
-
-
-
-
-!!1.4 Acknowledgements
-
-
-
-The writings and e-mail from the following individuals helped to make this
-document possible. Many of the ideas were ''stolen'' from the helpful work of
-others, I have just tried to put it all in __COOKBOOK__ form so that it is
-straightforward to use. My thanks to:
-
-
-*
-Linas Vepstas
-'' for the RAID howto that explained most of this to me.''
-*
-
-*
-Gadi Oxman
-'' for answering my dumb 'newbie' questions.''
-*
-
-*
-Ed Welbon
-'' for the execellent __initrd.md__ package that inspired me to write this.''
-*
-
-*
-Bohumil Chalupa '' for implementing the
-re-boot 'workaround' that allows'' __root-mounted-raid__'' to
-work in a production environment.''
-*
-
-*
-Keith W. '' for
-his explaination of setting up root raid with ''__ !RedHat__.
-
-
-
-
-*
-
-*and many others who contributed to this work in one way or another.
-*
-
-
-
-
-
-!!1.5 Copyright Notice
-
-
-
-This document is GNU copyleft by Michael Robinton
-michael@bzs.org.
-
-
-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 and /dev/loopx
-
-I used
-linux-2..33
-from sunsite
-
-
-*
-
-*
-raid145-971022-2..31
-patch adds support for raid1/4/5
-*
-
-*
-raidtools-pre3-.42
-tools to create and maintain
-raid devices (documentation too).
-*
-
-*
-Gadi's raid stop patch in Appendix E.
-*
-
-*
-linuxthreads-.71
-required threads package. Use ftp, browser doesn't work
-ftp.inria.fr/INRIA/Projects/cristal/Xavier.Leroy
-*
-
-*A Linux distribution, ready to install.
-
-I used
-Slackware-3.4
-
-*
-
-Helpful but not required
-
-
-*
-raidboot-.01.tar.gz
-pre-built raid rescue/boot system.
-*
-
-
-
-The detailed instructions in this document are based on the above packages.
-If the packages have been updated or you use a different linux distribution,
-you may have to modify the procedures you find here.
-
-
-The patches, tool assortment, etc... may vary with 2.1 kernels.
-Please check the most recent documentation at:
-
-
-
-
-ftp.kernel.org/pub/linux/daemons/raid/
-
-
-
-
-!!2.2 Other similar implementations.
-
-
-
-I chose to include in the kernel all of the pieces necessary
-to run from boot without loading any modules. My kernel image is
-a little over 300k compressed.
-
-
-Take a look at
-Ed Welbon's
-__initrd.md.tar.gz__ for another
-way to make a bootable raid device. He uses loadable modules.
-A look at his concise scripts will show you how it is done
-if you need a very small kernel with modules.
-
-
-
-
-http://www.realtime.net/~welbon/initrd.md.tar.gz
-
-
-
-
-!!2.3 Documentation -- Recommended Reading
-
-
-
-__Please read:__
-
-__/usr/src/linux/Documentation/initrd.txt__
-
-
-
-
-
-
-as well as the documentation and man pages that accompany
-the raidtools set. In particular, read __man mdadd__ as well as the
-__!QuickStart.RAID__ document included in the raidtools package.
-
-
-
-
-
-You may also wish to review:
-
-
-*
-!BootPrompt-HOWTO
-*
-
-*__man lilo__
-*
-
-*__man lilo.conf__
-*
-
-
-
-
-
-!!2.4 RAID resources
-
-
-
-
-
-
-*
-www.linas.org/linux/Software-RAID/Software-RAID.html
-*
-
-*
-www.ssc.com/lg/issue17/raid.html
-*
-
-*
-linas.org/linux/raid.html
-*
-
-*
-ftp.kernel.org/pub/linux/daemons/raid/
-*
-
-*
-www.realtime.net/~welbon/initrd.md.tar.gz
-*
-
-*
-luthien.nuclecu.unam.mx/~miguel/raid/
-*
-
-Mailing lists can be joined at:
-
-
-*
-majordomo@nuclecu.unam.mx'' send a message to''
-__subscribe raiddev__
-
-send mail to:
-raiddev@nuclecu.unam.mx
-*
-
-*
-majordomo@vger.rutgers.edu'' send a message to''
-__subscribe linux-raid__
-
-send mail to:
-linux-raid@vger.rutgers.edu
-''(this seems to be the most active list)''
-
-*
-
-
-
-
-----
-
-!!3. Quick Start for ROOT RAID
-
-
-If you use __!RedHat__, see the
-Howto set up !RedHat
-section in Appendix H. I have not tried this. If you use it successfully,
-please let me know so I can update this document.
-
-
-If you don't want to try and build and debug the rescue system, you can get
-a generic one created from Slackware-3.4 from:
-
-ftp.bizsystems.com/pub/raid/raidboot-.01.tar.gz
-Perform the following steps:
-
-
-*Compile the raid enabled kernel with
-built in support for your disk subsystem
-*
-
-*Test that the raid array will configure and mount correctly
-*
-
-*Build your OS on the raid system
-*
-
-*Correct the entries in __fstab__ to show __/dev/md0__ as the
-root device. Make sure that the partition(s) you use for booting are included in
-__fstab__.
-*
-
-*Modify your shutdown halt and reboot script(s) (mine is /etc/rc.d/rc.6) as shown in
-Modifying the rc-scripts for SHUTDOWN
-*
-
-*Copy the following from you development filesystem
-to the rescue system AND the new raid system
-
-cd /root/raidboot
-mkdir mnt
-gzip -d rescue.clean
-losetup /dev/loop0 rescue.clean
-mount /dev/loop0 mnt
-copy these files
-cp -p /etc/* mnt/etc
-cp -p /etc/rc.d/* mnt/etc/rc.d
-{or as appropriate for your system}
-cp -a /lib/modules/* mnt/lib/modules
-
-Some Linux distributions include a test for the __ro/rw__ status of the
-root file system. The __rc startup__ files need to
-have this test removed for the initrd rescue system. See the instructions in
-the section on
-Correctons for Rescue System.
-*
-
-Correct the entries in __fstab__ to show __/dev/md0__ as the root
-device. Make sure that the partition(s) you use for booting is included in
-__fstab__.
-
-
-
-
-Create __/etc/raidboot.conf__ which describes the raid boot
-configuration. This file may __NOT__ contain comments in the first three
-lines, after that it doesn't matter.
-
-
-raidboot.conf
-
-/dev/sda1 /dev/sda2
-raidboot
-raid5.conf
-# comments may only be placed 'after' the three
-# configuration lines.
-#
-# This is '/etc/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
-
-A few more things to do and the raid systems is ready to boot.
-
-
-Create
-rc.raidown, as described in Appendix F,
-and copy it to /etc/rc.d on the rescue, development, and raid system.
-Unmount the rescue system and zip it.
-
-umount mnt
-losetup -d /dev/loop0
-mv rescue.clean rescue
-gzip rescue
-
-Copy the rescue file to the raidboot partitions.
-
-cp rescue.gz /mnt_point(1)/raidboot
-cp rescue.gz /mnt_point(2)/raidboot
-
-Activate the raid array.
-
-mdadd -ar
-
-Save the __good__ reference status to the raidboot partition
-
-cat /proc/mdstat | grep md0 > /mnt_point(1)/raidboot/raidgood.ref
-cat /proc/mdstat | grep md0 > /mnt_point(1)/raidboot/raidgood.ref
-
-Lastly, configure the boot program as outlined in
-Boot Time Configuration Parameters and reboot your system onto the
-raid array.
-
-
-
-
-
-
-
-
-
-----
-
-!!4. ''initrd'' Cookbook for root mounted RAID
-
-
-This is the procedure to make an 'initrd' ramdisk with rescue tools for raid.
-
-
-Specifically, this document referrs to RAID1 and RAID5 implementations.
-
-!!4.1 Security Reminder
-
-
-
-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!!!
-
-
-
-
-!!4.2 Build the Kernel and Raid Tools
-
-
-
-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.
-
-
-
-
-!!4.3 Build the ''initrd'' Rescue and Boot filesystem
-
-
-
-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.
-
-
-
-
-!!4.4 Start the STEP by STEP instructions
-
-
-
-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
-
-
-!!4.5 Install the distribution - Slackware Specific
-
-
-
-
-...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..30 no SCSI (YOU NEED 1 KERNEL) x x
-x x [[ ] scsi Linux 2..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..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.
-
-
-
-
-!! 4.6 Install linux __pthreads__
-
-
-
-Now you must install the 'linuxthreads-.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-.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
-
-
-
-
-
-!!4.7 Install Raid Tools
-
-
-
-The next step is the installation of the raid tools.
-raidtools-.42
-
-
-You must run the "configure" script to point the Makefile
-at the build directory for the ramdisk files
-
-cd /usr/src/raidtools-.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
-
-
-
-
-
-!!4.8 Remove un-needed directories and files from new filesystem.
-
-
-
-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
-
-
-
-
-
-!!4.9 Create /dev/md''x''
-
-
-
-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
-
-
-!!4.10 Create a bare filesystem suitable for ''initrd''
-
-
-
-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!
-
-
-
-
-!!4.11 Making 'initrd' boot the RAID device - linuxrc
-
-
-
-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
-
-
-
-
-
-!! 4.12 Modifying the rc-scripts for SHUTDOWN
-
-
-
-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.
-
-
-
-
-!! 4.13 Configuring RAIDBOOT - raidboot.conf
-
-
-
-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
-
-
-
-
-
-!!4.14 Kernel 'loadlin and lilo' variables for RESCUE and RAID
-
-
-
-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.
-
-
-
-----
-
-!!5. Configuring the Production RAID system.
-
-
-
-
-!!5.1 System specs.
-Two systems with identical motherboards were configured.
-
-
-
-
-Raid-1 Raid-5
-Motherboard: Iwill P55TU dual ide adaptec scsi
-Processor: Intel P200
-Disks: 2ea 7 gig 4 ea Segate 4.2 gig
-Maxtors wide scsii
-
-The disk drives are designated by linux as 'sda' through 'sdd' on the raid5
-system and 'hda' and 'hdc' on the raid1 system.
-
-
-
-
-!!5.2 Partitioning the hard drives.
-
-
-
-Since testing a large root mountable RAID array is difficult because
-of the ckraid re-boot problem, I re-partitioned my swap space to include a
-smaller RAID partition for testing purposes, sda6,sdb6,sdc6,sdd6, and
-a small root and /usr/src partition pair for developing and testing
-the raid kernel and tools.
-You may find this helpful.
-
-<bf/DEVELOPMENT SYSTEM - RAID5/
-Device System Size Purpose
-/dev/sda1 dos boot 16 meg boot partition
-* /dev/sda2 extended 130 meg (see below)
-/dev/sda3 linux native 4 gig primary raid5-1
-----------------------sda2------------------------------
-* /dev/sda5 linux swap 113 meg SWAP space
-* /dev/sda6 linux native 16 meg test raid5-1
-========================================================
-/dev/sdb1 dos boot 16 meg boot partition duplicate
-* /dev/sdb2 extended 130 meg (see below)
-/dev/sdb3 linux native 4 gig primary raid5-2
-----------------------sdb2------------------------------
-* /dev/sdb5 linux swap 113 meg SWAP space
-* /dev/sdb6 linux native 16 meg test raid5-2
-========================================================
-* /dev/sdc2 extended 146 meg (see below)
-/dev/sdc3 linux native 4 gig primary raid5-3
-----------------------sdc2------------------------------
-* /dev/sdc5 linux swap 130 meg development root partition
-* /dev/sdc6 linux native 16 meg test raid5-3
-========================================================
-* /dev/sdd2 extended 146 meg (see below)
-/dev/sdd3 linux native 4 gig primary raid5-4
-----------------------sdd2------------------------------
-* /dev/sdd5 linux swap 130 meg development /usr/src
-* /dev/sdd6 linux native 16 meg test raid5-4
-<bf/DEVELOPMENT SYSTEM - RAID1/
-Device System Size Purpose
-/dev/hda1 dos 16meg boot partition
-* /dev/hda2 extended 126m (see below)
-/dev/hda3 linux 126m development root partition
-/dev/hda4 linux 6+gig raid1-1
-----------------------hda2------------------------------
-* /dev/hda5 linux 26m test raid1-1
-* /dev/hda6 linux swap 100m
-========================================================
-/dev/hdc1 is simply an exact copy of hda1 so the
-partion can be made active if hda fails
-* /dev/hdc2 extended 126m (see below)
-/dev/hdc3 linux 126m development /usr/src
-/dev/hdc4 linux 6+gig raid1-2
-----------------------hdc2------------------------------
-* /dev/hdc5 linux 26m test raid1-2
-* /dev/hdc6 linux swap 100m
-
-The sdx2 and hdx3 partitions were switched to 'swap' after developing
-this utility. I could have done it on another machine, however,
-the libraries and kernels are all about a year or more out of date
-on my other linux boxes and I preferred to build it on the target machine.
-
-
-The partitioning scheme was chosen so that in the event that
-any one of the drives fails catastrophically, the system will
-continue to run and be bootable with minimum effort and NO data loss.
-
-
-* If any single hard drive fails, the boot will abort, and
-the rescue system will run. Examination of the screen
-message or /dos''x''/raidboot/raidstat.ro will tell the operator
-the status of the failed array.
-*
-
-* If sda1 (raid5) or hda1 (raid1) fails, the dos backup boot partition
-must be made 'active' and the bios must recognize the new partition
-as the boot device or it must be physically be moved to the ''x''da position.
-Alternatively, the system could be booted from a floppy disk using
-the initrd image on the remaining backup boot drive.
-The raid system can then be made active again by issuing:
-
-"/sbin/mkraid /etc/raid<it/x/.conf -f --only-superblock"
-
-to rebuild the remaining superblock(s).
-
-*
-
-* Once this is done, then
-
-mdadd -ar
-
-
-*
-
-* Examine the status of the array to verify that everything is OK
-then replace the good array reference with the current status
-until the failed disk can be repaired or replaced.
-
-cat /proc/mdstat | grep md0 > /dosx/raidboot/raidgood.ref
-shutdown -r now
-
-to do a clean reboot, and the system is up again.
-*
-
-----
-
-!!6. Building the RAID file system.
-
-
-This description is for my RAID systems described in the system
-specs. Your system may have a different RAID architecture, so
-modify as appropriate. Please read the man pages and
-!QuickStart.RAID that come with the raidtools-.42
-
-!! 6.1 /etc/raid5.conf
-
-
-
-
-
-# raid-5 configuration
-raiddev /dev/md0
-raid-level 5
-nr-raid-disks 4
-chunk-size 32
-# Parity placement algorithm
-parity-algorithm left-symmetric
-# Spare disks for hot reconstruction
-#nr-spare-disks
-device /dev/sda3
-raid-disk
-device /dev/sdb3
-raid-disk 1
-device /dev/sdc3
-raid-disk 2
-device /dev/sdd3
-raid-disk 3
-
-
-!! 6.2 /etc/raid1.conf
-
-
-
-
-
-# raid-1 configuration
-raiddev /dev/md0
-raid-level 1
-nr-raid-disks 2
-nr-spare-disks
-device /dev/hda4
-raid-disk
-device /dev/hdc4
-raid-disk 1
-
-
-!!6.3 Step by Step procedures for building production RAID file system.
-
-
-
-For my RAID5 system I did a complete install of:
-
-Slackware-3.4 any current distribution should work OK
-linuxthreads-.71
-raidtools-.42
-linux-2..33 with raid145 patch and Gadi's patch
-
-
-
-Create and format the raid device.
-
-mkraid /etc/raid5.conf
-mdcreate raid5 /dev/md0 /dev/sda3 /dev/sdb3 /dev/sdc3 /dev/sdd3
-mdadd -ar
-mke2fs /dev/md0
-mkdir /md
-mount -t ext2 /dev/md0 /md
-
-Create the reference files that reboot will use,
-this may be different on your system.
-
-cat /proc/mdstat | grep md0 > /dosa/raidboot/raidgood.ref
-cat /proc/mdstat | grep md0 > /dosb/raidboot/raidgood.ref
-
-Use Slackware-3.4 or another distribution to build your OS
-
-setup
-
-Specify '/md' as the target, and the source whatever your normally use.
-Select and install the disksets of interest except for the kernel.
-Configure the system, but skip the section on lilo and kernel booting.
-Exit setup.
-
-
-Install 'pthreads'
-
-cd /usr/src/linuxthreads-.71
-
-edit the Makefile and specify
-
-BUILDIR=/md
-make
-make install
-
-Install 'raidtools'
-
-cd /usr/src/raidtools-.42
-configure --sbindir=/md/sbin --prefix=/md/usr
-
-fix the raidtools make install error
-
-cd /md/sbin
-rm mdrun
-rm mdstop
-ln -s mdadd mdrun
-ln -s mdadd mdstop
-
-Create /dev/mdx
-
-cp -a /dev/md* /md/dev
-
-Add the system configuration from the current system (ignore errors).
-
-cp -dp /etc/* mnt/etc
-cp -dp /etc/rc.d/* mnt/etc/rc.d (include the new rc.6)
-mkdir mnt/lib/modules
-cp -a /lib/modules/2.x.x mnt/lib/modules <--- your current 2.x.x
-
-Edit the following files to correct them for your file system
-
-cd /md
-Non-network
-etc/fstab correct for real root and raid devices.
-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 isread-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
-root/.rhosts if present
-home/xxxx/xxxx others as required
-WARNING: The above procedure moves your password and shadow
-files onto the new file system!!!!!
-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. Mine need:
-
-cd /md <--- new file system root
-mkdir dosa dos partition mount point
-mkdir dosb dos mirror mount point
-
-The new file system is complete. Make sure and save the md reference
-status to the 'real' root device and you are ready to boot.
-
-
-mount the dos partitions on dosa and dosb
-
-cat /proc/mdstat | grep md0 > /dosa/raidboot/raidgood.ref
-cat /proc/mdstat | grep md0 > /dosb/raidboot/raidgood.ref
-mdstop /dev/md0
-
-
-
-
-----
-
-!!7. One last thought.
-
-
-Remember that an expert is someone who knows at least 1% more
-than you do about a subject. Bear this in mind when you e-mail
-me for help. I'll try, but I've only done this once for raid1 and once for
-raid5!
-
-
-Michael Robinton
-Michael@bzs.org
-
-
-----
-
-!! 8. Appendix A. - Bohumil Chalupa's md0 shutdown
-
-
-Bohumil Chalupa's post to the linux raid list on the work
-around for the raid1 + 5 mdstop problem. His solution does not
-address the possibility of the raid device being corrupt at shutdown.
-So I have added a simple status comparison to a good reference
-status at boot. This allows the operator to intervene if something
-is wrong with a disk in the array. The description of this is in the
-main body of this document.
-
-> From: Bohumil Chalupa <bochal@apollo.karlov.mff.cuni.cz>
->
-> I can now boot initrd and use linuxrc to start the RAID1 array,
-> then successfully switch root to /dev/md0.
->
-> I don't know, however, any way how to cleanly _stop_ the array.
-Well. I have to answer myself :-)
-> Date: Mon, 29 Dec 1997 02:21:38 -0600 (CST)
-> From: Edward Welbon <welbon@bga.com>
-> Subject: Re: dismounting root raid device
->
-> For md devices other than raid0, there is probably state that needs to
-> be saved that is only known once all writes have completed. Such state
-> of course can't be saved to root once it is mounted readonly. In that
-> case, you would have to be able to mount a writeable filesystem "X"
-> on the readonly root and be able to write to "X" (I recall doing this
-> during "rescue" operations, but not as an automated procedure).
->
-> The filesystem "X" would presumably be a boot device from which the raid
-> (during linuxrc exection via initrd) would pickup it's initial state from.
-> Fortunately raid0 isn't required to write out any state (though it would
-> be pleasant to be able to write the check sums to mdtab after an mdstop).
-> Eventually, I will fiddle with this but it doesn't seem difficult though
-> the "devil" is always in the "details".
-Yes, that's it.
-I had this idea in mind for some time already, but had no time to try it.
-Yesterday I did, and it works.
-With my RAID1 (mirror), I don't save any checksums or raid superblock data.
-I only save an information on the "real" boot partition, that the root md
-volume was remounted readonly during shutdown. Then, during boot, the
-linuxrc script runs mkraid --only-superblock when it finds this
-information; otherwise, it runs ckraid.
-This means, that the raid superblock information is not updated during
-shutdown; it's updated at the boot time.
-It is not very clean, I'm afraid, :-( but it works.
-I'm using Slackware and initrd.md by Edward Welbon to boot the root raid
-device.
-As far as I remember now, the only modified files are
-mkdisk and linuxrc, and /etc/rc.d/rc.6 shutdown script.
-And lilo.conf, of course.
-I'm appending the important parts.
-Bohumil Chalupa
---------------- my.linuxrc follows -----------------
-#!/bin/sh
-# we need /proc
-/bin/mount /proc
-# start up the md0 device. let the /etc/rc.d scripts get the rest of them
-# we should do as little as possible here
-# ________________________________________
-# root raid1 shutdown test & recreation
-# /start must be created on the rd image in my.mkdisk
-echo "preparing md0: mounting /start"
-/bin/mount /dev/sda2 /start -t ext2
-echo "reading saved md0 state from /start"
-if [[ -f /start/root.raid.ok ]; then
-echo "raid ok, modyfying superblock"
-rm /start/root.raid.ok
-/sbin/mkraid /etc/raid1.conf -f --only-superblock
-else
-echo "raid not clean, runing ckraid --fix"
-/sbin/ckraid --fix /etc/raid1.conf
-fi
-echo "unmounting /start"
-/bin/umount /start
-# _________________________________________
-#
-echo "adding md0 for root file system"
-/sbin/mdadd /dev/md0 /dev/sda1 /dev/sdb1
-echo "starting md0"
-/sbin/mdrun -p1 /dev/md0
-# tell kernel we want to switch to /dev/md0 as root device, the 0x900 value
-# is arrived at via 256*major_device_number + minor_device number.
-echo "setting real-root-dev"
-/bin/echo 0x900>/proc/sys/kernel/real-root-dev
-# unmount /proc so that the ram disk can be deallocated.
-echo "unmounting /proc"
-/bin/umount /proc
-/bin/echo "We are hopefully ready to mount /dev/md0 (major 9, minor ) as
-root"
-exit
---------------- end of my.linuxrc ----------------------------------
------------ extract from /etc/rc.d/rc.6 follows -----------------
-# Turn off swap, then unmount local file systems.
-echo "Turning off swap."
-swapoff -a
-echo "Unmounting local file systems."
-umount -a -tnonfs
-# Don't remount UMSDOS root volumes:
-if [[ ! "`mount | head -1 | cut -d ' ' -f 5`" = "umsdos" ]; then
-mount -n -o remount,ro /
-fi
-# Save raid state
-echo "Saving RAID state"
-/bin/mount -n /dev/sda2 /start -t ext2
-touch /start/root.raid.ok
-/bin/umount -n /start
--------------- end of excerpt from rc.6 ------------------------
------------------- part of my.mkdisk follows ----------------------
-#
-# now we have the filesystem ready to be populated, we need to
-# get a few important directories. I had endless trouble till
-# I created a pristine mtab. In my case, it is convenient that
-# /etc/mdtab is copied over, this way I can activate md with
-# a simple "/sbin/mdadd -ar" in linuxrc.
-#
-cp -a $ROOT/etc $MOUNTPNT 2>cp.stderr 1>cp.stdout
-rm -rf $MOUNTPNT/etc/mtab
-rm -rf $MOUNTPNT/etc/ppp*
-rm -rf $MOUNTPNT/etc/termcap
-rm -rf $MOUNTPNT/etc/sendmail*
-rm -rf $MOUNTPNT/etc/rc.d
-rm -rf $MOUNTPNT/etc/dos*
-cp -a $ROOT/sbin $ROOT/dev $ROOT/lib $ROOT/bin $MOUNTPNT 2>>cp.stderr
-1>>cp.stdout
-# _____________________________________________________________________
-# RAID: will need mkraid and ckraid
-cp -a $ROOT/usr/sbin/mkraid $ROOT/usr/sbin/ckraid $MOUNTPNT/sbin
-2>>cp.stderr 1>>cp.stdout
-# ---------------------------------------------------------------------
-# it seems that init wont come out to play unless it has utmp. this can
-# probably be pruned back alot. no telling what the real bug was 8-).
-#
-mkdir $MOUNTPNT/var $MOUNTPNT/var/log $MOUNTPNT/var/run $MOUNTPNT/initrd
-touch $MOUNTPNT/var/run/utmp $MOUNTPNT/etc/mtab
-chmod a+r $MOUNTPNT/var/run/utmp $MOUNTPNT/etc/mtab
-ln -s /var/run/utmp $MOUNTPNT/var/log/utmp
-ln -s /var/log/utmp $MOUNTPNT/etc/utmp
-ls -lstrd $MOUNTPNT/etc/utmp $MOUNTPNT/var/log/utmp $MOUNTPNT/var/run/utmp
-#
-# since I wanted to change the mount point, I needed this though
-# I suppose that I could have done a "mkdir /proc" in linuxrc.
-#
-mkdir $MOUNTPNT/proc
-chmod 555 $MOUNTPNT/proc
-#
-# ------------------------------------------------------
-# we'll mount the real boot device to /start temporarily
-# to check the root raid state saved at shutdown time
-#
-mkdir $MOUNTPNT/start
-# -------------------------------------------------------
-#
-# need linuxrc (it is, after all, the point of this exercise).
-#
-if [[ -x ./my.linuxrc ]; then
-cp -a ./my.linuxrc $MOUNTPNT/linuxrc
-chmod 777 $MOUNTPNT/linuxrc
-else
-ln -s /bin/sh $MOUNTPNT/linuxrc
-fi
-#
------------------ part of my.mkdisk ends -----------------
-
-
-
-
-----
-
-!! 9. Appendix B. - Sample SHUTDOWN scripts
-
-
-
-
-
-*
-Slackware
-*
-
-*
-Debian
-*
-
-
-
-
-
-!! 9.1 Slackware - /etc/rc.d/rc.6
-
-
-
-
-
-#! /bin/sh
-#
-# rc.6 This file is executed by init when it goes into runlevel
-# 0 (halt) or runlevel 6 (reboot). It kills all processes,
-# unmounts file systems and then either halts or reboots.
-#
-# Version: @(#)/etc/rc.d/rc.6 1.50 1994-01-15
-#
-# Author: Miquel van Smoorenburg <miquels@drinkel.nl.mugnet.org>
-# Modified by: Patrick J. Volkerding, <volkerdi@ftp.cdrom.com>
-#
-# Modified by: Michael A. Robinton < michael@bizsystems.com >
-# to add call to rc.raidown
-# Set the path.
-PATH=/sbin:/etc:/bin:/usr/bin
-# Set linefeed mode to avoid staircase effect.
-stty onlcr
-echo "Running shutdown script $:"
-# Find out how we were called.
-case "$" in
-*)
-message="The system is halted."
-command="halt"
-;;
-*6)
-message="Rebooting."
-command=reboot
-;;
-*)
-echo "$: call me as \"rc.\" or \"rc.6\" please!"
-exit 1
-;;
-esac
-############ Save raid boot and status info ##############
-#
-if [[ -x /etc/rc.d/rc.raidown ]; then
-/etc/rc.d/rc.raidown
-fi
-################## end raid boot #########################
-# Kill all processes.
-# INIT is supposed to handle this entirely now, but this didn't always
-# work correctly without this second pass at killing off the processes.
-# Since INIT already notified the user that processes were being killed,
-# we'll avoid echoing this info this time around.
-if [[ "$1" != "fast" ]; then # shutdown did not already kill all processes
-killall5 -15
-killall5 -9
-fi
-# Try to turn off quota and accounting.
-if [[ -x /usr/sbin/quotaoff ]
-then
-echo "Turning off quota."
-/usr/sbin/quotaoff -a
-fi
-if [[ -x /sbin/accton ]
-then
-echo "Turning off accounting."
-/sbin/accton
-fi
-# Before unmounting file systems write a reboot or halt record to wtmp.
-$command -w
-# Save localtime
-[[ -e /usr/lib/zoneinfo/localtime ] && cp /usr/lib/zoneinfo/localtime /etc
-# Asynchronously unmount any remote filesystems:
-echo "Unmounting remote filesystems."
-umount -a -tnfs &
-# Turn off swap, then unmount local file systems.
-echo "Turning off swap."
-swapoff -a
-echo "Unmounting local file systems."
-umount -a -tnonfs
-# Don't remount UMSDOS root volumes:
-if [[ ! "`mount | head -1 | cut -d ' ' -f 5`" = "umsdos" ]; then
-mount -n -o remount,ro /
-fi
-################ 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
-##########################################################
-# See if this is a powerfail situation.
-if [[ -f /etc/powerstatus ]; then
-echo "Turning off UPS, bye."
-/sbin/powerd -q
-exit 1
-fi
-# Now halt or reboot.
-echo "$message"
-[[ ! -f /etc/fastboot ] && echo "On the next boot fsck will be FORCED."
-$command -f
-############### end rc.6 #################################
-
-
-
-
-
-!! 9.2 Debian bo - /etc/init.d/halt and /etc/init.d/reboot
-
-
-
-The modifications shown here for Debian bo halt and reboot files are NOT
-TESTED. When you test this, please e-mail me so I can remove this comment.
-
-
-
-
-!/etc/init.d/halt
-
-
-
-
-#! /bin/sh
-#
-# halt The commands in this script are executed as the last
-# step in runlevel , ie halt.
-#
-# Version: @(#)halt 1.10 26-Apr-1997 miquels@cistron.nl
-#
-PATH=/sbin:/bin:/usr/sbin:/usr/bin
-############ Save raid boot and status info ##############
-#
-if [[ -x /etc/rc.d/rc.raidown ]; then
-/etc/rc.d/rc.raidown
-fi
-################## end raid boot #########################
-# Kill all processes.
-echo -n "Sending all processes the TERM signal... "
-killall5 -15
-echo "done."
-sleep 5
-echo -n "Sending all processes the KILL signal... "
-killall5 -9
-echo "done."
-# Write a reboot record to /var/log/wtmp.
-halt -w
-# Save the random seed between reboots.
-/etc/init.d/urandom stop
-echo -n "Deactivating swap... "
-swapoff -a
-echo "done."
-echo -n "Unmounting file systems... "
-umount -a
-echo "done."
-mount -n -o remount,ro /
-################ 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
-##########################################################
-# See if we need to cut the power.
-if [[ -x /etc/init.d/ups-monitor ]
-then
-/etc/init.d/ups-monitor poweroff
-fi
-halt -d -f
-############# end halt ####################
-
-
-!/etc/init.d/reboot
-
-
-
-
-#! /bin/sh
-#
-# reboot The commands in this script are executed as the last
-# step in runlevel 6, ie reboot.
-#
-# Version: @(#)reboot 1.9 02-Feb-1997 miquels@cistron.nl
-#
-PATH=/sbin:/bin:/usr/sbin:/usr/bin
-############ Save raid boot and status info ##############
-#
-if [[ -x /etc/rc.d/rc.raidown ]; then
-/etc/rc.d/rc.raidown
-fi
-################## end raid boot #########################
-# Kill all processes.
-echo -n "Sending all processes the TERM signal... "
-killall5 -15
-echo "done."
-sleep 5
-echo -n "Sending all processes the KILL signal... "
-killall5 -9
-echo "done."
-# Write a reboot record to /var/log/wtmp.
-halt -w
-# Save the random seed between reboots.
-/etc/init.d/urandom stop
-echo -n "Deactivating swap... "
-swapoff -a
-echo "done."
-echo -n "Unmounting file systems... "
-umount -a
-echo "done."
-mount -n -o remount,ro /
-################ 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
-##########################################################
-echo -n "Rebooting... "
-reboot -d -f -i
-
-
-
-
-----
-
-!!10. Appendix C. - other setup files
-
-
-
-
-!!10.1 linuxrc
-linuxrc file
-
-
-
-
-!!10.2 loadlin -- linux.bat file - boot.par
-linux.bat file - boot.par
-
-
-
-
-!!10.3 linuxthreads Makefile.diff
-linuxthreads Makefile.diff
-
-
-
-
-!!10.4 raid1.conf
-raid1.conf
-
-
-
-
-!!10.5 raid5.conf
-raid5.conf
-
-
-
-
-!!10.6 raidboot.conf
-raidboot.conf
-
-
-
-
-!!10.7 rc.raidown
-rc.raidown
-----
-
-!! 11. Appendix D. - obsolete linuxrc and shutdown scripts
-
-
-
-
-!!11.1 Obsolete working - linuxrc
-
-
-
-This linuxrc file works fine with the shutdown procedure in the next
-subsection.
-
----------------------- linuxrc --------------------
-#!/bin/sh
-# ver 1.07 2-12-98
-# linuxrc - for raid1 using small dos partition and loadlin
-#
-# mount the proc file system
-/bin/mount /proc
-# This may vary for your system.
-# Mount the dos partitions, try both
-# in case one disk is dead
-/bin/mount /dosa
-/bin/mount /dosc
-# Set a flag in case the raid status file is not found
-# then check both drives for the status file
-RAIDOWN="raidstat.ro not found"
-/bin/echo "Reading md0 shutdown status."
-if [[ -f /dosa/raidboot/raidstat.ro ]; then
-RAIDOWN=`/bin/cat /dosa/raidboot/raidstat.ro`
-RAIDREF=`/bin/cat /dosc/raidboot/raidgood.ref`
-else
-if [[ -f /dosc/raidboot/raidstat.ro ]; then
-RAIDOWN=`/bin/cat /dosc/raidboot/raidstat.ro`
-RAIDREF=`/bin/cat /dosc/raidboot/raidgood.ref`
-fi
-fi
-# Test for a clean shutdown with all disks operational
-if [[ "${RAIDOWN} != ${RAIDREF}" ]; then
-echo "ERROR ${RAIDOWN}"
-# Use the next 2 lines to BAIL OUT and leave rescue running
-/bin/echo 0x100>/proc/sys/kernel/real-root-dev
-exit # leaving the error files in dosa/raidboot,etc...
-fi
-# The raid array is clean, proceed by removing
-# status file and writing a clean superblock
-/bin/rm /dosa/raidboot/raidstat.ro
-/bin/rm /dosc/raidboot/raidstat.ro
-/sbin/mkraid /etc/raid1.conf -f --only-superblock
-/bin/umount /dosa
-/bin/umount /dosc
-# Mount raid array
-echo "Mounting md0, root filesystem"
-/sbin/mdadd -ar
-# If there are errors - BAIL OUT and leave rescue running
-if [[ $? -ne 0 ]; then
-echo "RAID device has errors"
-# Use the next 3 lines to BAIL OUT
-/bin/rm /etc/mtab # remove bad mtab
-/bin/echo 0x100>/proc/sys/kernel/real-root-dev
-exit
-fi
-# else tell the kernel to switch to /dev/md0 as the /root device
-# The 0x900 value the device number calculated by:
-# 256*major_device_number + minor_device number
-/bin/echo 0x900>/proc/sys/kernel/real-root-dev
-# umount /proc to deallocate initrd device ram space
-/bin/umount /proc
-/bin/echo "/dev/md0 mounted as root"
-exit
-#------------------ end linuxrc ----------------------
-
-
-
-
-
-!!11.2 Obsolete working - shutdown scripts
-
-
-
-This shutdown procedure works fine with the preceeding __linuxrc__
-
-
-To capture the raid array shutdown status,
-just before the file systems are dismounted insert:
-
-RAIDSTATUS=`/bin/cat /proc/mdstat | /usr/bin/grep md0`
-
-After all the file systems are dismounted (the root file system
-'will not' dismount) add:
-
-# root device remains mounted RO
-# mount dos file systems RW
-mount -n -o remount,ro /
-echo "Writing RAID read-only boot FLAG(s)."
-mount -n /dosa
-mount -n /dosc
-# create raid mounted RO flag in duplicate
-# containing the shutdown status of the raid array
-echo ${RAIDSTATUS} > /dosa/raidboot/raidstat.ro
-echo ${RAIDSTATUS} > /dosc/raidboot/raidstat.ro
-umount -n /dosa
-umount -n /dosc
-# Stop all the raid arrays (except root)
-echo "Stopping raid"
-mdstop -a
-
-This will cleanly stop all raid devices except root. Root status
-is passed to the next boot in __raidstat.ro__.
-
-
-The complete shutdown script from my old raid1 Slackware system follows, I
-have switched raid1 to the new procedure with the /etc/raidboot.conf file.
-
-#! /bin/sh
-#
-# rc.6 This file is executed by init when it goes into runlevel
-# 0 (halt) or runlevel 6 (reboot). It kills all processes,
-# unmounts file systems and then either halts or reboots.
-#
-# Version: @(#)/etc/rc.d/rc.6 1.50 1994-01-15
-#
-# Author: Miquel van Smoorenburg <miquels@drinkel.nl.mugnet.org>
-# Modified by: Patrick J. Volkerding, <volkerdi@ftp.cdrom.com>
-# Modified by: Michael A. Robinton, <michael@bzs.org> for RAID shutdown
-# Set the path.
-PATH=/sbin:/etc:/bin:/usr/bin
-# Set linefeed mode to avoid staircase effect.
-stty onlcr
-echo "Running shutdown script $:"
-# Find out how we were called.
-case "$" in
-*)
-message="The system is halted."
-command="halt"
-;;
-*6)
-message="Rebooting."
-command=reboot
-;;
-*)
-echo "$: call me as \"rc.\" or \"rc.6\" please!"
-exit 1
-;;
-esac
-# Kill all processes.
-# INIT is supposed to handle this entirely now, but this didn't always
-# work correctly without this second pass at killing off the processes.
-# Since INIT already notified the user that processes were being killed,
-# we'll avoid echoing this info this time around.
-if [[ "$1" != "fast" ]; then # shutdown did not already kill all processes
-killall5 -15
-killall5 -9
-fi
-# Try to turn off quota and accounting.
-if [[ -x /usr/sbin/quotaoff ]
-then
-echo "Turning off quota."
-/usr/sbin/quotaoff -a
-fi
-if [[ -x /sbin/accton ]
-then
-echo "Turning off accounting."
-/sbin/accton
-fi
-# Before unmounting file systems write a reboot or halt record to wtmp.
-$command -w
-# Save localtime
-[[ -e /usr/lib/zoneinfo/localtime ] && cp /usr/lib/zoneinfo/localtime /etc
-# Asynchronously unmount any remote filesystems:
-echo "Unmounting remote filesystems."
-umount -a -tnfs &
-# you must have issued
-# 'cat /proc/mdstat | grep md0 > {your boot vol}/raidboot/raidgood.ref'
-# before linuxrc will execute properly with this info
-RAIDSTATUS=`/bin/cat /proc/mdstat | /usr/bin/grep md0 # capture raid status`
-# Turn off swap, then unmount local file systems.
-# clearing mdtab as well
-echo "Turning off swap."
-swapoff -a
-echo "Unmounting local file systems."
-umount -a -tnonfs
-# Don't remount UMSDOS root volumes:
-if [[ ! "`mount | head -1 | cut -d ' ' -f 5`" = "umsdos" ]; then
-mount -n -o remount,ro /
-fi
-# root device remains mounted
-# mount dos file systems RW
-echo "Writing RAID read-only boot FLAG(s)."
-mount -n /dosa
-mount -n /dosc
-# create raid mounted RO flag in duplicate
-# containing the shutdown status of the raid array
-echo ${RAIDSTATUS} > /dosa/raidboot/raidstat.ro
-echo ${RAIDSTATUS} > /dosc/raidboot/raidstat.ro
-umount -n /dosa
-umount -n /dosc
-# Stop all the raid arrays (except root)
-echo "Stopping raid"
-mdstop -a
-# See if this is a powerfail situation.
-if [[ -f /etc/power_is_failing ]; then
-echo "Turning off UPS, bye."
-/sbin/powerd -q
-exit 1
-fi
-# Now halt or reboot.
-echo "$message"
-[[ ! -f /etc/fastboot ] && echo "On the next boot fsck will be FORCED."
-$command -f
-
-
-
-
-
-
-
-----
-
-!! 12. Appendix E. - Gadi's raid stop patch for the linux kernel
-
-
-
-
---- linux/drivers/block/md.c.old Fri Nov 21 13:37:11 1997
-+++ linux/drivers/block/md.c Sat Dec 6 13:34:28 1997
-@@ -622,8 +622,13 @@
-return do_md_run (minor, (int) arg);
-case STOP_MD:
-- return do_md_stop (minor, inode);
--
-+ err = do_md_stop(minor, inode);
-+ if (err) {
-+ printk("md: enabling auto mdstop for %s\n",
-devname(inode->i_rdev));
-+ md_dev[[minor].auto_mdstop = 1;
-+ }
-+ return err;
-+
-case BLKGETSIZE: /* Return device size */
-if (!arg) return -EINVAL;
-err=verify_area (VERIFY_WRITE, (long *) arg, sizeof(long));
-@@ -692,6 +697,10 @@
-sync_dev (inode->i_rdev);
-md_dev[[minor].busy--;
-+ if (!md_dev[[minor].busy && md_dev[[minor].auto_mdstop) {
-+ do_md_stop(minor, inode);
-+ md_dev[[minor].auto_mdstop = ;
-+ }
-}
-static int md_read (struct inode *inode, struct file *file,
---- linux/include/linux/md.h~ Fri Nov 21 13:29:14 1997
-+++ linux/include/linux/md.h Fri Nov 21 13:29:14 1997
-@@ -260,6 +260,7 @@
-int repartition;
-int busy;
-int nb_dev;
-+ int auto_mdstop;
-void *private;
-};
-
-----
-
-!! 13. Appendix F. - rc.raidown
-
-
-Copy the following text into the script file __rc.raidown__ and save it in
-__/etc/rc.d__.
-
-#! /bin/sh
-#
-# rc.raidown This file is executed by init when it goes into runlevel
-# 0 (halt) or runlevel 6 (reboot). It saves the status of
-# a root mounted raid array for subsequent re-boot
-#
-# Version: 1.08 3-25-98 Michael A. Robinton < michael@bizsystems.com >
-#
-############ Save raid boot and status info ##############
-if [[ -f /etc/raidboot.conf ]
-then
-{
-read !RaidBootDevs
-read !RaidStatusPath
-read !RaidConfigEtc
-} < /etc/raidboot.conf
-# you must have issued
-# cat /proc/mdstat | grep md0 >
-# {your boot vol mnt(s)}/{!RaidStatusPath}/raidgood.ref
-# before linuxrc will execute properly with this info
-#
-# capture raid status
-RAIDSTATUS=`/bin/cat /proc/mdstat | /usr/bin/grep md0`
-mkdir /tmp/raid$$
-echo "Writing RAID read-only boot FLAG(s)."
-for Device in ${!RaidBootDevs}
-do
-# get mount point for raid boot device or use tmp
-RBmount=$( cat /proc/mounts | /usr/bin/grep ${Device} )
-if [[ -n ${RBmounts} ]; then
-RBmount=$( echo ${RBmount} | cut -f 2 -d ' ' )
-else
-RBmount="/tmp/raid$$"
-mount ${Device} ${RBmount}
-fi
-if [[ -d ${RBmount}/${!RaidStatusPath} ]; then
-# Create raid mounted RO flag = shutdown status of raid array
-echo ${RAIDSTATUS} > ${RBmount}/${!RaidStatusPath}/raidboot.ro
-# Don't propagate 'fstab' from ramdisk
-if [[ -f /linuxrc ]; then
-FSTAB=
-else
-FSTAB=fstab
-fi
-pushd /etc
-# Save etc files for rescue system
-/bin/tar --ignore-failed-read \
--cf ${RBmount}/${!RaidStatusPath}/raidboot.etc \
-raid*.conf mdtab* ${FSTAB} lilo.conf
-popd
-# Create new raidboot.cfg
-{
-/bin/echo ${!RaidBootDevs}
-/bin/echo ${!RaidStatusPath}
-/bin/echo ${!RaidConfigEtc}
-} > ${RBmount}/${!RaidStatusPath}/raidboot.cfg
-/bin/umount ${RBmount}
-fi
-done
-rmdir /tmp/raid$$
-echo "Raid boot armed"
-fi
-################## end raid boot #########################
-
-----
-
-!! 14. Appendix G. - linuxrc theory of operation
-
-
-This is the complex form of the linuxrc file for root mounted raid.
-It must be processed with 'bash' or another shell that recognizes
-shell functions.
-
-
-The advantage is that it is generic and is not dependent on startup
-files and parameters located in the __initrd__ image.
-
-
-A __Raid_Conf__ parameter passed to __linuxrc__ by the kernel at boot
-from lilo or loadlin contains a pointer to the boot devices and
-location the of
-initial 2 raidboot files needed by __linuxrc__ (''raidboot.etc and
-raidboot.cfg placed by the shutdown script'').
-
-__raidboot.etc__ containing the 'tar'ed files:
-
-raid*
-mdtab*
-fstab
-lilo.conf ( if applicable )
-
-from the primary system that are transferred to the
-initrd __/etc__etc directory at startup. With care, this file may
-be edited if necessary when your system 'really' crashes.
-
-
-__raidboot.cfg__ contains the name of the boot partition in use
-and applicable backup(s) as well as the path to the rest of
-the raid start up file used by __linuxrc__.
-This file is normally created by the shutdown file
-and may be created manually if necessary.
-
-
-__raidboot.cfg__ is of the form, 3 lines - no comments
-
-/dev/bootdev1 /dev/bootdev2 [[/dev/bootdev3 ... and so on]
-raid-status/path
-name_of_raidX.conf_file
-
-
-the __raid-status/path__ does not include the name of the mountpoint
-
-
-the __raidX.conf__ filename is that one found in /etc
-and normally used for __ckraid__ and __mkraid__.
-
-
-The following additional files reside on the permanent raid boot partitions.
-This is usually the same as above, but in emergency situations
-may be loaded from anywhere they are available, such as a floppy boot disk.
-
-
-*__raidgood.ref__ created by the command
-cat /proc/mdstat | grep md0 > /{raid_status_path}/raidgood.ref
-
-
-
-See the
-shutdown scripts
-for saving this file and the next
-
-
-
-
-*
-
-*__raidstat.ro__ created at each shutdown by the shutdown rc file,
-saving the exit status of the raid array.
-*
-
-
-
-
-----
-
-!! 15. Appendix H. Setting up ROOT RAID on !RedHat
-
-
-From the
-linux-raid@vger.rutgers.edu mail list.
-
-
-
-
-! Has anyone figured out how to do root-mounted RAID (as per
-! the Root-RAID HOWTO) using !RedHat? The problem is that there
-! is no equivalent of Slackware's setup to install the root
-! filesystem to the RAID device. All !RedHat installs have to
-! run from the install floppy, which makes it almost
-! impossible to get at the md devices and utilities during the
-! install.
-!
-! I think it's much easier to go out of the distribution and do it by
-! hand!!
-Assuming you have enough RAM (or a spare hard disk), install a minimal
-system onto what will be your swap space (or onto your spare hard disk)
-and/or /boot. Now do your mkraid, your mke2fs, mdrun, and mount. Next, do:
-tar clf - / | tar xpfC - /mnt/raidwasmountedhere
-(you may want a "v" in the second tar's flags)
-Once this is done, you can set up lilo (or whatever) so that the new
-raid partition is root. Then go in with RPM and/or glint (I hate
-glint's behavior in the face of failed dependencies, which was fixed
-but they broke it again for RH5.0 plus you can go back and forth
-forever between an old and a new version of a package without
-realizing the other version is installed) and install what you
-really wanted.
-All this assuming you couldn't sneak in at some point in the install
-and do your mkraid then at the VC with the shell prompt...
-! I'm building a server at the moment and I think it would be tidier
-! and less likely to cause problems in the future if I start with
-! glibc2, rather than move to it later.
-!
-! Me too.
-!
-! The reason I'd like to be able to use !RedHat is that they
-! are the only major distribution that I know of with a
-! glibc2-based release.
-!
-! Debian works fine with me. There isn't a CD yet, but you can grab the
-! distribution by ftp.
-I avoided root-raid like the plague, largely because initrd is an
-extra, very fragile step (having to rdev, and having lilo depend on
-the bios' ID number to find the kernel's partition, are bad enough!).
-However, Red Hat does have a nice mkinitrd script, needed since they
-left all their SCSI drivers modular. Hack that to include your
-raid utils, make sure your mdadd -ar is in the right spot in
-/etc/rc.d/rc.sysinit (before any fscking) and make sure mdstop -a is
-in /etc/rc.d/init.d/halt after the RO-remount of /, and go for it!
-
-
-Keith
-kwrohrer@enteract
.com
-----
+Describe
[HowToRootRAIDHOWTO
] here.