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