I discovered some new awesomeness in LVM2 (okay, not THAT new, but still, so far unknown to me). In our lvm2 package, I enabled lvmetad - this is a metadata caching daemon that reacts to events from udev. I completely reorganized our systemd and mkinitcpio lvm integration: * lvm.service and lvm-on-crypt.service are gone. * Once you install lvm2, lvmetad.socket and dmeventd.socket are always active in systemd. * If you need LVM monitoring, you need to enable lvm-monitoring.service (recommended if you use LVM, even if you don't know if you need monitoring). I didn't enable this by default because it would always start lvmetad.service. * LVM is fully hotplugged via udev. You don't need to activate anything, LVM volumes will just work. LVM no longer requires systemd-udev-settle.service and all the race conditions should be gone. * LVM in mkinitcpio is also fully hotplugged, lvmwait= is now a no-op. However, LVM in mkinitcpio now requires the udev hook. This requires that the use_lvmetad = 1 option is set in /etc/lvm/lvm.conf - this is now the default, but a .pacnew must be merged if it exists. You can restrict the hotplugging of the volume groups with the auto_activation_volume_list option in lvm.conf. If you uncomment that, only the listed volumes will be enabled. This is commented out by default. WARNING: If you have any incomplete or clustered volume groups, none of this will work yet! However, I doubt any Arch user uses that.