You are not logged in.
Hello everyone!
I have extended the current mkinitrd (1.01-25) to include support for lvm root devices.
steps:
* apply the underneath patch in /var/abs/base/mkinitrd/
* make a copy of root on an lvm device
* update fstab on that copy
* in /etc/rc.sysinit add --mknodes to the line
/sbin/lvm vgscan --ignorelockingfailure
* mkinitrd --lvm-root --root-device=/dev/vg0/root auto
* change /boot/grub/menu.lst accordingly ( initrd26-lvm.img )
I'd recommend you to save your old root, along with grub entry, at least in the beginning, just in case.
unsolved problems
* with the current initscripts the root volumegroup is not deactivated at shutdown
* update of initscripts revert /etc/rc.sysinit -> all device nodes for lvm devices are not created at startup. No problem for root, but for all other lvm-partitions.
Patch
diff -ru /var/abs/base/mkinitrd/PKGBUILD patch_work/PKGBUILD
--- /var/abs/base/mkinitrd/PKGBUILD 2006-01-03 16:19:15.000000000 +0200
+++ patch_work/PKGBUILD 2006-01-11 01:05:27.000000000 +0200
@@ -2,16 +2,18 @@
# Maintainer: Tobias Powalowski <tpowa@archlinux.org>
pkgname=mkinitrd
pkgver=1.01
+lvm_pkgver=2.01.15
pkgrel=25
-pkgdesc="A tool to create the initrd image"
+pkgdesc="A tool to create the initrd image, with lvm root support"
url="http://www.busybox.org/"
depends=('bash')
backup=('etc/mkinitrd.conf')
source=(http://www.busybox.net/downloads/busybox-$pkgver.tar.bz2
+ ftp://sources.redhat.com/pub/lvm2/LVM2.$lvm_pkgver.tgz
bb-mkrootdev.patch mkinitrd config mkinitrd.conf)
-md5sums=('f250842dae2854a38470ed16a46bba66' '00e92e5dca9749b3a18b1c5af448eca7'
- '64b3353690d05b375ffcc5fc6a05366c' '92465f79f20fd0bd9d503a921c605165'
- 'ecf76ecf376d15090a2176f01ecd2f94')
+md5sums=('f250842dae2854a38470ed16a46bba66' 'c71654baff263254fb5a226624ee8ef3'
+ '00e92e5dca9749b3a18b1c5af448eca7' '82ba491b30b09c9608b136bb9ea23cf1'
+ '92465f79f20fd0bd9d503a921c605165' 'ecf76ecf376d15090a2176f01ecd2f94')
build() {
cd $startdir/src/busybox-$pkgver
@@ -19,8 +21,15 @@
cp ../config .config
make -j1 OPTIMIZATION="${CFLAGS}"
install -D -m 755 busybox $startdir/pkg/sbin/busybox
+
+ cd $startdir/src/LVM2.$lvm_pkgver
+ ./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var
+ --enable-static_link
+ make || return 1
+ install -D -m 755 tools/lvm.static $startdir/pkg/sbin/lvm.static
+ install -D -m 644 doc/example.conf $startdir/pkg/etc/lvm/lvm.conf.initrd
+
install -D -m 755 $startdir/src/mkinitrd $startdir/pkg/sbin/mkinitrd
install -D -m 644 $startdir/src/mkinitrd.conf $startdir/pkg/etc/mkinitrd.conf
mkdir -p $startdir/pkg/initrd
}
-
diff -ru /var/abs/base/mkinitrd/mkinitrd patch_work/mkinitrd
--- /var/abs/base/mkinitrd/mkinitrd 2006-01-03 16:19:15.000000000 +0200
+++ patch_work/mkinitrd 2006-01-11 01:04:11.000000000 +0200
@@ -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"
@@ -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.img"
echo ""
fi
Enjoy! And thanks for any feedback
Niklas Paro
[edit] I included a warning earlier that there was a bug, but it was false alarm. Just me who must have missed some of my own instructions [/edit]
#348498 +(4737)- [X]
<MasterG> .....................................................................
..................................
<judas> where's pacman when you need him?
Offline
Hi, I just fixed your addition to mknitrd and script. It should works fine now. You can find all patch here :
Offline