diff --git a/etc/defaults/rc.conf b/etc/defaults/rc.conf index bf013d4d4871..948e50f435a8 100644 --- a/etc/defaults/rc.conf +++ b/etc/defaults/rc.conf @@ -53,6 +53,18 @@ netfs_types="nfs:NFS smbfs:SMB portalfs:PORTAL nwfs:NWFS" # Net filesystems. extra_netfs_types="NO" # List of network extra filesystem types for delayed # mount at startup (or NO). +# ATA RAID support for startup +# Example config for a RAID1 set: +# ataraid_ar0_set="ad2 ad3" # Creates the RAID set from these drives +# ataraid_ar0_type="RAID1" # RAID type for ar0 +ataraid_create_flags="create" # Flags needed to create a RAID set. +ataraid_delete_flags="delete" # Flags needed to delete a RAID set. +ataraid_status_flags="status" # Flags needed to get the status on a RAID set. +ataraid_devices="" # List of the ata RAID devices. ex: "ar0" +ataraid_enable="NO" # Enable software ATA raid support +ataraid_program="/sbin/atacontrol" # Path to ata raid program. + + ############################################################## ### Network configuration sub-section ###################### ############################################################## diff --git a/etc/rc.d/Makefile b/etc/rc.d/Makefile index c790741f79a5..b591181dc4d1 100755 --- a/etc/rc.d/Makefile +++ b/etc/rc.d/Makefile @@ -5,7 +5,7 @@ FILES= DAEMON LOGIN NETWORKING SERVERS \ abi accounting addswap adjkerntz amd \ - apm apmd archdep atm1 atm2 atm3 \ + apm apmd archdep ataraid atm1 atm2 atm3 \ bgfsck bootparams \ ccd cleanvar cleartmp cron \ devd devfs dhclient diskless \ diff --git a/etc/rc.d/ataraid b/etc/rc.d/ataraid new file mode 100644 index 000000000000..491221d51a27 --- /dev/null +++ b/etc/rc.d/ataraid @@ -0,0 +1,113 @@ +#!/bin/sh +# +# Copyright (c) 2003 The FreeBSD Project. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE PROJECT ``AS IS'' AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +# IN NO EVENT SHALL THE PROJECT BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# $FreeBSD$ +# + +# PROVIDE: ataraid +# REQUIRE: root +# KEYWORD: FreeBSD + +. /etc/rc.subr + +name="ataraid" +precmd_cmd="ataraid_precmd" +rcvar="`set_rcvar`" +start_cmd="ataraid_start" +status_cmd="ataraid_status" +stop_cmd="ataraid_stop" + +init_variables() +{ + _r="$1" + + if [ -z "$_r" ]; then + warn "init_variables: you must specify an ata device" + return + fi + + eval ataraid_set=\"\$ataraid_${_r}_set\" + eval ataraid_type=\"\$ataraid_${_r}_type\" +} + + +ataraid_precmd() +{ + if [ -z "${ataraid_program}" ]; then + warn "ataraid_common: an ataraid program must be specified" + return + fi + + if [ -z "${ataraid_create_flags}" ]; then + warn "ataraid_common: an ataraid create flag must be specified" + return + fi + + if [ -z "${ataraid_delete_flags}" ]; then + warn "ataraid_common: an ataraid delete flag must be specified" + return + fi + + if [ -z "${ataraid_status_flags}" ]; then + warn "ataraid_common: an ataraid status flag must be specified" + return + fi +} + + +ataraid_start() +{ + echo -n "Creating ATA RAID sets: " + for _raidev in ${ataraid_devices} + do + init_variables $_raidev + ${ataraid_program} ${ataraid_create_flags} ${ataraid_type} ${ataraid_set} > /dev/null + echo -n "$_raidev" + done + echo '.' +} + +ataraid_status() +{ + for _raidev in ${ataraid_devices} + do + init_variables $_raidev + ${ataraid_program} ${ataraid_status_flags} ${_raidev} + done +} + +ataraid_stop() +{ + echo -n "Tearing down ATA RAID sets: " + for _raidev in ${ataraid_devices} + do + init_variables $_raidev + ${ataraid_program} ${ataraid_delete_flags} ${_raidev} + echo -n "$_raidev" + done + echo '.' +} + +load_rc_config $name +run_rc_command "$1" diff --git a/etc/rc.d/mountcritlocal b/etc/rc.d/mountcritlocal index 83acefe6dc0c..67a993f07f91 100755 --- a/etc/rc.d/mountcritlocal +++ b/etc/rc.d/mountcritlocal @@ -5,7 +5,7 @@ # # PROVIDE: mountcritlocal -# REQUIRE: root +# REQUIRE: root ataraid # KEYWORD: FreeBSD NetBSD . /etc/rc.subr