mdadm/boot.md
Neil Brown 231108cf6e Multiple fixes for mdadm:
- upstream bugfixes in 3.3
 - simplify array assembly in initrd and normal boot.

OBS-URL: https://build.opensuse.org/package/show/Base:System/mdadm?expand=0&rev=93
2013-09-13 01:49:53 +00:00

5.2 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 program; if not, write to the Free Software

Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA

02110-1301 USA.

BEGIN INIT INFO

Provides: boot.md

Required-Start: boot.udev boot.rootfsck

Required-Stop: $null

Should-Start: boot.scsidev boot.multipath systemd-udev-trigger

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 "

/sbin/mdmon --all --takeover --offroot
# 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 md_mod
[ -f /proc/mdstat ] || _rc_exit 5 "... no MD support in kernel "

# leave all array assembly to udev.
rc_status -v
;;
stop)
echo -n "Not shutting down MD RAID - reboot/halt scripts do this."
rc_failed 3
# Remember status and be verbose
rc_status -v
;;
status)
echo -n "MD RAID arrays:"
count=`grep -c ' active ' /proc/mdstat 2> /dev/null`
case $count in
    0 ) echo -n " No arrays active"; rc_failed 3;;
    1 ) echo -n " 1 array active";;
    * ) echo -n " $count arrays active";;
esac

rc_status -v
;;
reload)
# There isn't much that is useful to do.
# We cannot reload the kernel module, or reassemble the
# arrays.  Restarting mdmon is pointless and might be bad
# as mdmon might be running in the initrd.
# We could start and newly-degraded arrays.
/sbin/mdadm -IRs
rc_status -v
;;
*)
echo "Usage: $0 {start|stop|status|reload}"
exit 1
;;

esac rc_exit

vim:ft=sh