Just to verify L4T version, what is the output of:
head -n 1 /etc/nv_tegra_release
…I’m thinking it will show R23.x if you’ve never flashed.
I use rsync sometimes as well. I found the “-x” option ("–one-file-system") to not cross file systems tends to be simpler than excluding various folders. This pretty much excludes anything other than the primary ext4…even mounts on the ext4 of type ext4 should be eliminated and give you a good rsync of just the “real” files you’re interested in. However, what you have should work.
In your case where you have never flashed the boot loader will look only at the extlinux.conf on eMMC (though it is a good idea to mirror as you did so it works as a backup). I would think that the boot loader itself would not need to be able to read nvme0n1p1, and handing off to the kernel would succeed as it is. Note that kernel and all files during boot loader stage are from eMMC, not the other disk; upon handing off to the kernel (which was loaded by u-boot from eMMC) the “/boot” directory becomes irrelevant regardless of whether you are using the Linux kernel or u-boot.
However, there is a possibility of one thing that could have been overlooked, depending on feature changes. It looks like starting at L4T R24.2 the the initrd image is used. There was an initrd available prior to that in default installs, but extlinux.conf never named or configured this. R24.2 made this necessary, and the extlinux.conf of R24.2 has an “INITRD” key/value pair naming “/boot/initrd”. Supposing you compiled in a new feature, or perhaps something else changed…if you missed kernel features provided as a module in the initrd (assuming your version is one that needs initrd…and it will if R24.2+ kernel configuration is used), then several features might still cause the kernel to not find the root partition. The trick here is that there is a difference between not finding nvme0, a disk, versus not finding a GPT partition, versus not understanding an ext4 file system. If any of those features are missing it won’t find “/”, and the error message may not explicitly say which in the chain of those requirements caused the failure.
So a checklist is to find your L4T version, make sure that you don’t have a version which used initrd (R24.2+), and to be sure that your kernel supports not just finding the drive, but also understanding GPT partitions and ext4 file system type. If everything else for seeing the hard drive was perfect, but you did not partition with GPT partitions or did not use ext4 formatting, it is possible that these other reasons are why rootfs was not found. Prior to rsync, how did you partition and format the drive?