1 1.1.2.2 mjf #!/bin/sh 2 1.1.2.2 mjf # 3 1.1.2.2 mjf # $NetBSD: lvm,v 1.1.2.2 2009/01/17 20:43:44 mjf Exp $ 4 1.1.2.2 mjf # 5 1.1.2.2 mjf 6 1.1.2.2 mjf # PROVIDE: disks 7 1.1.2.2 mjf 8 1.1.2.2 mjf $_rc_subr_loaded . /etc/rc.subr 9 1.1.2.2 mjf 10 1.1.2.2 mjf name="lvm" 11 1.1.2.2 mjf rcvar=$name 12 1.1.2.2 mjf start_cmd="lvm_start" 13 1.1.2.2 mjf stop_cmd="lvm_stop" 14 1.1.2.2 mjf 15 1.1.2.2 mjf dm_test() 16 1.1.2.2 mjf { 17 1.1.2.2 mjf if [ -x /sbin/dmsetup ]; then 18 1.1.2.2 mjf /sbin/dmsetup version >/dev/null 19 1.1.2.2 mjf 20 1.1.2.2 mjf if [ $? -ne 0 ]; then 21 1.1.2.2 mjf echo "Device-mapper not present in kernel" 22 1.1.2.2 mjf exit; 23 1.1.2.2 mjf fi 24 1.1.2.2 mjf fi 25 1.1.2.2 mjf } 26 1.1.2.2 mjf 27 1.1.2.2 mjf lvm_start() 28 1.1.2.2 mjf { 29 1.1.2.2 mjf dm_test; 30 1.1.2.2 mjf 31 1.1.2.2 mjf if [ -x /sbin/lvm ]; then 32 1.1.2.2 mjf echo "Configuring lvm devices." 33 1.1.2.2 mjf 34 1.1.2.2 mjf # Scan for all available VG's 35 1.1.2.2 mjf /sbin/lvm vgscan --mknodes --ignorelockingfailure >/dev/null 36 1.1.2.2 mjf 37 1.1.2.2 mjf # Activate all LV's and create apropriate nodes in /dev 38 1.1.2.2 mjf /sbin/lvm vgchange --ignorelockingfailure -a y >/dev/null 39 1.1.2.2 mjf 40 1.1.2.2 mjf echo " Activated Volume Groups:"`/sbin/lvm vgdisplay -C -o vg_name --noheadings 2>/dev/null` 41 1.1.2.2 mjf fi 42 1.1.2.2 mjf } 43 1.1.2.2 mjf 44 1.1.2.2 mjf lvm_stop() 45 1.1.2.2 mjf { 46 1.1.2.2 mjf dm_test; 47 1.1.2.2 mjf 48 1.1.2.2 mjf if [ -x /sbin/lvm ]; then 49 1.1.2.2 mjf echo "Deconfiguring lvm devices." 50 1.1.2.2 mjf 51 1.1.2.2 mjf LOGICAL_VOLUMES=`/sbin/lvm lvdisplay -C -o vg_name,lv_name -O vg_name --separator \/ --noheadings 2>/dev/null` 52 1.1.2.2 mjf VOLUME_GROUPS=`/sbin/lvm vgdisplay -C -o vg_name --separator " " --noheadings 2>/dev/null` 53 1.1.2.2 mjf 54 1.1.2.2 mjf for x in ${LOGICAL_VOLUMES}; do 55 1.1.2.2 mjf IFS=":" 56 1.1.2.2 mjf set -- `/sbin/lvm lvdisplay -c` 57 1.1.2.2 mjf # The fourth argument in the column LV display is inkernel flag 58 1.1.2.2 mjf LV_IS_ACTIVE=$4; 59 1.1.2.2 mjf unset IFS 60 1.1.2.2 mjf 61 1.1.2.2 mjf if [ ${LV_IS_ACTIVE} -eq 1 ]; then 62 1.1.2.2 mjf echo " Shutting Down logical volume: ${x} " 63 1.1.2.2 mjf /sbin/lvm lvchange -an --ignorelockingfailure -P ${x} >/dev/null 64 1.1.2.2 mjf fi 65 1.1.2.2 mjf done 66 1.1.2.2 mjf 67 1.1.2.2 mjf for x in ${VOLUME_GROUPS}; do 68 1.1.2.2 mjf echo "VG -> |${x}|" 69 1.1.2.2 mjf # Set IFS to field separator 70 1.1.2.2 mjf IFS=":" 71 1.1.2.2 mjf set -- `/sbin/lvm vgdisplay -cA ${x} 2>/dev/null` 72 1.1.2.2 mjf # The seventh parameter is number of opened LVs in a Volume Group 73 1.1.2.2 mjf VG_HAS_ACTIVE_LV=$7 74 1.1.2.2 mjf unset IFS 75 1.1.2.2 mjf 76 1.1.2.2 mjf if [ "${VG_HAS_ACTIVE_LV}" = 0 ] 77 1.1.2.2 mjf then 78 1.1.2.2 mjf echo " Shutting Down volume group: ${x}" 79 1.1.2.2 mjf /sbin/lvm vgchange -an --ignorelockingfailure -P ${x} >/dev/null 80 1.1.2.2 mjf fi 81 1.1.2.2 mjf done 82 1.1.2.2 mjf fi 83 1.1.2.2 mjf } 84 1.1.2.2 mjf 85 1.1.2.2 mjf load_rc_config $name 86 1.1.2.2 mjf run_rc_command "$1" 87 1.1.2.2 mjf 88