NetBSD/etc/rc.d/lvm

91 lines
2.0 KiB
Bash

#!/bin/sh
#
# $NetBSD: lvm,v 1.5 2009/04/21 16:08:57 joerg Exp $
#
# PROVIDE: lvm
# REQUIRE: root
# BEFORE: DISKS
$_rc_subr_loaded . /etc/rc.subr
name="lvm"
rcvar=$name
start_cmd="lvm_start"
stop_cmd="lvm_stop"
ifs_restore="$IFS";
lvm_start()
{
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."
# Scan for all available VG's
/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
LV_LIST=$(/sbin/lvm vgdisplay -C -o vg_name --noheadings 2>/dev/null)
echo " Activated Volume Groups:" $LV_LIST
fi
}
lvm_stop()
{
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 "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)
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 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: ${vg}"
/sbin/lvm vgchange -an --ignorelockingfailure \
-P ${vg} >/dev/null
fi
done
fi
}
load_rc_config $name
run_rc_command "$1"