<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> <HTML> <HEAD> <META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.9"> <TITLE>Root RAID HOWTO cookbook: Appendice D. - script linuxrc e shutdown obsoleti </TITLE> <LINK HREF="Root-RAID-HOWTO-12.html" REL=next> <LINK HREF="Root-RAID-HOWTO-10.html" REL=previous> <LINK HREF="Root-RAID-HOWTO.html#toc11" REL=contents> </HEAD> <BODY> <A HREF="Root-RAID-HOWTO-12.html">Avanti</A> <A HREF="Root-RAID-HOWTO-10.html">Indietro</A> <A HREF="Root-RAID-HOWTO.html#toc11">Indice</A> <HR> <H2><A NAME="Appendix-D"></A> <A NAME="s11">11. Appendice D. - script linuxrc e shutdown obsoleti </A></H2> <P> <H2><A NAME="ss11.1">11.1 Lavoro obsoleto - linuxrc</A> </H2> <P>Questo file linuxrc funziona benissimo con la procedura di shutdown mostrata di seguito. <PRE> ---------------------- 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 ---------------------- </PRE> <P> <H2><A NAME="ss11.2">11.2 Lavoro obsoleto - script di shutdown</A> </H2> <P>Questa procedura di shutdown funziona benissimo con <B>linuxrc</B> indicato in precedenza <P>Per catturare lo stato di shutdown dell'array raid, inserisci subito prima che i file system vengano smontati: <PRE> RAIDSTATUS=`/bin/cat /proc/mdstat | /usr/bin/grep md0` </PRE> Dopo che tutti i file system sono smontati (il file system di root non verrà smontato) aggiungi: <PRE> # il dispositivo di root rimane montato RO # monta i file system dos 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 # Ferma tutti gli array raid (tranne root) echo "Stopping raid" mdstop -a </PRE> Questo fermerà in modo pulito tutti i dispositivi raid eccetto root. Lo stato di root viene passato al prossimo boot in <B>raidstat.ro</B>. <P>Quello che segue è l'intero script di shutdown preso dal mio vecchio sistema raid1 Slackware, ho aggiornato raid1 alla nuova procedura con il file /etc/raidboot.conf <PRE> #! /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 $0:" # Find out how we were called. case "$0" in *0) message="The system is halted." command="halt" ;; *6) message="Rebooting." command=reboot ;; *) echo "$0: call me as \"rc.0\" 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 </PRE> <P> <P> <HR> <A HREF="Root-RAID-HOWTO-12.html">Avanti</A> <A HREF="Root-RAID-HOWTO-10.html">Indietro</A> <A HREF="Root-RAID-HOWTO.html#toc11">Indice</A> </BODY> </HTML>