mdadm/boot.md

5.7 KiB

#!/bin/sh

SUSE system startup script for MD Raid autostart

Copyright (C) 1995--2005 Kurt Garloff, SUSE / Novell Inc.

Copyright (C) 2006 Marian Jancar, SUSE / Novell Inc.

This library is free software; you can redistribute it and/or modify it

under the terms of the GNU Lesser General Public License as published by

the Free Software Foundation; either version 2.1 of the License, or (at

your option) any later version.

This library is distributed in the hope that it will be useful, but

WITHOUT ANY WARRANTY; without even the implied warranty of

MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU

Lesser General Public License for more details.

You should have received a copy of the GNU Lesser General Public

License along with this library; if not, write to the Free Software

Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307,

USA.

BEGIN INIT INFO

Provides: boot.md

Required-Start: boot.udev boot.rootfsck

Required-Stop: $null

Should-Start: boot.scsidev boot.multipath

Should-Stop: boot.scsidev boot.multipath

Default-Start: B

Default-Stop:

Short-Description: Multiple Device RAID

Description: Start MD RAID

RAID devices are virtual devices created from two or more real block devices.

This allows multiple devices (typically disk drives or partitions there-of)

to be combined into a single device to hold (for example) a single filesystem.

Some RAID levels include redundancy and so can survive some degree of device failure.

END INIT INFO

Source LSB init functions

providing start_daemon, killproc, pidofproc,

log_success_msg, log_failure_msg and log_warning_msg.

This is currently not used by UnitedLinux based distributions and

not needed for init scripts for UnitedLinux only. If it is used,

the functions from rc.status should not be sourced or used.

#. /lib/lsb/init-functions

Shell functions sourced from /etc/rc.status:

rc_check check and set local and overall rc status

rc_status check and set local and overall rc status

rc_status -v be verbose in local rc status and clear it afterwards

rc_status -v -r ditto and clear both the local and overall rc status

rc_status -s display "skipped" and exit with status 3

rc_status -u display "unused" and exit with status 3

rc_failed set local and overall rc status to failed

rc_failed set local and overall rc status to

rc_reset clear both the local and overall rc status

rc_exit exit appropriate to overall rc status

rc_active checks whether a service is activated by symlinks

. /etc/rc.status

Reset status of this service

rc_reset

Return values acc. to LSB for all commands but status:

0 - success

1 - generic or unspecified error

2 - invalid or excess argument(s)

3 - unimplemented feature (e.g. "reload")

4 - user had insufficient privileges

5 - program is not installed

6 - program is not configured

7 - program is not running

8--199 - reserved (8--99 LSB, 100--149 distrib, 150--199 appl)

Note that starting an already running service, stopping

or restarting a not-running service as well as the restart

with force-reload (in case signaling is not supported) are

considered a success.

mdadm_BIN=/sbin/mdadm mdadm_CONFIG="/etc/mdadm.conf" mdadm_SYSCONFIG="/etc/sysconfig/mdadm"

udev integration

if [ -x /sbin/udevadm ] ; then [ -z "$MDADM_DEVICE_TIMEOUT" ] && MDADM_DEVICE_TIMEOUT=60 else MDADM_DEVICE_TIMEOUT=0 fi

function _rc_exit { [ "x$2" != x"" ] && echo -n $2 rc_failed $1 rc_status -v rc_exit }

case "$1" in start) echo -n "Starting MD Raid "

# Check for existence of needed config file and read it
[ -r $mdadm_SYSCONFIG ] || _rc_exit 6 "... $mdadm_SYSCONFIG not existing "

# Read config
. $mdadm_SYSCONFIG

[ "x$MDADM_CONFIG" != x"" ] && mdadm_CONFIG="$MDADM_CONFIG"

# Check for missing binaries (stale symlinks should not happen)
    [ -x $mdadm_BIN ] || _rc_exit 5 "... $mdadm_BIN not installed "

# Try to load md_mod
[ ! -f /proc/mdstat -a -x /sbin/modprobe ] && /sbin/modprobe -k md_mod 2>&1 | :
[ -f /proc/mdstat ] || _rc_exit 5 "... no MD support in kernel "

# Wait for udev to settle
if [ "$MDADM_DEVICE_TIMEOUT" -gt 0 ] ; then
    /sbin/udevadm settle --timeout="$MDADM_DEVICE_TIMEOUT"
fi

if test "$BOOT_MD_USE_MDADM_CONFIG" = "yes" -a -e "$mdadm_CONFIG"; then
	if ! grep -q '^[^#]*[^[:blank:]#]' $mdadm_CONFIG; then
		# empty /etc/mdadm.conf, "unused"
		rc_status -u
	else
		$mdadm_BIN -A -s -c $mdadm_CONFIG
		# a status of 2 is not an error
		test $? -eq 0 -o $? -eq 2
		rc_status -v
	fi
else
	# do auto-assemly only if /etc/mdadm.conf is missing
	# run at boot-time, so a fixed tmp name is safe
	rm -rf /tmp/mdadm.conf

	if test "$BOOT_MD_USE_MDADM_CONFIG" = "part"; then
		echo CREATE auto=part > /tmp/mdadm.conf
	fi
	if ! mdadm --examine --scan --config=partitions >>/tmp/mdadm.conf
	then
		echo "mdadm --examine --scan failed:"
		cat /tmp/mdadm.conf
		rm -f /tmp/mdadm.conf
		rc_failed 1
		rc_status -v
		rc_exit
	fi
	chmod 0600 /tmp/mdadm.conf
	if test -s /tmp/mdadm.conf; then
		mdadm --assemble --scan --config=/tmp/mdadm.conf
		# a status of 2 is not an error
		test $? -eq 0 -o $? -eq 2
		rc_status -v
	else
		# no partitions found, "unused"
		rc_status -u
	fi
	rm -f /tmp/mdadm.conf

fi
;;
stop)
echo -n "Shutting down MD Raid "

# Remember status and be verbose
rc_status -v
;;
status)
rc_failed 4
rc_status -v
;;
*)
echo "Usage: $0 {start|stop|status}"
exit 1
;;

esac rc_exit

vim:ft=sh