At first I had a problem in which the initramfs didn't map LVM partitions to /dev/vg0/lv, only /dev/mapper/vg0-lv. I changed /dev/vg0/root to /dev/mapper/vg0-root in bootloader configuration as a hacky workaround.
Getting closer to a working system, systemd failed boot because my fstab entries are uuids, and for some reason, my LVM volumes aren't showing up in /dev/disk/by-*. My flash drive boot partition shows up in there though.
I replaced the uuids with /dev/mapper/vg0-* and tried again. Now my boot fails with this:
Oct 21 19:19:31 archserver systemd: Job dev-mapper-vg0\x2dmedia.device/start timed out. Oct 21 19:19:31 archserver systemd: Timed out waiting for device dev-mapper-vg0\x2dmedia.device. Oct 21 19:19:31 archserver systemd: Dependency failed for /mnt/media. Oct 21 19:19:31 archserver systemd: Dependency failed for Local File Systems.
What should I do?
Sounds very similar to this (https://bbs.archlinux.org/viewtopic.php?id=145714). Is your root partition on an lvm volume? If it is, try putting lvmwait=<path_to_your_lvm_root> in your kernel boot parameters. Alternatively, you can try the patch posted later in that thread (https://bbs.archlinux.org/viewtopic.php … 9#p1167549). I haven't used it but other people seem to have had success with it.
This may be LVM's incompatibility with anything hotplug (it may not be, your issue sounds more obscure). You need to create your own, local lvm service file. I'll tell you how. This is /usr/lib/systemd/system/lvm.service:
[Unit] Description=LVM activation DefaultDependencies=no Requires=systemd-udev-settle.service After=systemd-udev-settle.service Before=basic.target shutdown.target Conflicts=shutdown.target [Service] ExecStart=/sbin/vgchange --available y Type=oneshot TimeoutSec=0 RemainAfterExit=yes [Install] WantedBy=basic.target
[Unit] Description=LVM activation DefaultDependencies=no Requires=dev-something-something1.device After=dev-something-something1.device Requires=dev-something-something2.device After=dev-something-something2.device Before=basic.target shutdown.target Conflicts=shutdown.target [Service] ExecStart=/sbin/vgchange --available y Type=oneshot TimeoutSec=0 RemainAfterExit=yes [Install] WantedBy=basic.target
No, what to you put in those "something-something1" places above? For each LVM physical volume, run 'systemctl status /dev/disk/by-uuid/$UUID' where $UUID is the UUID of your physical volume. You'll get a status output showing the exact name of the correct .device unit. Then 'systemctl enable lvm_local.service'.
This speeds up boot and makes sure lvm is properly initialized. After writing all this, I am unsure if this is at all related to your problem, as your volume group is activated in initramfs and the links should be set up by udev.
My LVM partitions don't show up in /dev/disk/by-uuid/. Running systemctl status on the volumes in /dev/mapper/ returns: "Loaded: loaded Active: inactive (dead)"