Here is what I did to use NVMe SSD with Armbian image:
0) Prepare NVMe SSD
You need at least 2 partitions:
boot partition: /dev/nvme0n1p1, formatted as vfat
rootfs: /dev/nvme0n1p2. as ext4. It actually can be other partition, not necessary the 2nd one.
You can use fdisk/parted/... to create these partitions when booting from SD
0.1) (Optional) if you played with official image, SPI might have incomparable bootloader for Armbian, try erase it before using Armbian SD image
sudo dd if=/dev/zero of=/dev/mtdblock0 bs=1M count=1
(1MiB looks good enough to disable previous bootloader)
1) Boot from Armbian image. I was using jammy-xfce image. Remember to finish up the setup. For some reason, it didn't detect my monitor properly, when screen is full, it doesn't scroll up, Had to press enter a lot to scroll screen and input correctly. Hope it can be fixed. (FYI. I am using 2K monitor)
2) In a terminal, run "armbian-install"
Select "4) "boot from SPI, system on SATA, USB or NVMe"
Select the partition for rootfs, format as EXT4 (didn't try btrfs)
It will copy rootfs to that partition.
Then it installs bootloader to SPI (mtdblock0)
It will ask to reboot in the end, don't do it for now.
3) The script updates armbianEnv.txt with new rootfs config in current /boot, which is 1st partition in SD. Apparently boot partition in NVMe needs update.
sudo mount /dev/nvme0n1p1 /mnt
sudo cp -r /boot/* /mnt
# You can also update armbianEnv.txt manually with "rootdev=/dev/nvme0n1p2" to point to correct NVMe rootfs partition.
# FAT doesn't support symbol link
cd /mnt
sudo cp -r dtb-5.10.110-rockchip-rk3588 dtb
sudo cp uInitrd-5.10.110-rockchip-rk3588 uInitrd
sudo cp vmlinuz-5.10.110-rockchip-rk3588 Image
4) Now we can shutdown OPi5. Take out SD and boot to NVMe
I haven't spent time to look into armbian-install, even though it is better than the script in official instruction, it needs improvements
-- Need automatically update boot partition in NVMe, and armbianEnv.txt as well
-- Maybe it is bootrom limitation, boot partition of NVMe can't be EXT4, therefore, symbol link is not available. It will require manual steps if future apt upgrade changes kernel/dtb/initramfs. Note that SD image does have EXT4 boot partition and it works fine.
-- After running on NVMe, /boot partition is not automatically mounted as /boot, instead, /boot dir of rootfs will be updated if kernel/dtb/initramfs is updated. Manual update of boot partition is required.