--- ../../base/mkinitrd/mkinitrd 2006-01-03 15:19:15.000000000 +0100 +++ mkinitrd 2006-02-01 00:08:30.000000000 +0100 @@ -49,6 +49,8 @@ echo " --dm exclude device mapper modules" echo " --remove-module=MODULE exclude MODULE" echo " --add-module=MODULE include MODULE" + echo " --lvm-root / (root) is a logical lvm device" + echo " --root-device=ROOT_DEV use ROOT_DEV as root instead of fstab entry" echo " --root-dir=ROOT_DIR look for modules in ROOT_DIR/lib/modules" echo " instead of /lib/modules" echo " --quiet no status output during initrd generation" @@ -61,7 +63,7 @@ # $2 = start index # $3 = finish index # $4 = device major -# $5 = device minor of first index +# $5 = d:evice minor of first index mkblkdevs() { minor=$5 for i in `seq $2 $3`; do @@ -184,6 +186,10 @@ ROOT_DEVICE="`echo $1 | awk -F= '{print $2;}'`" ;; + lvm-root|--lvm-root) + LVM_ROOT=true + ;; + --root-dir=*) ROOT_DIR="`echo $1 | awk -F= '{print $2;}'`" ;; @@ -245,6 +251,11 @@ ROOT_DEVICE="$(awk '/^[ \t]*[^#]/ { if ($2 == "/") { print $1; }}' /etc/fstab)" fi +if [ "$LVM_ROOT" == true ]; then + REMOVE_DM="0" + KERNEL_INITRD=$KERNEL_INITRD-lvm +fi + # # Module Files # @@ -647,6 +658,12 @@ ln busybox $MOUNT_IMAGE/bin/sleep ln busybox $MOUNT_IMAGE/bin/sh ln busybox $MOUNT_IMAGE/bin/test +# add lvm tools (needed for root) +if [ "$LVM_ROOT" == true ]; then + cp -a /sbin/lvm.static $MOUNT_IMAGE/bin/lvm + mkdir -p $MOUNT_IMAGE/etc/lvm + cp -a /etc/lvm/lvm.conf.initrd $MOUNT_IMAGE/etc/lvm/lvm.conf +fi # add filesystem check to avoid VFS warnings during boot if [ -f /sbin/fsck.static ]; then cp -a /sbin/fsck.static $MOUNT_IMAGE/bin/fsck @@ -774,9 +791,18 @@ echo 'fi' >>$LINUXRC fi fi -#echo "ROOT_DEV=\`cat /proc/cmdline | awk -Froot= '{print \$2}' | awk '{print \$1}'\`" >>$LINUXRC -echo "ROOT_DEV=/dev/root" >>$LINUXRC -echo "mkrootdev /dev/root" >>$LINUXRC +# set up LVM root device +if [ "$LVM_ROOT" == true ]; then + echo "echo Scanning logical volumes" >>$LINUXRC + echo "lvm vgscan --ignorelockingfailure" >>$LINUXRC + echo "echo Activating logical volumes" >>$LINUXRC + echo "lvm vgchange --ignorelockingfailure -ay" >>$LINUXRC + echo "ROOT_DEV=$ROOT_DEVICE" >>$LINUXRC +else + #echo "ROOT_DEV=\`cat /proc/cmdline | awk -Froot= '{print \$2}' | awk '{print \$1}'\`" >>$LINUXRC + echo "ROOT_DEV=/dev/root" >>$LINUXRC + echo "mkrootdev /dev/root" >>$LINUXRC +fi echo "echo 0x0100 > /proc/sys/kernel/real-root-dev" >>$LINUXRC if [ "$HAVE_FSCK" = "1" ]; then echo "mount -t \`/bin/fsck -NT \$ROOT_DEV | awk -Ffsck. '{print \$2}' | awk '{print \$1}'\` -n -o ro \$ROOT_DEV /new_root" >>$LINUXRC @@ -784,13 +810,13 @@ echo "mount -t auto -n -o ro \$ROOT_DEV /new_root" >>$LINUXRC fi echo "pivot_root /new_root /new_root/initrd" >> $LINUXRC -echo "umount /initrd/sys" >> $LINUXRC -echo "umount /initrd/proc" >> $LINUXRC +echo "/sbin/busybox umount /initrd/sys" >> $LINUXRC +echo "/sbin/busybox umount /initrd/proc" >> $LINUXRC # fix libata for using atapi enabled sed -i -e 's:\(libata.ko\):\1 atapi_enabled=1:' $LINUXRC chmod +x $LINUXRC -echo "echo \"Initial RAMDISK Loading Completed...\"" >> $LINUXRC +echo "/sbin/busybox echo \"Initial RAMDISK Loading Completed...\"" >> $LINUXRC # Unmount and Compress initrd # @@ -841,9 +867,9 @@ echo "" echo " image=/boot/vmlinuz26" echo " label=arch" - echo " root=/dev/hda3" + echo " root=$ROOT_DEVICE" echo " read-only" - echo " initrd=/boot/initrd26.img" + echo " initrd=/boot/$KERNEL_INITRD.im" echo "" fi