[BACK]Return to lvm CVS log [TXT][DIR] Up to [cvs.NetBSD.org] / src / etc / rc.d

File: [cvs.NetBSD.org] / src / etc / rc.d / lvm (download)

Revision 1.5, Tue Apr 21 16:08:57 2009 UTC (10 years, 7 months ago) by joerg
Branch: MAIN
CVS Tags: yamt-pagecache-tag8, yamt-pagecache-base9, yamt-pagecache-base8, yamt-pagecache-base7, yamt-pagecache-base6, yamt-pagecache-base5, yamt-pagecache-base4, yamt-pagecache-base3, yamt-pagecache-base2, yamt-pagecache-base, yamt-pagecache, tls-maxphys-base, tls-maxphys, tls-earlyentropy-base, tls-earlyentropy, riastradh-xf86-video-intel-2-7-1-pre-2-21-15, riastradh-drm2-base3, riastradh-drm2-base2, riastradh-drm2-base1, riastradh-drm2-base, riastradh-drm2, prg-localcount2-base3, prg-localcount2-base2, prg-localcount2-base1, prg-localcount2-base, prg-localcount2, phil-wifi-base, phil-wifi-20191119, phil-wifi-20190609, phil-wifi, pgoyette-localcount-base, pgoyette-localcount-20170426, pgoyette-localcount-20170320, pgoyette-localcount-20170107, pgoyette-localcount-20161104, pgoyette-localcount-20160806, pgoyette-localcount-20160726, pgoyette-localcount, pgoyette-compat-merge-20190127, pgoyette-compat-base, pgoyette-compat-20190127, pgoyette-compat-20190118, pgoyette-compat-1226, pgoyette-compat-1126, pgoyette-compat-1020, pgoyette-compat-0930, pgoyette-compat-0906, pgoyette-compat-0728, pgoyette-compat-0625, pgoyette-compat-0521, pgoyette-compat-0502, pgoyette-compat-0422, pgoyette-compat-0415, pgoyette-compat-0407, pgoyette-compat-0330, pgoyette-compat-0322, pgoyette-compat-0315, pgoyette-compat, perseant-stdc-iso10646-base, perseant-stdc-iso10646, netbsd-9-base, netbsd-9-0-RC1, netbsd-9, netbsd-8-base, netbsd-8-1-RELEASE, netbsd-8-1-RC1, netbsd-8-0-RELEASE, netbsd-8-0-RC2, netbsd-8-0-RC1, netbsd-8, netbsd-7-nhusb-base-20170116, netbsd-7-nhusb-base, netbsd-7-nhusb, netbsd-7-base, netbsd-7-2-RELEASE, netbsd-7-1-RELEASE, netbsd-7-1-RC2, netbsd-7-1-RC1, netbsd-7-1-2-RELEASE, netbsd-7-1-1-RELEASE, netbsd-7-1, netbsd-7-0-RELEASE, netbsd-7-0-RC3, netbsd-7-0-RC2, netbsd-7-0-RC1, netbsd-7-0-2-RELEASE, netbsd-7-0-1-RELEASE, netbsd-7-0, netbsd-7, netbsd-6-base, netbsd-6-1-RELEASE, netbsd-6-1-RC4, netbsd-6-1-RC3, netbsd-6-1-RC2, netbsd-6-1-RC1, netbsd-6-1-5-RELEASE, netbsd-6-1-4-RELEASE, netbsd-6-1-3-RELEASE, netbsd-6-1-2-RELEASE, netbsd-6-1-1-RELEASE, netbsd-6-1, netbsd-6-0-RELEASE, netbsd-6-0-RC2, netbsd-6-0-RC1, netbsd-6-0-6-RELEASE, netbsd-6-0-5-RELEASE, netbsd-6-0-4-RELEASE, netbsd-6-0-3-RELEASE, netbsd-6-0-2-RELEASE, netbsd-6-0-1-RELEASE, netbsd-6-0, netbsd-6, matt-premerge-20091211, matt-nb8-mediatek-base, matt-nb8-mediatek, matt-nb6-plus-nbase, matt-nb6-plus-base, matt-nb6-plus, matt-mips64-premerge-20101231, localcount-20160914, khorben-n900, jym-xensuspend-nbase, jym-xensuspend-base, cherry-xenmp-base, cherry-xenmp, bouyer-socketcan-base1, bouyer-socketcan-base, bouyer-socketcan, bouyer-quota2-nbase, bouyer-quota2-base, bouyer-quota2, agc-symver-base, agc-symver, HEAD
Changes since 1.4: +3 -2 lines

Split fsck during boot into two phases. Check the root file system
first, mount root and run the various disk providers. Add swap and
check the remaining file systems after that.
This breaks the dependency cycle for lvm, which needs writeable /dev.
Depend on rndctl in cgd.

#!/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"