I have a setup with encrypted /boot (GRUB/MBR, no UEFI, LVM inside LUKS container) which stopped working correctly a few days ago after the update to lvm2 2.03.15-2. After unlocking the LUKS disk, the kernel loads, the initramfs loads, but the boot sequence breaks because the root volume cannot be found.

One way to get the system to boot again is to pass break=y in the GRUB command line and manually run
$ lvm vgchange -ay
at the prompt before allowing the system to continue booting. A more permanent fix is to downgrade lvm2 to 2.03.14-3. I suspect that there is an issue with the initcpio hook for lvm2 in the new version.

There is also a minor nuisance with this lvm2 hook, which has been present for a while: it tries to use lvmetad, which if I recall correctly isn't needed anymore and is not even in the system. This seems to be harmless aside from producing error messages during boot.
the only change made between 2.03.15 and 2.03.14 versions can seen here.
This is concern the declaration of the lvm executable path.

Can please you confirm that a dowgrade of your lvm version solve the issue?
Confirmed, boot sequence has been working normally since I downgraded the package. I'm currently ignoring lvm2 updates.

Before downgrading I also tried to issue mkinitcpio -P manually to make sure that it wasn't some fluke with the initramfs generation process, but that did not help.
New release is available on the repo. Please try it and tell us
9 days later
I tried it a couple of times, but the issue persists in 2.03.15-3. Currently using a downgraded lvm2 package again.

After some digging, its not clear why the new version doesn't work since there are barely any changes. But it's also not clear why the old version works either, because lvmetad is not in the system. I don't know exactly what is activating the volume group (the hook doesn't explicitly call lvm vgchange, it seems to only care about pvscan finishing).
I have the same issue, but I may have fixed it. Seems that lvm upstream has typo in their udev rules:
diff --git a/udev/69-dm-lvm-metad.rules.in b/udev/69-dm-lvm-metad.rules.in
index a2384f2af..eda58b868 100644
--- a/udev/69-dm-lvm-metad.rules.in
+++ b/udev/69-dm-lvm-metad.rules.in
@ @ -121,6 +121,6 @ @ LABEL="direct_pvscan"
 #  MD    |          |      X      |       X*       |                   |
 #  loop  |          |      X      |       X*       |                   |
 #  other |    X     |             |       X        |                   |   X
-RUN+="(LVM_EXEC)/lvm pvscan --cache --aay --autoactivation event --major $major --minor $minor", ENV{LVM_SCANNED}="1"
+RUN+="(LVM_EXEC)/lvm pvscan --cache -aay --autoactivation event --major $major --minor $minor", ENV{LVM_SCANNED}="1"

 LABEL="lvm_end"
Note "-aay" vs "--aay".

This patch was applied to Obarun lvm2 trunk, and works for me, at least once.
@ kvk77 did you apply the changes yourself/hack the files or did you use lvm2/device-mapper 2.03.15-4 from the repos? I just tried this version, when I went to boot the machine the boot sequence would get stuck with an error "dmsetup not found".
I patched the lvm2 PKGBUILD from git.obarun.org (commit 4f5184968b969a679c5b8a053d627d35cfc9d31e, 2.03.15-3).

2.03.15-4 has some other changes. Maybe not quite right yet?
4 days later
I managed to test the 2.03.15-4 version, and it works for me.
21 days later
Does not work for me. I still see the following problems:

- /usr/lib/initcpio/udev/69-dm-lvm.rules is referenced but not present;
- boot process was hanging on the encrypt hook, "fixed" by adding dmsetup (not sure it's necessary) and lvm to the BINARIES list in mkinitcpio.conf;
- I still need to pass break=y and manually run lvm vgchange -ay to continue the boot process.
can please we see your mkinitcpio.conf?
Here it is:
# vim:set ft=sh
# MODULES
# The following modules are loaded before any boot hooks are
# run.  Advanced users may wish to specify all system modules
# in this array.  For instance:
#     MODULES=(piix ide_disk reiserfs)
MODULES=()

# BINARIES
# This setting includes any additional binaries a given user may
# wish into the CPIO image.  This is run last, so it may be used to
# override the actual binaries included by a given hook
# BINARIES are dependency parsed, so you may safely ignore libraries
BINARIES=(/usr/bin/dmsetup /usr/bin/lvm)

# FILES
# This setting is similar to BINARIES above, however, files are added
# as-is and are not parsed in any way.  This is useful for config files.
FILES=(/etc/luks/keyfile)

# HOOKS
# This is the most important setting in this file.  The HOOKS control the
# modules and scripts added to the image, and what happens at boot time.
# Order is important, and it is recommended that you do not change the
# order in which HOOKS are added.  Run 'mkinitcpio -H <hook name>' for
# help on a given hook.
# 'base' is _required_ unless you know precisely what you are doing.
# 'udev' is _required_ in order to automatically load modules
# 'filesystems' is _required_ unless you specify your fs modules in MODULES
# Examples:
# #   This setup specifies all modules in the MODULES setting above.
# #   No raid, lvm2, or encrypted root is needed.
#    HOOKS=(base)
#
# #   This setup will autodetect all modules for your system and should
# #   work as a sane default
#    HOOKS=(base udev autodetect block filesystems)
#
# #   This setup will generate a 'full' image which supports most systems.
# #   No autodetection is done.
#    HOOKS=(base udev block filesystems)
#
# #   This setup assembles a pata mdadm array with an encrypted root FS.
# #   Note: See 'mkinitcpio -H mdadm' for more information on raid devices.
#    HOOKS=(base udev block mdadm encrypt filesystems)
#
# #   This setup loads an lvm2 volume group on a usb device.
#    HOOKS=(base udev block lvm2 filesystems)
#
# #   NOTE: If you have /usr on a separate partition, you MUST include the
#    usr, fsck and shutdown hooks.
HOOKS=(base udev autodetect modconf block encrypt lvm2 filesystems keyboard fsck)

# COMPRESSION
# Use this to compress the initramfs image. By default, gzip compression
# is used. Use 'cat' to create an uncompressed image.
# COMPRESSION="gzip"
# COMPRESSION="bzip2"
# COMPRESSION="lzma"
# COMPRESSION="xz"
# COMPRESSION="lzop"
# COMPRESSION="lz4"
# COMPRESSION="zstd"

# COMPRESSION_OPTIONS
# Additional options for the compressor
# COMPRESSION_OPTIONS=()
4 months later
Solved with lvm2 2.03.16-2. In /usr/lib/initcpio/install/lvm2 I changed:
add_udev_rule '/usr/lib/initcpio/udev/69-dm-lvm.rules'
to
add_udev_rule '/usr/lib/initcpio/udev/69-dm-lvm-metad.rules'
Also, I still have
BINARIES=(/usr/bin/dmsetup /usr/bin/lvm)
in mkinitcpio.conf. Didn't test if this is still necessary or not, but the install hook doesn't seem to be adding these to the initramfs.
hum, maybe i need to change something at packaging time
a year later
The workarounds listed in my previous post are no longer necessary as of lvm2/device-mapper 2.03.21-2. Related work in this thread.

Powered by Obarun