Skip to content

算力舱刷系统(新版)

适用应用:算力舱刷机工具(新版)

lpk 下载: 点击下载

如果需要在刷机界面手动下载资源,可打开:

这份文档用于 jetson-flash 目录里的安装脚本,重点入口是:

  • startup_scripts/setup_ssd_docker.sh

脚本支持多个 phase,每个阶段只做一件明确的事。

先进入刷机系统

有两种方式进入刷机系统:

  1. 通过微服中安装“算力舱刷机工具”应用
  2. 直接通过本地机器启动刷机镜像

警告操作

在构建系统镜像的时候,会需要较大的硬盘空间,请确保机器剩余空间大于 60GB。

方式 1:使用算力舱刷机工具

  1. 在内测工具中的算力舱内测组中安装这个应用。

    这个应用包含 jetson 系统镜像和 cuda 相关驱动,体积较大(约 20G),需要等待下载完成。

  2. 安装完成后,打开应用会出现一个 terminal,这个 terminal 就是刷机系统。

  3. 如果需要手动下载刷机资源,可在刷机界面打开:

方式 2:在本地机器运行刷机镜像

  1. 先拉取镜像,二选一即可:

    bash
    # 大陆地址
    docker pull registry.cn-hangzhou.aliyuncs.com/catdogai/jetson-flash:t912-6.2-0.1.0-rc2
    
    # Docker Hub 地址
    docker pull catdogai/jetson-flash:t912-6.2-0.1.0-rc2
  2. 启动容器,下面分别是大陆地址和 Docker Hub 地址的命令,任选其一:

    bash
    # 大陆地址
    docker run -it --rm --privileged --network host -v /dev/bus/usb:/dev/bus/usb -v /dev:/dev registry.cn-hangzhou.aliyuncs.com/catdogai/jetson-flash:t912-6.2-0.1.0-rc2 bash
    
    # Docker Hub 地址
    docker run -it --rm --privileged --network host -v /dev/bus/usb:/dev/bus/usb -v /dev:/dev catdogai/jetson-flash:t912-6.2-0.1.0-rc2 bash
  3. 等待 docker 启动完成后,会出现一个 terminal,这个 terminal 就是刷机系统。

刷机前步骤

  1. 确保算力舱和刷机系统通过 typec 连接起来。

    • 如果使用微服应用进行刷系统,请把算力舱上的 typec 口和微服上的 usb 连接起来
    • 如果使用本地机器进行刷系统,请把算力舱上的 typec 口和本地机器 usb 连接起来
  2. 确保算力舱处于 recovery mode

    • 可通过管理列表中的 recovery 键进入 recovery 模式
    • 可在算力舱刷机工具系统中执行 ssh nvidia@192.168.55.1 登录后,运行 sudo reboot --force forced-recovery

附加说明

在拆开算力舱的外壳后,靠近电源按钮的键为 recovery,另外一个为 reset 键。在这两个键的下方会有两个小字标识,分别为 RECYRST

  1. 在关机的情况下,通过按住 recovery 按钮,然后再按开机键 2 秒,再松开开机键,然后才松开 recovery
  2. 在开机的情况下,先按住 recovery 键,再按压 reset 键,最后松开 reset 键,再松开 recovery
  1. 进入 recovery mode 后,在刷机系统执行 lsusb

    如果结果中出现 ID 0955:7023 Nvidia Corp.APX,说明已经成功进入 recovery 模式。注意不要看到 NVIDIA Linux for Tegra,那个表示设备还在正常启动的 Tegra 系统里。

  2. 在刷机系统执行刷机命令:

    bash
    cd /Linux_for_Tegra
    sudo ./flash.sh jetson-agx-orin-devkit internal
    # 重复刷写可用:
    sudo ./flash.sh -r jetson-agx-orin-devkit internal

    等待运行结束后,会显示类似下面的内容:

    text
    [ 1100.2456 ] Coldbooting the device
    [ 1100.2459 ] tegrarcm_v2 --chip 0x23 0 --ismb2
    [ 1100.2462 ] MB2 version 01.00.0000
    [ 1100.3052 ] Coldbooting the device
    [ 1100.3056 ] tegrarcm_v2 --chip 0x23 0 --reboot coldboot
    [ 1100.3057 ] MB2 version 01.00.0000
    *** The target generic has been flashed successfully. ***
    Reset the board to boot from internal eMMC.

    算力舱会自动重启。重启成功后,按下面“刷机后先准备安装脚本”继续。

刷机后先准备安装脚本(必做)

刷机后,在板载系统(eMMC)的 /home/nvidia 目录下会有 lzc-jetson-installer.tar.gz,先解压再执行后续步骤:

bash
cd /home/nvidia
tar -xzf lzc-jetson-installer.tar.gz
cd lzc-jetson-installer
ls lzc-jetson-installer.sh

lzc-jetson-installer.sh 脚本在 lzc-jetson-installer 目录中,不在 /home/nvidia 根目录。

1. 先理解两个系统

这份文档里会反复提到两个系统:

  • 板载系统(eMMC):系统运行在机器主板自带的内置存储上。可以把它理解成“机器自带的基础系统”。
  • SSD 系统(NVMe):系统运行在后续迁移到的 NVMe SSD 上。可以把它理解成“迁移后的工作系统”。

这两个说法描述的是“当前系统跑在哪块存储上”,不是两套完全独立的软件版本。

最容易判断的方法是:

bash
findmnt /

判断规则:

  • 输出是 /dev/mmcblk0p1 一类:你当前在 板载系统(eMMC)
  • 输出是 /dev/mapper/ssd_vg-ssd_lv:你当前在 SSD 系统(NVMe)

可以这样理解它们的区别:

  • 板载系统(eMMC):刷机完成后先进入这里,主要负责初始化磁盘、迁移系统、修复或重建启动链路。
  • SSD 系统(NVMe):迁移完成后主要在这里长期运行,负责 Docker、lzc-ai-agent 和日常业务。
  • 板载系统(eMMC) 更接近“安装器 / 维护系统”。
  • SSD 系统(NVMe) 更接近“最终工作系统”。

它们的优缺点可以这样理解:

  • 板载系统(eMMC)优点:机器出厂就能用,刷机后可以直接进入,适合做初始化、修复和兜底恢复。
  • 板载系统(eMMC)缺点:存储空间和性能通常不如 NVMe SSD,更不适合长期承载镜像、模型和日常业务数据。
  • SSD 系统(NVMe)优点:容量更大、读写更快,更适合长期运行 Docker、模型服务和业务数据。
  • SSD 系统(NVMe)缺点:需要先完成初始化和迁移;如果启动链路或磁盘状态有问题,排查时通常还是要回到板载系统(eMMC)处理。

如果只写 eMMC 系统,有些人会误以为这是某个单独发布的系统版本。为了减少误解,下面统一写成:

  • 板载系统(eMMC)
  • SSD 系统(NVMe)

2. 先理解目标

这套脚本的目标是:

  1. 在 NVMe 上建立 LVM(ssd_vg/ssd_lv
  2. 把系统迁移到 NVMe
  3. 开机自动从 NVMe 运行(switch-root)
  4. 在 SSD 系统(NVMe)中配置 Docker 和 lzc-ai-agent

3. 常见场景怎么选

3.1 执行环境速查(最重要)

下面所有 ./lzc-jetson-installer.sh 命令都在 /home/nvidia/lzc-jetson-installer 目录执行。

各 phase 应该在哪个系统执行:

  • configure-disk板载系统(eMMC)
  • migrate-rootfs板载系统(eMMC)
  • bootstrap-ssd板载系统(eMMC)
  • configure-systemSSD 系统(NVMe)
  • reset:从 板载系统(eMMC) 发起(脚本会自动重启并在 NVMe 首次启动继续执行)
  • all:通常从 板载系统(eMMC) 发起(通常执行到 step2 后需要重启)

场景 A:全新配置

bash
# 当前环境:板载系统(eMMC)
sudo ./lzc-jetson-installer.sh --phase configure-disk
sudo ./lzc-jetson-installer.sh --phase migrate-rootfs
sudo reboot
# 机器起来后(当前环境:SSD 系统(NVMe))
sudo /opt/lzc-jetson-installer/startup_scripts/setup_ssd_docker.sh --phase configure-system

场景 B:已经有克隆好的 SSD(批量装机)

只做板载系统(eMMC)上的引导配置,不复制 rootfs:

bash
# 当前环境:板载系统(eMMC)
sudo ./lzc-jetson-installer.sh --phase bootstrap-ssd
sudo reboot

注意:

  • 批量装机前先做 1 台完整演练(含断电重启、回归检查)
  • 克隆盘不要和原盘同时在线启动同一机器,避免 LVM UUID 冲突

如果您的母盘容量比较小,而目标的盘比较大,您需要重新的执行下面的脚本进行扩容到硬盘实际的大小

sh
#!/bin/bash

set -euo pipefail

DISK=/dev/nvme0n1
PART=/dev/nvme0n1p1
LV=/dev/ssd_vg/ssd_lv

echo '[1/5] 修复 GPT 备份表到磁盘末尾'
sgdisk -e "$DISK"

echo '[2/5] 将第 1 分区扩到整盘末尾'
parted -s "$DISK" resizepart 1 100%

echo '[3/5] 通知内核重新读取分区表'
partprobe "$DISK" || true
udevadm settle || true
sleep 2

DISK_SIZE=$(blockdev --getsize64 "$DISK")
PART_SIZE=$(blockdev --getsize64 "$PART")
echo "disk_size=$DISK_SIZE part_size=$PART_SIZE"

if [ $((DISK_SIZE - PART_SIZE)) -gt $((20 * 1024 * 1024 * 1024)) ]; then
  echo '分区表已经改了,但内核还没刷新到新大小。先重启一次,再执行下面两条:'
  echo "pvresize $PART"
  echo "lvextend -l +100%FREE -r $LV"
  exit 2
fi

echo '[4/5] 扩容 LVM PV'
pvresize "$PART"

echo '[5/5] 扩容 LV 和 ext4 文件系统'
lvextend -l +100%FREE -r "$LV"

echo
lsblk
echo
pvs
echo
vgs
echo
lvs -o +devices
echo
df -h /

最终 lsblk 应该看到:ssd_vg/ssd_lv 接近整盘大小

场景 C:彻底重置(会清空所有 NVMe)

bash
# 当前环境:板载系统(eMMC)
sudo ./lzc-jetson-installer.sh --phase reset

reset 会自动重建并在最后自动重启。 注意:reset 是基于当前板载系统(eMMC)重建,不是“完整出厂重刷”。 如果你要完全重置系统,请重新刷机。

4. phase 详细说明(做什么、下一步做什么)

4.1 --phase configure-disk(步骤 1)

执行环境:

  • 板载系统(eMMC)

作用:

  • 探测 NVMe
  • 初始化 LVM 根盘(ssd_vg/ssd_lv
  • 如果当前插着多块空白 NVMe,会自动并入同一 VG
  • 安装后续手动扩容脚本到 /opt/lzc-jetson-installer/bin/lzc-expand-lvm.sh

成功后下一步:

  • 运行 --phase migrate-rootfs

如果需要指定基盘:

bash
sudo SETUP_SSD_BASE_DISK=/dev/nvme0n1 ./lzc-jetson-installer.sh --phase configure-disk

如果目标 NVMe 不是空白盘,但你确认可以清理后重建:

bash
sudo SETUP_SSD_BASE_DISK=/dev/nvme0n1 SETUP_SSD_ALLOW_REINIT_NONBLANK=1 ./lzc-jetson-installer.sh --phase configure-disk

注意:

  • SETUP_SSD_ALLOW_REINIT_NONBLANK=1 会清理目标盘上的现有数据
  • 不确定盘符时先用 lsblk 确认,不要直接执行

4.2 --phase migrate-rootfs(步骤 2)

执行环境:

  • 板载系统(eMMC)

作用:

  • 把当前根系统复制到 /ssd
  • 写入目标系统 fstab
  • 安装并启用 setssdroot.service(下次启动会切到 NVMe root)
  • 在板载系统(eMMC)中禁用自动升级服务(在 setssdroot 配置完成之后执行)

成功后下一步:

  1. sudo reboot
  2. 启动后运行 --phase configure-system

4.3 --phase bootstrap-ssd

执行环境:

  • 板载系统(eMMC)

作用:

  • 适用于“已经有可启动克隆 SSD”的机器
  • 激活已有 LVM root(/dev/ssd_vg/ssd_lv
  • 在板载系统(eMMC)上安装 setssdroot.service
  • 同步安装扩容脚本到 /opt/lzc-jetson-installer/bin/lzc-expand-lvm.sh
  • 在板载系统(eMMC)中禁用自动升级服务(同样在 setssdroot 配置后执行)

成功后下一步:

  • sudo reboot

注意:

  • 如果使用的是克隆盘,不要和原盘同时在线启动同一机器,避免 LVM UUID 冲突

4.4 --phase configure-system(步骤 3)

前提:

  • 当前 / 已经是 NVMe LVM root(不是板载系统 eMMC)

执行环境:

  • SSD 系统(NVMe)

作用:

  • 禁用 SSD 系统(NVMe)当前系统自动升级服务
  • 配置 swap
  • 配置 Docker
  • 配置 fan / bluetooth
  • 安装并启动 lzc-ai-agent

成功后下一步:

  • 正常使用即可

如果你要跳过 lzc-ai-agent 安装和启动:

bash
sudo DISABLE_LZC_AIAGENT=1 /opt/lzc-jetson-installer/startup_scripts/setup_ssd_docker.sh --phase configure-system

如果你需要单独执行安装软件脚本并设置代理:

bash
sudo bash ./scripts/chroot_install_software.sh --http-proxy http://127.0.0.1:7890 --docker-proxy http://127.0.0.1:7890

也可以用环境变量写法:

bash
sudo HTTP_PROXY=http://127.0.0.1:7890 DOCKER_PROXY=http://127.0.0.1:7890 bash ./scripts/chroot_install_software.sh

4.5 --phase reset

执行环境:

  • 从板载系统(eMMC)发起

作用:

  • 停止相关服务
  • 清空所有 NVMe(危险)
  • 重建步骤 1 和步骤 2
  • 安排首次 NVMe 启动自动执行步骤 3
  • 自动重启
  • 基于当前板载系统(eMMC)重建(不是完整出厂重刷)

成功后下一步:

  • 脚本会自动重启
  • 首次进入 NVMe 后自动执行步骤 3
  • 完成后登录机器做验证

如果你确认要跳过交互确认:

bash
sudo ./lzc-jetson-installer.sh --phase reset --yes

注意:

  • reset 会清空所有 NVMe 数据
  • reset 是基于当前板载系统(eMMC)重建,不是完整系统重刷;如需完全重置请重新刷机

4.6 --phase all

执行环境:

  • 通常从板载系统(eMMC)执行

作用:

  • 顺序执行 configure-disk + migrate-rootfs
  • 如果当前已经是 NVMe root,继续执行 configure-system

注意:

  • 大部分首次安装场景仍然需要你在重启后执行一次 configure-system(或使用 reset 的自动链路)

5. 常见问题(按报错找解决)

5.1 报错:No blank NVMe disk is available for initialization

原因:

  • 所有 NVMe 都被识别为非空(有分区或签名)

处理:

  • 指定基盘并允许清理:
bash
sudo SETUP_SSD_BASE_DISK=/dev/nvme0n1 SETUP_SSD_ALLOW_REINIT_NONBLANK=1 ./lzc-jetson-installer.sh --phase configure-disk

5.2 报错:Current rootfs is not on NVMe LVM(运行步骤 3 时)

原因:

  • 你还在板载系统(eMMC)里

处理:

  1. findmnt / 看当前根是否 ssd_vg/ssd_lv
  2. 不是的话先重启
  3. 再执行 configure-system

5.3 插了第二块盘后空间没变

先确认:

  • 这块盘是否在初始化时已经在线且空白
  • 不是的话手动扩容:
bash
sudo /opt/lzc-jetson-installer/bin/lzc-expand-lvm.sh --disk /dev/nvme1n1

如果目标盘不是空白盘,但你确认可以清理:

bash
sudo /opt/lzc-jetson-installer/bin/lzc-expand-lvm.sh --disk /dev/nvme1n1 --force-wipe
sudo /opt/lzc-jetson-installer/bin/lzc-expand-lvm.sh --disk /dev/nvme1n1 --force-wipe --yes

注意:

  • --force-wipe 会清理目标盘上的现有数据
  • --yes 会跳过确认提示,适合无人值守场景,执行前请先确认盘符

5.4 reset 后提示盘不是空白

原因:

  • 旧分区信息缓存未及时刷新(脚本已做刷新与重试)

处理:

  • 直接重试 reset
  • 或指定盘 + 允许重建

5.5 UI 显示磁盘可用空间异常(多盘同一 LVM)

说明:

  • 后端已去重同一逻辑卷的 fsavail 统计,避免两块盘重复累计

6. 验证系统

bash
findmnt /
lsblk
sudo pvs
sudo vgs
sudo lvs
systemctl status lzc-ai-agent --no-pager
systemctl is-enabled setssdroot.service

你应该看到:

  • //dev/mapper/ssd_vg-ssd_lv
  • lzc-ai-agent 正常启用并运行
  • setssdroot.service 已启用