ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Jetson AGX Orin SSD加装指南:从硬件选型到系统迁移全流程

Jetson AGX Orin SSD加装指南:从硬件选型到系统迁移全流程 1. 项目概述为什么需要为Jetson AGX Orin加装SSD如果你正在用Nvidia Jetson AGX Orin做机器人、边缘AI推理或者视觉处理相关的开发大概率会遇到一个瓶颈存储空间不够用。Orin模组自带的32GB或64GB eMMC存储在装完JetPack系统、Docker、几个深度学习框架和数据集后基本就所剩无几了。我自己的项目就遇到过一个稍微大点的视觉模型权重文件就好几个G多跑几个实验空间就告急了。这时候加装一块高速、大容量的M.2 NVMe SSD就成了最直接有效的升级方案。这不仅仅是扩容那么简单。相较于eMMCNVMe SSD的连续读写速度能快上几倍甚至十几倍这对于需要频繁加载大型模型、高速读写传感器数据比如高帧率相机图像流或者运行数据库的应用场景性能提升是立竿见影的。想象一下模型推理前的加载时间从十几秒缩短到两三秒或者数据记录不再成为系统瓶颈整个项目的迭代效率和系统响应速度都会上一个台阶。所以给Jetson AGX Orin加SSD核心诉求就两点一是解决存储容量焦虑二是提升I/O性能。整个过程涉及硬件选型、物理安装、系统分区格式化、系统迁移或重装等多个环节每个环节都有需要注意的细节。网上教程不少但大多比较零散有些关键步骤比如Bootloader对NVMe的支持一笔带过容易让新手踩坑。接下来我就结合自己的实操经验把这套流程掰开揉碎了讲清楚。2. 硬件准备与选型要点动手之前先把硬件搞清楚。Jetson AGX Orin的载板上预留了一个M.2 Key M接口专门用于连接NVMe PCIe SSD。这不是SATA接口别买错了。2.1 SSD规格选择市面上M.2 SSD型号繁多为Orin选型主要看以下几个维度接口与协议必须选择M.2 Key M接口支持NVMe PCIe Gen3 x4或Gen4 x4协议的SSD。Orin的PCIe控制器支持Gen4但大多数Gen3 SSD已完全够用且性价比更高。绝对不要买SATA协议AHCI的M.2 SSD物理接口可能一样但协议不兼容插上去也无法识别。尺寸规格最常见的是2280规格22mm宽80mm长。Orin的M.2插槽通常也兼容2242和2260规格但2280选择最多安装也最稳固。购买前最好确认一下你的载板型号如官方载板或第三方载板的M.2卡扣是否支持你购买的尺寸。容量建议至少512GB预算充足直接上1TB或2TB。考虑到AI项目动辄几十GB的数据集和模型大容量可以让你更从容。容量越大通常SSD的寿命TBW也相对更长。品牌与品质建议选择三星、西数、铠侠、海力士等一线品牌的产品。边缘计算设备可能面临振动、温度变化等环境一块质量稳定的SSD更可靠。有些品牌还提供官方的管理工具如三星的Magician虽然主要针对Windows但其固件更新有时也有用。散热考虑NVMe SSD在高负载下发热不小。Orin的载板空间紧凑有些SSD自带散热马甲可能会因为高度问题安装不上。优先选择单面颗粒、发热控制好的型号或者准备一块超薄的散热片。注意不要被“AS SSD Benchmark”这类Windows平台跑分软件的结果完全左右选择。在Linux尤其是ARM架构下的实际性能还与驱动、内核调度有关。选择口碑好、兼容性列表常见的型号更省心。2.2 辅助工具准备除了SSD本身你还需要准备以下小工具螺丝刀一套精密的十字螺丝刀用于打开Orin载板的外壳和固定SSD的螺丝。防静电手环可选但推荐在处理精密电子元件时防止静电击穿。导热硅胶垫可选如果你购买的SSD发热较大且载板空间允许可以加装薄型散热片中间用导热硅胶垫填充。一个装有Ubuntu的PC或U盘用于制作系统镜像或启动盘以备系统迁移或重装之需。3. 物理安装与硬件识别硬件准备好就可以开始安装了。这个过程需要细心避免物理损坏。3.1 拆机与安装步骤断电确保Jetson AGX Orin完全断电拔掉所有电源线和外设。拆卸外壳将设备翻转卸下底板上的所有螺丝。注意螺丝可能有不同长度最好记下位置或拍照。小心地取下底盖你会看到主板。定位M.2插槽在主板上找到M.2插槽通常它旁边会印有“M.2 KEY M”字样。插槽一端有一个固定螺丝柱。安装SSD将SSD以约30度角插入M.2插槽金手指对准接口轻轻下压直到SSD的金手指完全没入插槽SSD的尾部螺孔与主板上的螺丝柱对齐。然后用附带的螺丝通常随SSD或载板提供将SSD固定。螺丝不要拧得太紧以免损坏螺纹或压坏SSD。复原盖回底盖拧紧所有螺丝。如果加了散热片确保没有与其他元件发生短路或干涉。3.2 上电与硬件识别安装完成后连接电源和显示器如果需要启动Jetson AGX Orin。进入系统如果你之前系统在eMMC上它会正常启动。检查SSD是否被识别打开终端使用以下命令检查NVMe设备sudo lspci | grep -i nvme如果看到类似01:00.0 Non-Volatile memory controller: ... NVMe ...的输出说明PCIe总线已识别设备。查看块设备使用lsblk命令查看所有块设备。lsblk -d -o name,size,model,serial你应该能看到除了mmcblk0(eMMC) 之外多了一个nvme0n1的设备后面跟着它的容量信息。例如NAME SIZE MODEL SERIAL mmcblk0 59.5G nvme0n1 465.8G Samsung SSD 980 PRO S5GX...如果看不到nvme0n1首先检查物理安装是否到位然后检查BIOS/UEFI即Bootloader设置。对于Jetson可能需要确保启动固件支持从NVMe初始化。实操心得第一次开机没识别到SSD先别慌。我遇到过因为螺丝拧得太紧导致SSD轻微翘起接触不良的情况。重新插拔一次螺丝适度紧固问题就解决了。另外确保你的JetPack系统版本不是太老较新的内核5.x以上对NVMe的支持更完善。4. 分区、格式化与挂载识别到SSD后它还是一块“裸盘”我们需要在上面创建文件系统才能使用。4.1 分区方案设计对于Jetson这种单一用途的设备一个分区通常就够了。但为了灵活管理我推荐两个分区方案方案A简单整个SSD作为一个分区挂载到/home或/data。适合纯粹扩展存储空间。方案B推荐创建两个分区。分区1约100GB用于安装操作系统未来可以将系统从eMMC迁移至此获得更快的系统响应速度。分区2剩余空间用于存储数据、数据集、模型等。这里以方案B为例使用parted工具进行GPT分区。4.2 使用Parted进行分区启动parted指定你的NVMe设备通常是/dev/nvme0n1操作前务必再三确认设备名误操作会导致数据丢失。sudo parted /dev/nvme0n1创建GPT分区表(parted) mklabel gpt创建第一个分区系统分区假设从1MB开始分配100GB。(parted) mkpart primary ext4 1MB 100GB创建第二个分区数据分区使用剩余所有空间。(parted) mkpart primary ext4 100GB 100%检查与退出输入print查看分区表确认无误后输入quit退出。4.3 格式化分区使用mkfs.ext4命令格式化分区。-L参数可以为分区设置一个标签方便后续挂载识别。# 格式化第一个分区为系统分区标签设为“orin-system” sudo mkfs.ext4 -L orin-system /dev/nvme0n1p1 # 格式化第二个分区为数据分区标签设为“orin-data” sudo mkfs.ext4 -L orin-data /dev/nvme0n1p24.4 挂载分区并测试创建挂载点sudo mkdir -p /mnt/system sudo mkdir -p /mnt/data临时挂载sudo mount /dev/nvme0n1p1 /mnt/system sudo mount /dev/nvme0n1p2 /mnt/data测试读写# 测试写入 echo Test write to SSD | sudo tee /mnt/data/test.txt # 测试读取 cat /mnt/data/test.txt # 使用dd测试顺序写入速度1GB文件 sudo dd if/dev/zero of/mnt/data/testfile bs1G count1 oflagdirect statusprogress # 清理测试文件 sudo rm /mnt/data/testfile /mnt/data/test.txt如果dd命令显示的速度远高于eMMC例如达到1000 MB/s以上说明SSD性能发挥正常。5. 系统配置与自动挂载临时挂载重启后会失效我们需要配置系统在启动时自动挂载SSD。5.1 使用UUID配置/etc/fstab使用UUID来标识分区比使用设备名如/dev/nvme0n1p2更稳定因为设备名可能在硬件变化后改变。获取分区的UUIDsudo blkid在输出中找到你的NVMe分区例如/dev/nvme0n1p2: LABELorin-data UUIDa1b2c3d4-e5f6-7890-g1h2-i3j4k5l6m7n8 TYPEext4 PARTUUID...记下UUID后面的字符串。编辑/etc/fstab文件sudo nano /etc/fstab在文件末尾添加两行根据你的分区规划# 系统分区 (可选如果你打算未来将根文件系统放在这里) # UUIDa1b2c3d4... /mnt/system ext4 defaults,nofail 0 2 # 数据分区 UUIDa1b2c3d4-e5f6-7890-g1h2-i3j4k5l6m7n8 /mnt/data ext4 defaults,nofail 0 2defaults使用默认挂载选项rw, suid, dev, exec, auto, nouser, async。nofail非常重要即使启动时该设备不存在系统也不会因此卡住而无法启动。0 2最后的两个数字分别是dump备份工具标志和fsck文件系统检查顺序。非根分区通常设为0 2。测试fstab配置sudo mount -a这个命令会挂载所有在/etc/fstab中定义但未挂载的设备。如果没有报错再用df -h命令查看确认/mnt/data已成功挂载。5.2 更改用户目录或创建符号链接可选为了让日常使用更方便你可以将用户的数据目录如~/Downloads,~/Documents或者Docker、conda的默认存储路径指向SSD。方法一绑定挂载Bind Mount例如将家目录下的Projects文件夹实际存储在SSD上# 1. 在SSD上创建目标文件夹 sudo mkdir -p /mnt/data/$USER/Projects sudo chown -R $USER:$USER /mnt/data/$USER # 2. 移动现有数据如果已有 mv ~/Projects/* /mnt/data/$USER/Projects/ 2/dev/null # 3. 删除原目录创建绑定挂载 rmdir ~/Projects ln -s /mnt/data/$USER/Projects ~/Projects # 或者使用绑定挂载更底层 # sudo mount --bind /mnt/data/$USER/Projects ~/Projects # 如需永久生效在/etc/fstab中添加/mnt/data/$USER/Projects /home/$USER/Projects none bind 0 0方法二修改环境变量对于开发环境比如改变Docker镜像和容器的存储位置# 编辑Docker配置文件 sudo nano /etc/docker/daemon.json添加内容{ data-root: /mnt/data/docker }然后重启Docker服务sudo systemctl restart docker。6. 性能测试与优化挂载好了我们来验证一下SSD的性能并做一些简单的优化。6.1 使用FIO进行专业性能测试fioFlexible I/O Tester是Linux下非常专业的磁盘性能测试工具可以模拟各种读写负载。安装fiosudo apt update sudo apt install fio -y运行一个简单的混合读写测试sudo fio --nametest-ssd --filename/mnt/data/fio-test.tmp --size1G --readwriterandrw --rwmixread70 --bs4k --iodepth64 --runtime60 --time_based --group_reporting--rwmixread7070%随机读30%随机写模拟数据库等常见负载。--bs4k4KB块大小模拟小文件IO。--iodepth64IO队列深度64测试SSD的并发处理能力。--runtime60运行60秒。查看输出中的bw(带宽单位KB/s或MB/s) 和iops(每秒IO操作次数)。一个性能良好的NVMe SSD在4K随机读写上IOPS可以达到数万甚至数十万。6.2 文件系统与挂载选项优化对于ext4文件系统一些挂载选项可以提升特定场景下的性能。编辑/etc/fstab修改你的SSD挂载行将defaults替换为更优化的组合例如UUIDxxxx /mnt/data ext4 noatime,nodiratime,datawriteback,barrier0,nobh,errorsremount-ro,nofail 0 2noatime,nodiratime禁止记录文件访问时间减少写操作提升性能。datawriteback使用回写日志模式性能更高但意外断电时数据损坏风险略增对于SSD由于其非易失性风险相对可控。barrier0禁用写入屏障进一步提升性能同样在配有电池备份的硬件或可接受一定风险时使用。nobh不与buffer-head关联对某些工作负载有益。重要警告datawriteback和barrier0会牺牲一些数据安全性来换取性能。如果你的应用对数据完整性要求极高如金融交易或者设备供电不稳定请谨慎使用或坚持使用defaults选项。对于AI开发、模型训练等场景这些优化通常是值得的。6.3 启用TRIM支持TRIM命令允许操作系统告诉SSD哪些数据块不再使用SSD可以提前进行垃圾回收有助于维持长期使用的性能。对于ext4文件系统可以在挂载时启用discard选项或者定期运行fstrim。方法一挂载时启用可能影响瞬时性能在/etc/fstab的挂载选项中加入discard。UUIDxxxx /mnt/data ext4 defaults,discard,nofail 0 2方法二定期运行推荐更稳妥的方式是禁用discard挂载选项然后设置每周定时运行fstrim。# 首先从fstab中移除discard选项。 # 然后启用fstrim定时任务 sudo systemctl enable fstrim.timer sudo systemctl start fstrim.timer可以通过sudo systemctl status fstrim.timer检查定时器状态。7. 系统迁移从eMMC到SSD可选但推荐如果你希望获得最快的系统启动和运行速度可以将整个根文件系统从eMMC迁移到SSD上。这需要改变启动顺序让Orin从SSD启动。7.1 使用dd工具克隆整个eMMC警告此操作具有高风险务必先备份eMMC中的重要数据从SSD启动一个Live系统这是最复杂但最干净的方法。你需要制作一个Ubuntu ARM64的启动U盘并配置Orin从U盘启动。然后在这个Live系统中你的eMMC/dev/mmcblk0和SSD/dev/nvme0n1都会被视为普通磁盘。分区在Live系统中按照之前的方法对SSD进行分区。第一个分区例如/dev/nvme0n1p1的大小必须大于或等于eMMC的已用空间。克隆使用dd命令将eMMC的整个内容克隆到SSD的第一个分区。sudo dd if/dev/mmcblk0 of/dev/nvme0n1p1 bs4M statusprogress这个过程会很慢取决于eMMC的速度和数据量。扩展文件系统克隆后SSD分区的大小和eMMC一样。如果SSD分区更大你需要扩展文件系统以利用多余空间。sudo e2fsck -f /dev/nvme0n1p1 # 强制检查文件系统 sudo resize2fs /dev/nvme0n1p1 # 扩展ext4文件系统到分区最大容量7.2 修改BootloaderUEFI/EDK2启动项Jetson AGX Orin使用基于UEFI的启动流程。我们需要告诉固件新的启动设备是NVMe SSD。进入UEFI设置在开机启动时快速按Esc或Del键具体按键可能因载板而异请查阅手册进入UEFI设置界面。修改启动顺序在Boot或Boot Options菜单中找到Boot Order或Boot Priority。将NVMe或PCIe相关的启动项调整到最前面高于eMMC。保存并退出保存设置并重启。如果一切顺利系统将从SSD启动。踩坑实录迁移后首次启动可能会失败提示找不到启动设备。这通常是因为克隆的镜像中的fstab仍然使用eMMC的PARTUUID或UUID。需要在Live系统中挂载SSD上的根分区并修改其/etc/fstab文件将根文件系统的标识改为SSD分区的UUID通过blkid获取。同时检查并更新/boot/extlinux/extlinux.conf如果使用extlinux中的根设备参数。8. 常见问题与故障排除在实际操作中你可能会遇到以下问题8.1 系统无法识别NVMe SSD症状lspci或lsblk都看不到nvme设备。排查步骤物理检查关机断电重新插拔SSD确保安装到位。检查固件/内核运行uname -r查看内核版本。较旧的JetPack 4.x内核可能缺少某些NVMe驱动。升级到JetPack 5.x或更高版本。检查PCIe链路运行sudo dmesg | grep -i pcie和sudo dmesg | grep -i nvme查看内核启动日志中是否有PCIe枚举错误或NVMe初始化失败的信息。可能的原因包括电源不足某些高性能SSD峰值功耗较高、主板兼容性问题。8.2 SSD性能远低于预期症状dd或fio测试速度只有几百MB/s甚至更低。排查步骤检查PCIe链路速度使用命令sudo lspci -vv -s 01:00.0 | grep -i width和sudo lspci -vv -s 01:00.0 | grep -i speed请将01:00.0替换为你的NVMe设备PCI地址。确认链路是Width x4和Speed 8GT/s(Gen3) 或16GT/s(Gen4)。如果显示Width x2或Speed 2.5GT/s则链路未满速。检查散热SSD过热会触发降频。运行sudo nvme smart-log /dev/nvme0 | grep temperature查看温度。如果持续高于70°C考虑改善散热。检查挂载选项确保没有使用sync等严重影响性能的挂载选项。尝试使用fio的direct1参数进行测试绕过系统缓存得到更真实的设备性能。8.3 系统启动失败迁移后症状修改启动顺序后卡在启动界面提示 “Boot device not found” 或直接进入UEFI设置。排查步骤确认克隆成功在Live系统中检查SSD分区上的文件是否完整。检查Bootloader配置确认UEFI启动项指向的是正确的设备NVMe和正确的分区包含EFI系统分区或bootloader的分区。对于Jetson可能需要确保boot.img等引导镜像已正确更新。修复GRUB或extlinux在Live系统中挂载SSD的根分区和boot分区如果有然后chroot进去重新安装或更新引导程序。对于Jetson常用的extlinux命令可能是sudo extlinux --install /boot/extlinux。检查文件系统UUID如前述确保fstab和引导配置文件中的根文件系统UUID与SSD分区的实际UUID一致。8.4 读写过程中出现I/O错误症状复制大文件时偶发失败dmesg中出现I/O error、controller reset等日志。可能原因与解决电源不稳尝试使用外部供电更稳定的电源适配器或者将设备连接到有稳压功能的UPS上。驱动或固件问题更新SSD的固件通常在SSD厂商官网下载工具在Windows下操作。更新Jetson的主板固件和内核。硬件兼容性或故障尝试更换另一块不同品牌或型号的SSD测试。如果问题消失可能是原SSD与Orin平台存在兼容性问题。给Jetson AGX Orin加装SSD从硬件升级到系统调优是一个能显著提升开发体验的过程。它解决了存储空间的硬约束释放了数据吞吐的潜力。整个过程最需要细心的是物理安装和系统配置环节尤其是涉及启动引导的部分。我的建议是如果你是纯数据存储用途那么分区、格式化、挂载到/mnt/data就足够了简单稳定。如果你追求极致的系统响应并且愿意花时间折腾系统迁移到SSD会带来质的飞跃但务必做好备份和故障排除的准备。最后定期用fstrim和smartctl检查一下SSD的健康状态能让它陪伴你的项目更久。
返回列表