Bug#568838: lvm2: initramfs-tools/scripts/local-top/lvm2 does not wait to detect LVM on devices that need time to appear
StalkR
debian-reportbug at stalkr.net
Fri Feb 19 23:20:29 UTC 2010
Package: lvm2
Version: 2.02.54-1
Severity: normal
On my embedded system the root filesystem is on an LVM volume on an SD card.
On a lucky day, the SD card gets recognized soon enough and scripts/local-top/lvm2 achieves to activate logical volume so that the root filesystem can be mounted.
The other days, the SD card does not get recognized soon enough and scripts/local-top/lvm2 fails to activate logical volume (volume group cannot be found), then scripts/local:pre_mountroot() complains that rootfs cannot be found and ironically waits ROOTDELAY for the rootfs to appear... but this cannot happen since lvm2 only is responsible for volume activation.
Just as in pre_mountroot(), I suggest to wait for the logical volume to appear. I attached a patch with a working solution: it scans with lvscan until the logical volume appears or until ROOTDELAY is reached. Note that in case detection fails after ROOTDELAY it does not return and it still tries to activate volume in order to inform the user with the error (unable to find LVM volume).
-- System Information:
Debian Release: squeeze/sid
APT prefers unstable
APT policy: (500, 'unstable')
Architecture: armel (armv5tel)
Kernel: Linux 2.6.32.2
Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash
Versions of packages lvm2 depends on:
ii dmsetup 2:1.02.39-1 The Linux Kernel Device Mapper use
ii libc6 2.10.2-6 Embedded GNU C Library: Shared lib
ii libdevmapper1.02.1 2:1.02.39-1 The Linux Kernel Device Mapper use
ii libgcc1 1:4.4.3-1 GCC support library
ii libreadline5 5.2-7 GNU readline and history libraries
ii lsb-base 3.2-23 Linux Standard Base 3.2 init scrip
lvm2 recommends no packages.
lvm2 suggests no packages.
-- no debconf information
-------------- next part --------------
--- /usr/share/initramfs-tools/scripts/local-top/lvm2 2009-08-17 19:28:09.000000000 +0200
+++ /usr/share/initramfs-tools/scripts/local-top/lvm2 2010-02-19 23:22:14.000000000 +0100
@@ -45,12 +45,30 @@
eval $(dmsetup splitname --nameprefixes --noheadings --rows "$dev")
- if [ "$DM_VG_NAME" ] && [ "$DM_LV_NAME" ]; then
- lvm lvchange -aly --ignorelockingfailure "$DM_VG_NAME/$DM_LV_NAME"
- rc=$?
- if [ $rc = 5 ]; then
- echo "Unable to find LVM volume $DM_VG_NAME/$DM_LV_NAME"
- fi
+ # Make sure that we have non-empty volume group and logical volume
+ if [ -z "$DM_VG_NAME" ] || [ -z "$DM_LV_NAME" ]; then
+ return 1
+ fi
+
+ # If the logical volume hasn't shown up yet, give it a little while
+ # to deal with LVM on removable devices (inspired from scripts/local)
+ fulldev="/dev/$DM_VG_NAME/$DM_LV_NAME"
+ if [ -z "`lvm lvscan -a --ignorelockingfailure |grep $fulldev`" ]; then
+ # Use default root delay
+ slumber=$(( ${ROOTDELAY:-180} * 10 ))
+
+ while [ -z "`lvm lvscan -a --ignorelockingfailure |grep $fulldev`" ]; do
+ /bin/sleep 0.1
+ slumber=$(( ${slumber} - 1 ))
+ [ ${slumber} -gt 0 ] || break
+ done
+ fi
+
+ # Activate logical volume
+ lvm lvchange -aly --ignorelockingfailure "$DM_VG_NAME/$DM_LV_NAME"
+ rc=$?
+ if [ $rc = 5 ]; then
+ echo "Unable to find LVM volume $DM_VG_NAME/$DM_LV_NAME"
fi
}
More information about the pkg-lvm-maintainers
mailing list