Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. =================================================================== RCS file: /ftp/cvs/cvsroot/src/etc/rc.d/lvm,v rcsdiff: /ftp/cvs/cvsroot/src/etc/rc.d/lvm,v: warning: Unknown phrases like `commitid ...;' are present. retrieving revision 1.1 retrieving revision 1.2 diff -u -p -r1.1 -r1.2 --- src/etc/rc.d/lvm 2009/01/14 22:07:55 1.1 +++ src/etc/rc.d/lvm 2009/01/20 00:40:59 1.2 @@ -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/lvm ]; then - echo "Deconfiguring 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` + 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 - 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 + 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 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 - - if [ "${VG_HAS_ACTIVE_LV}" = 0 ] - then - echo " Shutting Down volume group: ${x}" - /sbin/lvm vgchange -an --ignorelockingfailure -P ${x} >/dev/null - fi + + 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 + fi } load_rc_config $name run_rc_command "$1" -