Rootfs A/B 備援
在 NVIDIA Jetson 設備上實現 Rootfs A/B 備援機制的完整指南。
概述
Rootfs A/B 備援 提供:
- ✅ 系統備援:兩個獨立的 rootfs 分區(A 和 B)
- ✅ 自動回退:啟動失敗時切換到備份
- ✅ 無縫更新:更新時不影響當前運作
- ✅ 災難恢復:失敗時自動恢復
Root 檔案系統備援
Jetson Linux 在 NVIDIA® Jetson Orin 系列 上提供 root 檔案系統備援支援。
它使用兩個 root 檔案系統:
- Rootfs A:儲存在通常的檔案系統分區(APP)
- Rootfs B:儲存在新的分區(APP_b),位於 APP 之後

每個 rootfs 都是獨立的,佔用一個插槽:"slot A"或"slot B"。
- Bootloader A 始終與 rootfs A 一起啟動
- Bootloader B 始終與 rootfs B 一起啟動

- Boot ROM 從 BR-BCT 或 Scratch 暫存器中獲取目標插槽編號。
- 載入對應的 Bootloader 階段並啟動到指定的 rootfs 分區。

實施指南
步驟 1:準備主機
準備以下內容:
- ✅ X86 主機,Ubuntu 22.04 或更高版本
- ✅ 磁碟空間:至少 256 GiB
- ⚠️ 不要使用 VM - 使用實體電腦
- ✅ USB 線:Type-A 到 Type-C
- ✅ Jetson 設備:AFE-R750 範例


步驟 2:在主機上準備映像
下載映像:
- 從 AFE-R750/ASR-A701 映像下載頁面 下載
- 使用 sudo 權限解壓縮:
sudo tar zxf AFE-R750_*.tar.gz
重要注意事項:
- ❌ 不要使用
root#或滑鼠解壓縮 - ✅ 下載與 Jetson 設備上 相同的 JetPack 映像版本
步驟 3:在主機上安裝先決條件
sudo usermod -aG dialout $USER
sudo apt update
sudo ./Linux_for_Tegra/tools/l4t_flash_prerequisites.sh
sudo reboot
步驟 4:獲取儲存參數
sudo fdisk -l /dev/nvme0n1
範例:
- Storage_real_size: 119.2 GB
- Sectors_number: 250069680

步驟 5:修改設定檔
sudo gedit Linux_for_Tegra/tools/kernel_flash/flash_l4t_t234_nvme_rootfs_ab.xml
將 num_sectors 設置為 Sectors_number。

步驟 6:將設備設置為恢復模式
-
關閉 Jetson 設備
-
連接 USB 到 FLASH 埠

-
打開 底蓋

-
設置 RST_RCOVY 引腳 2 為 ON
-
按 電源按鈕

步驟 7:驗證連接
在主機上打開終端並執行:
lsusb
驗證 AFE-R750 是否在恢復模式下被檢測到。

步驟 8:使用備援閃爍映像
cd Linux_for_Tegra
AGX Orin eMMC:
sudo ROOTFS_AB=1 ROOTFS_RETRY_COUNT_MAX=1 ./flash.sh jetson-agx-orin-devkit mmcblk0p1
AGX Orin NVMe: 根據 SSD 容量調整 -S 參數
sudo ROOTFS_AB=1 ROOTFS_RETRY_COUNT_MAX=1 ./tools/kernel_flash/l4t_initrd_flash.sh \
--external-device nvme0n1p1 \
-c tools/kernel_flash/flash_l4t_t234_nvme_rootfs_ab.xml \
-p "-c bootloader/generic/cfg/flash_t234_qspi.xml" \
-S '<58GiB>' \
--showlogs \
--network usb0 \
jetson-agx-orin-devkit \
nvme0n1p1
Orin NX NVMe:
sudo ROOTFS_AB=1 ROOTFS_RETRY_COUNT_MAX=1 ./tools/kernel_flash/l4t_initrd_flash.sh \
--external-device nvme0n1p1 \
-c tools/kernel_flash/flash_l4t_t234_nvme_rootfs_ab.xml \
-p "-c bootloader/generic/cfg/flash_t234_qspi.xml" \
-S `<58GiB>` \
--showlogs \
--network usb0 \
jetson-orin-nano-devkit \
internal
注意:Storage_real_size 的一半(僅整數)。
- 119.2 / 2 = 58.6 → 58 GiB
步驟 9:檢查備援功能
sudo nvbootctrl -t rootfs dump-slots-info
sudo nvbootctrl -t rootfs set-active-boot-slot `1`
sudo reboot
重新啟動後,再次檢查插槽資訊 - Rootfs 已更改。