NVIDIA experts, I am using the latest version of r38.4 and have found that nvbootctrl set-active-boot-slot can successfully switch between slot A and slot B. However, after upgrading slot B bootloader from slot A, the system switches to slot B on boot, but the rootfs is still nvme0n1p1. What’s going on here?I feel it should correspond to nvme0n1p2.
root@tegra-ubuntu:~# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/nvme0n1p1 177G 28G 140G 17% /
tmpfs 62G 140K 62G 1% /dev/shm
tmpfs 25G 23M 25G 1% /run
tmpfs 5.0M 8.0K 5.0M 1% /run/lock
efivarfs 256K 12K 245K 5% /sys/firmware/efi/efivars
/dev/nvme0n1p5 505M 78K 505M 1% /boot/efi
tmpfs 13G 112K 13G 1% /run/user/121
tmpfs 13G 96K 13G 1% /run/user/0
root@tegra-ubuntu:~# nvbootctrl dump-slots-info
Current version: 38.4.0
Capsule update status: 1
Current bootloader slot: B
Active bootloader slot: B
num_slots: 2
slot: 0, status: normal
slot: 1, status: normal
root@tegra-ubuntu:~# cat /sys/devices/virtual/dmi/id/bios_version
202512.0-39e87081
root@tegra-ubuntu:~#
root@tegra-ubuntu:~#
root@tegra-ubuntu:~# cat /sys/devices/virtual/dmi/id/bios_date
12/31/2025
root@tegra-ubuntu:~#
hello wpceswpces,
may I know what’s your flash command-line, did you flash a target with ROOTFS_AB=1?
hi,JerryChang
Yes, I added ROOTFS_AB=1 in the flashing command.
sudo ROOTFS_AB=1 ./l4t_initrd_flash.sh \
--external-device nvme0n1 \
[ -c ./tools/kernel_flash/flash_l4t_t264_nvme_rootfs_ab.xml ] \
jetson-agx-thor-devkit \
external
I can switch to slot B using set-active-boot-slot, and I see it shows nvme0n1p2. when I check with fdisk -l, I can see that there are two rootfs partitions.
root@tegra-ubuntu:~# fdisk -l
Disk /dev/loop0: 16 MiB, 16777216 bytes, 32768 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x00000000
Disk /dev/nvme0n1: 3.73 TiB, 4096805658624 bytes, 8001573552 sectors
Disk model: S1200ITT4-T2M24T-C1
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 340E1840-0C92-4A3B-9CC2-F73B7FE1E879
Device Start End Sectors Size Type
/dev/nvme0n1p1 5591104 383078463 377487360 180G Microsoft basic data
/dev/nvme0n1p2 383078464 760565823 377487360 180G Microsoft basic data
/dev/nvme0n1p3 40 204839 204800 100M Microsoft basic data
/dev/nvme0n1p4 204840 206375 1536 768K Microsoft basic data
/dev/nvme0n1p5 206376 1254951 1048576 512M EFI System
/dev/nvme0n1p6 1254952 2042919 787968 384.8M Microsoft basic data
/dev/nvme0n1p7 2042920 2247719 204800 100M Microsoft basic data
/dev/nvme0n1p8 2247720 2249255 1536 768K Microsoft basic data
/dev/nvme0n1p9 2249256 3297831 1048576 512M Microsoft basic data
/dev/nvme0n1p10 3297832 4085799 787968 384.8M Microsoft basic data
/dev/nvme0n1p11 4085824 4905023 819200 400M Microsoft basic data
/dev/nvme0n1p12 4905024 5591103 686080 335M Microsoft basic data
One thing I’d like to add is that I modified the UEFI, and possibly disabled some configurations. I don’t think these should have any impact, though.
Switching via nvbootctrl set-active-boot-slot works normally, but it’s not working properly through the update capsule.
root@tegra-ubuntu:~# nvbootctrl dump-slots-info
Current version: 38.4.0
Capsule update status: 0
Current bootloader slot: B
Active bootloader slot: B
num_slots: 2
slot: 0, status: normal
slot: 1, status: normal
root@tegra-ubuntu:~# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/nvme0n1p2 177G 28G 140G 17% /
tmpfs 62G 140K 62G 1% /dev/shm
tmpfs 25G 23M 25G 1% /run
tmpfs 5.0M 8.0K 5.0M 1% /run/lock
efivarfs 256K 12K 244K 5% /sys/firmware/efi/efivars
/dev/nvme0n1p5 505M 78K 505M 1% /boot/efi
tmpfs 13G 96K 13G 1% /run/user/0
tmpfs 13G 112K 13G 1% /run/user/121
root@tegra-ubuntu:~#
Could you share the full log when you were generating the capsule payload on the host?
And also, the log when you performed capsule update on the board.
It may not affect the result, but it will be great if you can also verify on the devkit w/o any custom change.