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