Tags: patch

The problem lies in the initramfs script:
/usr/share/initramfs-tools/scripts/local-top/lvm2

It attempts to activate the LV specified as "root=" but this call fails for snapshots - the origin volume needs to be activated instead.

Please see the attached patch that adds snapshot support. It was successfully tested on my system.

Regards,

Paweł Pawliński
--- lvm2.orig	2010-12-02 19:46:12.163189512 +0100
+++ lvm2	2010-12-02 22:22:07.419218418 +0100
@@ -46,10 +46,25 @@
 	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"
+
+		# Verify if we are dealing with a snapshot
+		full_vol_name="$DM_VG_NAME/$DM_LV_NAME"
+		snap_origin=$(lvm lvs --separator '' --noheadings -o origin $full_vol_name)
+
+		# Fix lvs formatting
+		snap_origin="${snap_origin#  }"
+
+		if [ "$snap_origin" ]; then
+			_log_msg "Using LVM snapshot as the root device."
+			vol_to_activate="$DM_VG_NAME/$snap_origin"
+		else
+			vol_to_activate="$full_vol_name"
+		fi
+
+		lvm lvchange -aly --ignorelockingfailure "$vol_to_activate"
 		rc=$?
 		if [ $rc = 5 ]; then
-			echo "Unable to find LVM volume $DM_VG_NAME/$DM_LV_NAME"
+			echo "Unable to activate LVM volume $vol_to_activate"
 		fi
 	fi
 }

Reply via email to