9990-main.sh: activate LVM volumes if needed.
authorMichael Laß <bevan@bi-co.net>
Thu, 31 Aug 2023 18:03:38 +0000 (20:03 +0200)
committerMichael Laß <bevan@bi-co.net>
Thu, 31 Aug 2023 18:09:57 +0000 (20:09 +0200)
An update to the Debian lvm2 package removed a script in the initrd that
would activate any LVs that are required to access the root volume. Due
to this change, grml failed to find its live media when it was stored on
an LVM volume.

Add an explicit activation of any LVs mentioned in the `live-media` or
`boofrom` kernel arguments, so that the live media can be found again.

Fixes https://github.com/grml/grml/issues/200

components/9990-main.sh

index 7fb7ed3..063445b 100755 (executable)
@@ -80,6 +80,30 @@ Live ()
                                fi
                        fi
 
+                       # If the live media location is given via command line and access to it
+                       # involves LVM volumes, the corresponding volumes need to be activated.
+                       IFS=','
+                       for dev in $(echo "$LIVE_MEDIA")
+                       do
+                               case "$dev" in
+                               /dev/mapper/*)
+                                       eval $(dmsetup splitname --nameprefixes --noheadings --rows "${dev#/dev/mapper/}")
+                                       if [ "$DM_VG_NAME" ] && [ "$DM_LV_NAME" ]
+                                       then
+                                               lvm lvchange -aay -y --sysinit --ignoreskippedcluster "$DM_VG_NAME/$DM_LV_NAME"
+                                       fi
+                                       ;;
+                               /dev/*/*)
+                                       # Could be /dev/VG/LV; use lvs to check
+                                       if lvm lvs -- "$dev" >/dev/null 2>&1
+                                       then
+                                               lvm lvchange -aay -y --sysinit --ignoreskippedcluster "$dev"
+                                       fi
+                                       ;;
+                               esac
+                       done
+                       unset IFS
+
                        # Scan local devices for the image
                        i=0
                        while [ "$i" -lt 60 ]