projects/aports·blob master · refs

158 lines · 3.1 KiB

1#!/sbin/openrc-run
2# Copyright 1999-2013 Gentoo Foundation
3# Distributed under the terms of the GNU General Public License, v2 or later
4# $Header: /var/cvsroot/gentoo-x86/sys-cluster/drbd/files/drbd-8.0.rc,v 1.8 2013/01/17 19:09:04 robbat2 Exp $
5
6extra_started_commands="reload"
7
8depend() {
9 use logger
10 need net
11 before heartbeat
12 after sshd
13}
14
15DEFAULTFILE="/etc/conf.d/drbd"
16DRBDADM="/usr/sbin/drbdadm"
17PROC_DRBD="/proc/drbd"
18MODPROBE="/sbin/modprobe"
19RMMOD="/sbin/rmmod"
20UDEV_TIMEOUT=10
21ADD_MOD_PARAM=""
22
23if [ -f $DEFAULTFILE ]; then
24 . $DEFAULTFILE
25fi
26
27# Just in case drbdadm want to display any errors in the configuration
28# file, or we need to ask the user about registering this installation
29# at http://usage.drbd.org, we call drbdadm here without any IO
30# redirection.
31$DRBDADM sh-nop
32
33assure_module_is_loaded() {
34 [ -e "$PROC_DRBD" ] && return
35 ebegin "Loading drbd module"
36 ret=0
37
38 $MODPROBE -s drbd `$DRBDADM sh-mod-parms` $ADD_MOD_PARAM || ret=20
39 eend $ret
40 return $ret
41}
42
43adjust_with_progress() {
44 IFS_O=$IFS
45 NEWLINE='
46'
47 IFS=$NEWLINE
48 local D=0
49 local S=0
50 local N=0
51
52 einfon "Setting drbd parameters "
53 COMMANDS=`$DRBDADM -d adjust all` || {
54 eend 20 "Error executing drbdadm"
55 return 20
56 }
57 echo -n "[ "
58
59 for CMD in $COMMANDS; do
60 if echo $CMD | grep -q disk; then echo -n "d$D "; D=$(( D+1 ));
61 elif echo $CMD | grep -q syncer; then echo -n "s$S "; S=$(( S+1 ));
62 elif echo $CMD | grep -q net; then echo -n "n$N "; N=$(( N+1 ));
63 else echo -n ".. ";
64 fi
65 IFS=$IFS_O
66 $CMD || {
67 echo
68 eend 20 "cmd $CMD failed!"
69 return 20
70 }
71 IFS=$NEWLINE
72 done
73 echo "]"
74 eend 0
75
76 IFS=$IFS_O
77}
78
79start() {
80 einfo "Starting DRBD resources:"
81 eindent
82 assure_module_is_loaded || return $?
83 adjust_with_progress || return $?
84
85 # make sure udev has time to create the device files
86 ebegin "Waiting for udev device creation"
87 for RESOURCE in `$DRBDADM sh-resources`; do
88 for DEVICE in `$DRBDADM sh-dev $RESOURCE`; do
89 UDEV_TIMEOUT_LOCAL=$UDEV_TIMEOUT
90 while [ ! -e $DEVICE ] && [ $UDEV_TIMEOUT_LOCAL -gt 0 ] ; do
91 sleep 1
92 UDEV_TIMEOUT_LOCAL=$(( $UDEV_TIMEOUT_LOCAL-1 ))
93 done
94 done
95 done
96 eend 0
97
98 einfon "Waiting for connection "
99 $DRBDADM wait-con-int
100 ret=$?
101 echo
102
103 sleep 5
104
105 einfon "Become primary if configured "
106 $DRBDADM sh-b-pri all
107 echo
108
109 eend $ret
110 return $ret
111}
112
113stop() {
114 ebegin "Stopping all DRBD resources"
115
116 # Check for mounted drbd devices
117 if ! grep -q '^/dev/drbd' /proc/mounts &>/dev/null; then
118 if [ -e ${PROC_DRBD} ]; then
119 ${DRBDADM} down all
120 ret=$?
121 sleep 3
122 if [ -e /proc/modules ] && grep -q '^drbd' /proc/modules ; then
123 ${RMMOD} drbd
124 fi
125 fi
126 eend $ret
127 return $ret
128 else
129 einfo "drbd devices mounted, please umount them before trying to stop drbd!"
130 eend 1
131 return 1
132 fi
133}
134
135status() {
136 # NEEDS to be heartbeat friendly...
137 # so: put some "OK" in the output.
138
139 if [ -e $PROC_DRBD ]; then
140 ret=0
141 ebegin "drbd driver loaded OK; device status:"
142 eend $ret
143 cat $PROC_DRBD
144 else
145 ebegin "drbd not loaded"
146 ret=3
147 eend $ret
148 fi
149 return $ret
150}
151
152reload() {
153 ebegin "Reloading DRBD"
154 ${DRBDADM} adjust all
155 ret=$?
156 eend $ret
157 return $ret
158}