I have a RockPro64 running Armbian buster version 20.02.1 (Linux kernel 5.4.26-rockchip64)
I have connected an M.2 SSD via an adapter in the PCIe slot, and have setup an LVM PV on it, with a number logical ext4 and btrfs volumes on it.
All this worked fine when I set it up, but when I went to reboot the system, it never came back. On the serial console, I got a series of message from the firmware and U-Boot, then "Starting kernel ..." and nothing. (I waited about half an hour)
I have increased the boot verbosity, by increasing the value in /boot/armbianEnv.txt from 1 to 7. If the boot is successful, I see lots of output after a delay of about a minute, but if it gets stuck, I see no output at all. I have also tried enabling earlyprintk using the guide at kernel.org, and as before I saw no output unless the boot was successful. (That guide says that you can only use /dev/ttyS0 or 1 by name, and for any other serial port I would need to find the hardware address by looking in /proc/tty/driver/serial. On the RockPro64, the default serial port is /dev/ttyS2, so I tried both that anyway, and also "0xFF1A0000" from /proc/tty/driver/serial and neither worked.)
Suspecting the SSD, I powered off, disconnected it, and rebooted. After a delay of about 2 minutes I got "Give root password, or Ctrl-D to continue" (Not sure of the exact wording), so Iogged in, and edited /etc/fstab to comment out or add "noauto" to the lines for all file systems on the SSD. I was then able to reboot successfully.
Those volumes on the SSD will mount fine from the command line after boot, but it looks like they don't mount successfully during boot, and are preventing boot.
I suspect that there is some sort of issue with dependencies in systemd. Perhaps the PCI bus or the LVM2 mapper is not ready when the kernel attempts to mount the filesystems, but why would that block the boot, rather than just adding a delay?
On one occasion, I attempted to boot with just a swap volume on the SSD name in /etc/fstab, and I saw this in syslog:
Mar 21 19:52:57 jupiter systemd: dev-jupiter\x2dvg1-swap.device: Job dev-jupiter\x2dvg1-swap.device/start timed out.
Mar 21 19:52:57 jupiter systemd: Timed out waiting for device /dev/jupiter-vg1/swap.
Mar 21 19:52:57 jupiter systemd: Dependency failed for /dev/jupiter-vg1/swap.
Mar 21 19:52:57 jupiter systemd: dev-jupiter\x2dvg1-swap.swap: Job dev-jupiter\x2dvg1-swap.swap/start failed with result 'dependency'.
Mar 21 19:52:57 jupiter systemd: dev-jupiter\x2dvg1-swap.device: Job dev-jupiter\x2dvg1-swap.device/start failed with result 'timeout'.
Does anyone have an idea how I can fix this, or how to investigate further, given that I don't see any output on the serial console or the HDMI monitor when the boot fails?