systemd-analyze plot > boottimes.svg
Open the SVG and have a look at what's happening during boot.
journalctl -b will give you some more info too. If you're using grub to boot (probably in /boot/grub/grub.cfg), you can change the loglevel and add the udev option to get a bunch more info. Helped me with a random issue recently. Here's mine for an example:
### BEGIN /etc/grub.d/10_linux ###
menuentry 'Arch Linux' --class arch --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-a96b3354-70dd-45ed-8c6c-95171e9f1e82' {
load_video
set gfxpayload=keep
insmod gzio
insmod part_gpt
insmod ext2
search --no-floppy --fs-uuid --set=root a96b3354-70dd-45ed-8c6c-95171e9f1e82
echo 'Loading Linux linux ...'
linux /boot/vmlinuz-linux root=UUID=a96b3354-70dd-45ed-8c6c-95171e9f1e82 rw loglevel=3 udev.log-priority=debug
echo 'Loading initial ramdisk ...'
initrd /boot/amd-ucode.img /boot/initramfs-linux.img
}
True, but for this purpose it's totally fine.
There's also a big disclaimer at the top of the file:
cat grub.cfg
DO NOT EDIT THIS FILE
It is automatically generated by grub-mkconfig using templates
from /etc/grub.d and settings from /etc/default/grub
Wording could probably be less DOOM SHALL BEFALL YE, as long as you aren't messing around and just adding logging it's not an issue.
More info on grub here: https://wiki.archlinux.org/title/GRUB