/usr/share/cluster/lvm.sh is in resource-agents 1:4.0.0~rc1-4.
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 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 | #!/bin/bash
#
# LVM Failover Script.
# NOTE: Changes to /etc/lvm/lvm.conf are required for proper operation.
#
# Copyright (C) 1997-2003 Sistina Software, Inc. All rights reserved.
# Copyright (C) 2004-2011 Red Hat, Inc. All rights reserved.
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program 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 General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#
LC_ALL=C
LANG=C
PATH=/bin:/sbin:/usr/bin:/usr/sbin
export LC_ALL LANG PATH
. $(dirname $0)/ocf-shellfuncs
. $(dirname $0)/utils/member_util.sh
. $(dirname $0)/lvm_by_lv.sh
. $(dirname $0)/lvm_by_vg.sh
rv=0
################################################################################
# ha_lvm_proper_setup_check
#
################################################################################
function ha_lvm_proper_setup_check
{
##
# Does the Volume Group exist?
# 1) User may have forgotten to create it
# 2) User may have misspelled it in the config file
##
if ! vgs $OCF_RESKEY_vg_name --config 'global{locking_type=0}'>& /dev/null; then
ocf_log err "HA LVM: Unable to get volume group attributes for $OCF_RESKEY_vg_name"
return $OCF_ERR_GENERIC
fi
##
# Are we using the "tagging" or "CLVM" variant?
# The CLVM variant will have the cluster attribute set
##
if [[ "$(vgs -o attr --noheadings --config 'global{locking_type=0}' $OCF_RESKEY_vg_name 2>/dev/null)" =~ .....c ]]; then
# Is clvmd running?
if ! ps -C clvmd >& /dev/null; then
ocf_log err "HA LVM: $OCF_RESKEY_vg_name has the cluster attribute set, but 'clvmd' is not running"
return $OCF_ERR_GENERIC
fi
return $OCF_SUCCESS
fi
##
# The "tagging" variant is being used if we have gotten this far.
##
##
# The default for lvm.conf:activation/volume_list is empty,
# this must be changed for HA LVM.
##
if ! lvm dumpconfig activation/volume_list >& /dev/null; then
ocf_log err "HA LVM: Improper setup detected"
ocf_log err "* \"volume_list\" not specified in lvm.conf."
return $OCF_ERR_GENERIC
fi
##
# Machine's cluster node name must be present as
# a tag in lvm.conf:activation/volume_list
##
if ! lvm dumpconfig activation/volume_list | grep $(local_node_name); then
ocf_log err "HA LVM: Improper setup detected"
ocf_log err "* @$(local_node_name) missing from \"volume_list\" in lvm.conf"
return $OCF_ERR_GENERIC
fi
##
# The volume group to be failed over must NOT be in
# lvm.conf:activation/volume_list; otherwise, machines
# will be able to activate the VG regardless of the tags
##
if lvm dumpconfig activation/volume_list | grep "\"$OCF_RESKEY_vg_name\""; then
ocf_log err "HA LVM: Improper setup detected"
ocf_log err "* $OCF_RESKEY_vg_name found in \"volume_list\" in lvm.conf"
return $OCF_ERR_GENERIC
fi
##
# Next, we need to ensure that their initrd has been updated
# If not, the machine could boot and activate the VG outside
# the control of rgmanager
##
# Fixme: we might be able to perform a better check...
if [ "$(find /boot -name *.img -newer /etc/lvm/lvm.conf)" == "" ]; then
ocf_log err "HA LVM: Improper setup detected"
ocf_log err "* initrd image needs to be newer than lvm.conf"
# While dangerous if not done the first time, there are many
# cases where we don't simply want to fail here. Instead,
# keep warning until the user remakes the initrd - or has
# it done for them by upgrading the kernel.
#return $OCF_ERR_GENERIC
fi
return $OCF_SUCCESS
}
################################################################################
# MAIN
################################################################################
case $1 in
start)
ha_lvm_proper_setup_check || exit 1
if [ -z "$OCF_RESKEY_lv_name" ]; then
vg_start || exit 1
else
lv_start || exit 1
fi
;;
status|monitor)
ocf_log notice "Getting status"
if [ -z "$OCF_RESKEY_lv_name" ]; then
vg_status
exit $?
else
lv_status
exit $?
fi
;;
stop)
ha_lvm_proper_setup_check
if [ -z "$OCF_RESKEY_lv_name" ]; then
vg_stop || exit 1
else
lv_stop || exit 1
fi
;;
recover|restart)
$0 stop || exit $OCF_ERR_GENERIC
$0 start || exit $OCF_ERR_GENERIC
;;
meta-data)
cat `echo $0 | sed 's/^\(.*\)\.sh$/\1.metadata/'`
;;
validate-all|verify-all)
if [ -z "$OCF_RESKEY_lv_name" ]; then
vg_verify || exit 1
else
lv_verify || exit 1
fi
;;
*)
echo "usage: $0 {start|status|monitor|stop|restart|meta-data|validate-all}"
exit $OCF_ERR_UNIMPLEMENTED
;;
esac
exit $rv
|