Rework lvm rc.d script. Check active flag for selected LV not for the first
one. Remove dmtest function. Most changes are based on feedback from salo@.
This commit is contained in:
parent
0d3e94c475
commit
94a80e6646
101
etc/rc.d/lvm
101
etc/rc.d/lvm
@ -1,6 +1,6 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
# $NetBSD: lvm,v 1.1 2009/01/14 22:07:55 haad Exp $
|
||||
# $NetBSD: lvm,v 1.2 2009/01/20 00:40:59 haad Exp $
|
||||
#
|
||||
|
||||
# PROVIDE: disks
|
||||
@ -12,76 +12,77 @@ rcvar=$name
|
||||
start_cmd="lvm_start"
|
||||
stop_cmd="lvm_stop"
|
||||
|
||||
dm_test()
|
||||
{
|
||||
if [ -x /sbin/dmsetup ]; then
|
||||
/sbin/dmsetup version >/dev/null
|
||||
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "Device-mapper not present in kernel"
|
||||
exit;
|
||||
fi
|
||||
fi
|
||||
}
|
||||
ifs_restore="$IFS";
|
||||
|
||||
lvm_start()
|
||||
{
|
||||
dm_test;
|
||||
if [ -x /sbin/dmsetup ]; then
|
||||
/sbin/dmsetup version >/dev/null
|
||||
if [ $? -ne 0 ]; then
|
||||
warn "Device-mapper not present in kernel"
|
||||
return 1;
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ -x /sbin/lvm ]; then
|
||||
echo "Configuring lvm devices."
|
||||
if [ -x /sbin/lvm ]; then
|
||||
echo "Configuring lvm devices."
|
||||
|
||||
# Scan for all available VG's
|
||||
/sbin/lvm vgscan --mknodes --ignorelockingfailure >/dev/null
|
||||
/sbin/lvm vgscan --mknodes --ignorelockingfailure >/dev/null
|
||||
|
||||
# Activate all LV's and create apropriate nodes in /dev
|
||||
/sbin/lvm vgchange --ignorelockingfailure -a y >/dev/null
|
||||
|
||||
echo " Activated Volume Groups:"`/sbin/lvm vgdisplay -C -o vg_name --noheadings 2>/dev/null`
|
||||
fi
|
||||
$LV_LIST = $(/sbin/lvm vgdisplay -C -o vg_name --noheadings 2>/dev/null)
|
||||
echo " Activated Volume Groups:" $LV_LIST
|
||||
fi
|
||||
}
|
||||
|
||||
lvm_stop()
|
||||
{
|
||||
dm_test;
|
||||
if [ -x /sbin/dmsetup ]; then
|
||||
/sbin/dmsetup version >/dev/null
|
||||
if [ $? -ne 0 ]; then
|
||||
warn "Device-mapper not present in kernel"
|
||||
return 1;
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ -x /sbin/lvm ]; then
|
||||
echo "Deconfiguring lvm devices."
|
||||
if [ -x /sbin/lvm ]; then
|
||||
echo "Unconfiguring lvm devices."
|
||||
|
||||
LOGICAL_VOLUMES=`/sbin/lvm lvdisplay -C -o vg_name,lv_name -O vg_name --separator \/ --noheadings 2>/dev/null`
|
||||
VOLUME_GROUPS=`/sbin/lvm vgdisplay -C -o vg_name --separator " " --noheadings 2>/dev/null`
|
||||
LOGICAL_VOLUMES=$(/sbin/lvm lvdisplay -C -o vg_name,lv_name \
|
||||
-O vg_name --separator \/ --noheadings 2>/dev/null)
|
||||
VOLUME_GROUPS=$(/sbin/lvm vgdisplay -C -o vg_name \
|
||||
--separator " " --noheadings 2>/dev/null)
|
||||
|
||||
for x in ${LOGICAL_VOLUMES}; do
|
||||
IFS=":"
|
||||
set -- `/sbin/lvm lvdisplay -c`
|
||||
# The fourth argument in the column LV display is inkernel flag
|
||||
LV_IS_ACTIVE=$4;
|
||||
unset IFS
|
||||
|
||||
if [ ${LV_IS_ACTIVE} -eq 1 ]; then
|
||||
echo " Shutting Down logical volume: ${x} "
|
||||
/sbin/lvm lvchange -an --ignorelockingfailure -P ${x} >/dev/null
|
||||
fi
|
||||
for lv in ${LOGICAL_VOLUMES}; do
|
||||
LV_IS_ACTIVE=$(/sbin/lvm lvdisplay -C --noheadings \
|
||||
-o lv_attr $lv)
|
||||
case $LV_IS_ACTIVE in
|
||||
*a*)
|
||||
echo " Shutting Down logical volume: ${lv}"
|
||||
/sbin/lvm lvchange -an --ignorelockingfailure \
|
||||
-P ${lv} >/dev/null
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
for x in ${VOLUME_GROUPS}; do
|
||||
echo "VG -> |${x}|"
|
||||
# Set IFS to field separator
|
||||
IFS=":"
|
||||
set -- `/sbin/lvm vgdisplay -cA ${x} 2>/dev/null`
|
||||
# The seventh parameter is number of opened LVs in a Volume Group
|
||||
VG_HAS_ACTIVE_LV=$7
|
||||
unset IFS
|
||||
for vg in ${VOLUME_GROUPS}; do
|
||||
# Set IFS to field separator
|
||||
IFS=":"
|
||||
set -- $(/sbin/lvm vgdisplay -cA ${vg} 2>/dev/null)
|
||||
# The seventh parameter is number of opened LVs in a Volume Group
|
||||
VG_HAS_ACTIVE_LV=$7
|
||||
IFS="$ifs_restore";
|
||||
|
||||
if [ "${VG_HAS_ACTIVE_LV}" = 0 ]
|
||||
then
|
||||
echo " Shutting Down volume group: ${x}"
|
||||
/sbin/lvm vgchange -an --ignorelockingfailure -P ${x} >/dev/null
|
||||
fi
|
||||
if [ "${VG_HAS_ACTIVE_LV}" = 0 ]; then
|
||||
echo " Shutting Down volume group: ${vg}"
|
||||
/sbin/lvm vgchange -an --ignorelockingfailure \
|
||||
-P ${vg} >/dev/null
|
||||
fi
|
||||
done
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
load_rc_config $name
|
||||
run_rc_command "$1"
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user