How to Boot a Jetson Nano Super from NVMe SSD (JetPack 6)

How to Boot a Jetson Nano Super from NVMe SSD (JetPack 6)

By default, the Jetson Nano Super boots from a microSD card. While this works fine for basic use, an NVMe SSD offers significantly better I/O performance (especially important for workloads like Docker containers, local LLM inference, or any disk-intensive task). In this guide, we'll clone the SD card to the NVMe and configure the system to boot from it.

Prerequisites

  • Jetson Nano Super running JetPack 6 (R36)
  • NVMe SSD installed and detected by the system
  • SSH access to the Jetson

Verify your NVMe is detected:

lsblk

You should see nvme0n1 in the output.

Step 1 : Clone the SD Card to the NVMe

Use dd to copy the entire SD card to the NVMe. Run this inside a tmux session to avoid interruption if your SSH connection drops:

sudo tmux new -s clone
sudo dd if=/dev/mmcblk0 of=/dev/nvme0n1 bs=4M status=progress conv=fsync

This takes a few minutes depending on your SD card size. Wait for the command to complete before proceeding. (If the connection drops and dd is interrupted, simply re-run the same command — it will overwrite the NVMe from scratch.)

Step 2 : Repair and Resize the NVMe Partition

After cloning, the filesystem needs a check and the root partition needs to be expanded to use the full NVMe capacity.

sudo apt install cloud-guest-utils
sudo e2fsck -f /dev/nvme0n1p1
sudo growpart /dev/nvme0n1 1
sudo resize2fs /dev/nvme0n1p1

You can verify the result with lsblknvme0n1p1 should now reflect the full SSD size.

Step 3 : Update the Boot Configuration

The cloned bootloader still points to the SD card as the root filesystem. Mount the NVMe root partition and edit extlinux.conf:

sudo mkdir -p /mnt/nvme
sudo mount /dev/nvme0n1p1 /mnt/nvme
cat /mnt/nvme/boot/extlinux/extlinux.conf

You'll see something like:

APPEND ${cbootargs} root=/dev/mmcblk0p1 rw rootwait ...

Replace mmcblk0p1 with nvme0n1p1:

sudo sed -i 's|root=/dev/mmcblk0p1|root=/dev/nvme0n1p1|g' /mnt/nvme/boot/extlinux/extlinux.conf
sudo umount /mnt/nvme

Step 4 : Copy the EFI Partition to the NVMe

On JetPack 6, /boot/efi is a separate partition that lives on the SD card (mmcblk0p10) by default. We need to copy its contents to the NVMe equivalent (nvme0n1p10).

Do not use dd here — it would duplicate the partition UUID, causing /etc/fstab to mount the wrong device. Instead, format the NVMe EFI partition fresh and copy the contents manually:

sudo mkfs.fat -F 32 /dev/nvme0n1p10
sudo mkdir -p /mnt/nvme-efi
sudo mount /dev/nvme0n1p10 /mnt/nvme-efi
sudo cp -r /boot/efi/* /mnt/nvme-efi/
sudo umount /mnt/nvme-efi

Get the new UUID and update /etc/fstab:

sudo blkid /dev/nvme0n1p10
sudo sed -i 's|UUID=<old-uuid>|UUID=<new-uuid>|' /etc/fstab

Verify the result with cat /etc/fstab — the /boot/efi line should now reference the NVMe UUID.

Step 5 : Verify Boot Order

efibootmgr -v

On a Jetson Nano Super with an NVMe installed, the NVMe entry is typically already first in BootOrder (check BootCurrent to confirm). If it's not, move it to the top:

sudo efibootmgr -o XXXX,YYYY,...

Step 6 : Reboot and Verify

sudo reboot

After rebooting, verify you're running from the NVMe:

lsblk
df -h /

The root filesystem / should now be mounted on /dev/nvme0n1p1, and /boot/efi on /dev/nvme0n1p10. The SD card will no longer appear in lsblk if removed.

Once confirmed, you can safely power down the Jetson and remove the SD card (it's no longer needed):

sudo poweroff

Tested on Jetson Orin Nano Super, JetPack 6.2 (R36.4.7)