This file is indexed.

/etc/ha.d/resource.d/drbddisk is in drbd-utils 8.9.6-1.

This file is owned by root:root, with mode 0o755.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
#!/bin/bash
#
# This script is inteded to be used as resource script by heartbeat
#
# Copright 2003-2008 LINBIT Information Technologies
# Philipp Reisner, Lars Ellenberg
#
###

DEFAULTFILE="/etc/default/drbd"
DRBDADM="/sbin/drbdadm"

if [ -f $DEFAULTFILE ]; then
  . $DEFAULTFILE
fi

if [ "$#" -eq 2 ]; then
  RES="$1"
  CMD="$2"
else
  RES="all"
  CMD="$1"
fi

## EXIT CODES
# since this is a "legacy heartbeat R1 resource agent" script,
# exit codes actually do not matter that much as long as we conform to
#  http://wiki.linux-ha.org/HeartbeatResourceAgent
# but it does not hurt to conform to lsb init-script exit codes,
# where we can.
#  http://refspecs.linux-foundation.org/LSB_3.1.0/
#	LSB-Core-generic/LSB-Core-generic/iniscrptact.html
####

drbd_set_role_from_proc_drbd()
{
	local out
	if ! test -e /proc/drbd; then
		ROLE="Unconfigured"
		return
	fi

	dev=$( $DRBDADM sh-dev $RES )
	minor=${dev#/dev/drbd}
	if [[ $minor = *[!0-9]* ]] ; then
		# sh-minor is only supported since drbd 8.3.1
		minor=$( $DRBDADM sh-minor $RES )
	fi
	if [[ -z $minor ]] || [[ $minor = *[!0-9]* ]] ; then
		ROLE=Unknown
		return
	fi

	if out=$(sed -ne "/^ *$minor: cs:/ { s/:/ /g; p; q; }" /proc/drbd); then
		set -- $out
		ROLE=${5%/*}
		: ${ROLE:=Unconfigured} # if it does not show up
	else
		ROLE=Unknown
	fi
}

case "$CMD" in
    start)
	# try several times, in case heartbeat deadtime
	# was smaller than drbd ping time
	try=6
	while true; do
		$DRBDADM primary $RES && break
		let "--try" || exit 1 # LSB generic error
		sleep 1
	done
	;;
    stop)
	# heartbeat (haresources mode) will retry failed stop
	# for a number of times in addition to this internal retry.
	try=3
	while true; do
		$DRBDADM secondary $RES && break
		# We used to lie here, and pretend success for anything != 11,
		# to avoid the reboot on failed stop recovery for "simple
		# config errors" and such. But that is incorrect.
		# Don't lie to your cluster manager.
		# And don't do config errors...
		let --try || exit 1 # LSB generic error
		sleep 1
	done
	;;
    status)
	if [ "$RES" = "all" ]; then
	    echo "A resource name is required for status inquiries."
	    exit 10
	fi
	ST=$( $DRBDADM role $RES )
	ROLE=${ST%/*}
	case $ROLE in
	Primary|Secondary|Unconfigured)
		# expected
		;;
	*)
		# unexpected. whatever...
		# If we are unsure about the state of a resource, we need to
		# report it as possibly running, so heartbeat can, after failed
		# stop, do a recovery by reboot.
		# drbdsetup may fail for obscure reasons, e.g. if /var/lock/ is
		# suddenly readonly.  So we retry by parsing /proc/drbd.
		drbd_set_role_from_proc_drbd
	esac
	case $ROLE in
		Primary)
			echo "running (Primary)"
			exit 0 # LSB status "service is OK"
			;;
		Secondary|Unconfigured)
			echo "stopped ($ROLE)"
			exit 3 # LSB status "service is not running"
			;;
		*)
			# NOTE the "running" in below message.
			# this is a "heartbeat" resource script,
			# the exit code is _ignored_.
			echo "cannot determine status, may be running ($ROLE)"
			exit 4 #  LSB status "service status is unknown"
			;;
	esac
	;;
    *)
	echo "Usage: drbddisk [resource] {start|stop|status}"
	exit 1
	;;
esac

exit 0