wok diff busybox/stuff/init @ rev 5978

busybox: add lvm support in /init
author Pascal Bellard <pascal.bellard@slitaz.org>
date Thu Aug 12 18:56:16 2010 +0200 (2010-08-12)
parents c5efd45ce56e
children 3f326721653c
line diff
     1.1 --- a/busybox/stuff/init	Thu Dec 03 17:58:06 2009 +0100
     1.2 +++ b/busybox/stuff/init	Thu Aug 12 18:56:16 2010 +0200
     1.3 @@ -6,6 +6,11 @@
     1.4  	exec /sbin/switch_root mnt /sbin/init
     1.5  }
     1.6  
     1.7 +failed()
     1.8 +{
     1.9 +	echo -e "\\033[70G[ \\033[1;31mFailed\\033[0;39m ]"
    1.10 +}
    1.11 +
    1.12  try_init()
    1.13  {
    1.14  	if [ ! -d /mnt/etc ] && grep -q cryptoroot= /proc/cmdline; then
    1.15 @@ -34,7 +39,7 @@
    1.16  		umount /proc
    1.17  		launch_init
    1.18  	fi
    1.19 -	echo -e "\\033[70G[ \\033[1;31mFailed\\033[0;39m ]"
    1.20 +	failed
    1.21  }
    1.22  
    1.23  mount_mapper()
    1.24 @@ -43,37 +48,55 @@
    1.25  	try_init /dev/mapper $@
    1.26  }
    1.27  
    1.28 +lvmsetup()
    1.29 +{
    1.30 +if grep -q lvmroot= /proc/cmdline; then
    1.31 +	modprobe dm-mod
    1.32 +	vgscan --ignorelockingfailure
    1.33 +	vgchange -ay --ignorelockingfailure
    1.34 +	root="/dev/mapper/$(sed 's/.*lvmroot=\([^ ]*\).*/\1/' < /proc/cmdline)"
    1.35 +	return 0
    1.36 +fi
    1.37 +return 1
    1.38 +}
    1.39 +
    1.40 +load_raid()
    1.41 +{
    1.42 +while read line; do
    1.43 +	case "$line" in
    1.44 +	*raid1*)	modprobe dm-mirror ;;
    1.45 +	*raid[456]*)	modprobe raid456 ;;
    1.46 +	esac
    1.47 +done
    1.48 +}
    1.49 +
    1.50  mount -t proc proc /proc
    1.51  mount -t sysfs sysfs /sys
    1.52  if grep -q dmraid= /proc/cmdline; then
    1.53  	root="$(sed 's/.*dmraid=\([^ ]*\).*/\1/' < /proc/cmdline)"
    1.54  	echo -n "Switching / to dmraid $root..."
    1.55 -	case "$(dmraid -s | grep ^type | awk '{ print $3 }')" in
    1.56 -	mirror)		modprobe dm-mirror;;
    1.57 -	raid[456]*)	modprobe raid456;;
    1.58 -	esac
    1.59 -	name=$(dmraid -s | grep ^name | awk '{ print $3 }')
    1.60 +	dmraid -s | grep ^type | awk '{ print $3 }' | load_raid
    1.61  	case "$root" in
    1.62  	/dev/*);;
    1.63 -	p*) root=/dev/mapper/${name}$root ;;
    1.64 -	*)  root=/dev/mapper/${name}p$root ;;
    1.65 +	*) root=/dev/mapper/$(dmraid -s|grep ^name|awk '{print $3}')p${root#p};;
    1.66  	esac
    1.67  	dmraid -ay
    1.68 +	lvmsetup 
    1.69  	mount_mapper
    1.70  fi
    1.71  if grep -q softraid= /proc/cmdline; then
    1.72  	root="$(sed 's/.*softraid=\([^ ]*\).*/\1/' < /proc/cmdline)"
    1.73  	echo -n "Switching / to softraid $root..."
    1.74  	mdadm --examine --scan --config=partitions > /etc/mdadm.conf
    1.75 -	grep level=raid /etc/mdadm.conf | while read line; do
    1.76 -		case "$line" in
    1.77 -		*=raid1\ *)	modprobe dm-mirror ;;
    1.78 -		*=raid[456]\ *)	modprobe raid456 ;;
    1.79 -		esac
    1.80 -	done
    1.81 +	grep level=raid /etc/mdadm.conf | load_raid
    1.82  	mdadm --assemble --scan
    1.83 +	lvmsetup 
    1.84  	mount_mapper /etc/mdadm.conf
    1.85  fi
    1.86 +if lvmsetup; then
    1.87 +	echo -n "Switching / to lvm $root..."
    1.88 +	mount_mapper
    1.89 +fi
    1.90  if grep -q loopfs= /proc/cmdline; then
    1.91  	loopfs="$(sed 's/.*loopfs=\([^ ]*\).*/\1/' < /proc/cmdline)"
    1.92  	dev=${loopfs%,*}
    1.93 @@ -111,7 +134,7 @@
    1.94  	.|..)	;;
    1.95  	mnt)	mkdir /mnt/mnt;;
    1.96  	*)	if ! cp -a /$i /mnt 2> /dev/null; then
    1.97 -			echo -e "\\033[70G[ \\033[1;31mFailed\\033[0;39m ]"
    1.98 +			failed
    1.99  			umount /mnt
   1.100  			exec /sbin/init
   1.101  		fi;;