ARTICLE DETAIL

资讯详情

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

Jetson AGX Orin加装SSD实战:从硬件安装到系统优化全攻略

Jetson AGX Orin加装SSD实战:从硬件安装到系统优化全攻略 1. 项目概述为什么需要给Jetson AGX Orin加装SSD如果你正在用Nvidia Jetson AGX Orin搞AI开发、机器人或者边缘计算项目那你大概率已经体会过它的强大算力了。不过很多朋友在兴奋地跑起第一个YOLO模型或者部署完ROS2节点后很快就会遇到一个不大不小的瓶颈存储空间。Orin自带的32GB或64GB eMMC存储在装完JetPack系统、CUDA、TensorRT、PyTorch等一系列开发环境后基本就所剩无几了。想存点训练数据、视频流或者模型权重空间立刻告急。这就是我们今天要动手解决的核心问题为Jetson AGX Orin加装一块M.2 NVMe SSD固态硬盘。这绝不仅仅是简单的“扩容”而是一次对设备潜力的深度释放。想象一下你的数据集可以直接放在本地高速读取模型推理的中间缓存不再受限于缓慢的eMMC系统日志和临时文件的写入也不会成为性能瓶颈。对于需要处理高帧率视频流、进行实时数据记录或者部署大型模型的应用场景一块高速SSD带来的体验提升是立竿见影的。这个项目适合所有Jetson AGX Orin的用户无论是刚入门的新手还是正在部署生产环境的老鸟。整个过程涉及硬件拆装、系统分区、挂载配置以及性能优化我会把每一步的原理、操作和踩过的坑都讲清楚。你不需要是硬件专家只要有一把合适的螺丝刀和一点耐心跟着做一两个小时就能搞定。2. 硬件准备与选型找到最适合Orin的那块SSD动手之前准备工作至关重要。给嵌入式设备加装硬件选错了型号或者工具轻则无法识别重则可能损坏设备。2.1 确认Jetson AGX Orin的硬件接口首先我们必须明确Jetson AGX Orin的扩展能力。以Jetson AGX Orin 64GB模组为例它内部预留了一个M.2 Key M接口的插槽专门用于连接NVMe PCIe Gen4 x4的固态硬盘。这是最关键的信息接口类型M.2 Key M。这意味着它支持PCIe通道的NVMe SSD不支持SATA协议的M.2 SSD通常是Key BM口。协议与带宽支持NVMe over PCIe Gen4 x4。理论带宽极高但实际速度会受Orin平台PCIe控制器和散热条件限制后文会详述。尺寸规格支持2230和2242两种尺寸的SSD。2280尺寸的SSD最常见的那种无法直接安装因为机壳内部空间长度不够。注意在购买SSD前请务必再次确认你的Orin模组型号和载板设计。少数第三方载板可能设计不同。最稳妥的方法是查阅Nvidia官方文档或打开设备外壳直接观察插槽。2.2 SSD硬盘选型指南基于以上接口信息我们选购SSD时需要关注以下几个核心参数尺寸Form Factor必须选择2230或2242规格。2230尺寸22mm宽30mm长的SSD更为紧凑是许多迷你主机和嵌入式设备的首选。2242尺寸22mm宽42mm长的选择会稍多一些。市面上常见的2280尺寸无法安装。接口与协议Interface Protocol必须选择NVMe PCIe SSD。确认商品描述中明确写着“NVMe PCIe”而不是“SATA”。一个简单的辨别方法是看金手指的缺口NVMe通常是单缺口M Key。容量Capacity建议至少512GB预算充足直接上1TB。对于AI开发动辄几十GB的数据集和模型很常见大容量能让你更从容。Orin的PCIe接口理论上支持大容量SSD。性能Performance顺序读写速度如3500MB/s在这个场景下不是首要考量。Orin作为嵌入式平台其PCIe通道和散热设计可能无法让高端消费级SSD满血运行。更应关注随机读写性能IOPS和功耗/发热。一些主打低功耗的OEM盘或企业级边缘盘可能更合适。品牌与可靠性建议选择三星Samsung、西部数据WD/闪迪SanDisk、铠侠Kioxia等一线品牌。对于2230规格三星PM991a、西部数据SN530等是常见且经过验证的选择。我的实操心得与避坑指南散热片问题2230/2242 SSD通常不带散热片。Orin机壳内部空间紧凑不要自行加装厚重的金属散热片可能导致无法合盖或挤压其他元件。如果SSD发热较大可以贴上一片薄薄的导热硅胶垫将热量传导到金属外壳上。功耗考量Orin的载板供电能力是设计好的。虽然PCIe插槽能提供标准供电但为避免意外不建议选择那些功耗特别高的“性能猛兽”盘。选择TDP热设计功耗在3.5W至5W左右的型号比较稳妥。购买渠道2230规格的SSD在零售市场相对少见很多是笔记本拆机盘或OEM渠道流通。购买时请选择信誉好的商家并注意鉴别是否为二手或清零盘。2242规格的选择会多一些。2.3 所需工具清单除了SSD你还需要准备以下工具螺丝刀套装必备需要PH000十字螺丝刀来拆卸Jetson AGX Orin背面的螺丝。螺丝非常小使用不合适的螺丝刀极易滑丝一旦滑丝几乎无法修复务必使用尺寸精确的PH000。塑料撬棒或拨片用于无损打开设备外壳的卡扣。可以使用吉他拨片、旧银行卡剪成的塑料片替代。防静电手环可选但推荐在干燥环境下操作精密电子设备静电是隐形杀手。佩戴防静电手环或将手频繁接触接地的金属物体如暖气管道、机箱外壳以释放静电。导热硅胶垫可选如果担心SSD散热可以准备一片厚度约1mm的导热硅胶垫尺寸略大于SSD芯片即可。干净的工作台确保操作区域宽敞、明亮、无灰尘。3. 拆机与硬件安装实战这是整个过程中最需要细心和耐心的一步。请确保在断电状态下操作并遵循静电防护规范。3.1 安全拆卸Jetson AGX Orin外壳完全断电拔掉Jetson AGX Orin的所有连接线包括电源、网线、USB设备等。卸下底部螺丝将设备翻转底部朝上。你会看到周围有一圈共8颗非常小的十字螺丝。使用PH000螺丝刀逆时针方向将它们全部拧下。重要找一个小盒子或磁吸垫存放这些螺丝它们极易丢失。分离底壳拧下所有螺丝后底壳带有散热鳍片的部分依然通过塑料卡扣与中框固定。这时需要使用塑料撬棒。从设备的一个角开始将撬棒轻轻插入底壳与中框的缝隙小心地撬开卡扣。沿着缝隙慢慢移动依次撬开四周的卡扣。切勿使用蛮力或金属工具否则会损坏卡扣或划伤外壳。暴露内部当所有卡扣都松开后就可以将金属底壳轻轻取下了。这时你将看到Jetson AGX Orin的核心模组、散热风扇以及我们此行的目标——那个空闲的M.2插槽。插槽通常位于板子的一侧由一个很小的固定螺丝固定着。3.2 安装M.2 NVMe SSD找到M.2插槽它看起来是一个长约3厘米的短插槽旁边印有“M.2 KEY M”字样。插槽末端有一个螺丝柱上面可能已经预装了一个“固定螺丝”也叫“螺丝柱”或“standoff”或者是一个塑料卡扣。安装SSD将SSD以约30度角插入M.2插槽。注意SSD金手指的缺口要与插槽的凸起对应NVMe SSD是单缺口。轻轻向下按压SSD的另一端直到SSD的金手指完全没入插槽并且SSD的PCB板呈水平状态。使用刚才卸下的或插槽旁边预留的那颗小螺丝将SSD末端的螺丝孔固定在螺丝柱上。拧紧的力度要适中感觉到有阻力后再稍微加一点力即可过度拧紧可能损坏SSD或主板上的螺纹。可选添加导热垫如果你准备了导热硅胶垫现在可以将其贴在SSD的主控芯片和NAND闪存芯片上。垫片厚度要合适确保在装上底壳后能被轻微压紧起到导热作用即可不要过厚。复原设备将金属底壳对准位置先让四周的卡扣初步对齐然后用手掌均匀按压底壳四周听到轻微的“咔哒”声表示卡扣已扣回。最后将8颗底部螺丝重新拧回原位。同样力度适中避免滑丝。至此硬件安装部分就圆满完成了。整个过程最需要小心的是拆卸外壳和拧螺丝只要工具合适、动作轻柔基本不会有风险。4. 系统配置让Ubuntu识别并使用新硬盘硬件装好了但系统还不知道它的存在。我们需要进入Linux系统进行分区、格式化和挂载。4.1 启动系统并识别新硬盘将Jetson AGX Orin连接上显示器、键盘鼠标和电源开机。进入Ubuntu桌面后打开终端CtrlAltT。首先我们需要确认系统是否已经识别到了新的NVMe设备。使用lsblk命令查看所有块设备sudo lsblk -o NAME,SIZE,FSTYPE,MOUNTPOINT,MODEL你应该能看到类似下面的输出NAME SIZE FSTYPE MOUNTPOINT MODEL mmcblk0 58.2G ext4 / eMMC ├─mmcblk0p1 58.2G ext4 / └─mmcblk0p2 4.2M vfat /boot/efi nvme0n1 476.9G # 这就是我们新加的NVMe SSD这里nvme0n1就是新硬盘的设备名如果是第二个NVMe设备可能是nvme1n1。它还没有分区没有p1p2这样的子项也没有文件系统类型FSTYPE为空。4.2 使用fdisk进行分区我们将使用fdisk工具为这块新硬盘创建一个分区。这里假设你想把整个硬盘作为一个单独的分区使用这是最常见和简单的做法。使用sudo fdisk /dev/nvme0n1命令进入fdisk交互界面。输入g然后回车创建一个新的GPT分区表。这对于大容量现代硬盘是推荐的选择。输入n然后回车创建一个新分区。接下来会有一系列提示分区号直接回车使用默认值1。第一个扇区直接回车从默认起始位置开始。最后一个扇区直接回车使用所有剩余空间。输入p然后回车打印分区表确认分区/dev/nvme0n1p1已经创建大小正确。关键步骤输入t然后回车来更改分区类型。分区1应该已经被自动选中。当询问“Hex code”时输入1然后回车。这会将分区类型设置为“EFI System”这对于后续可能的多系统引导或某些工具是友好的。当然如果你确定只做数据盘也可以保持默认的Linux filesystem类型代码8300。最后输入w然后回车将分区表写入硬盘并退出。这个操作是不可逆的请务必确认前序步骤正确。4.3 格式化分区并创建文件系统分区创建好后需要为其创建一个文件系统才能存储数据。对于Linux系统ext4是一个稳定、高效且兼容性好的选择。使用以下命令将新分区格式化为ext4文件系统sudo mkfs.ext4 /dev/nvme0n1p1系统会提示你确认输入y并回车。格式化过程很快几秒钟即可完成。参数选择解析为什么选ext4而不是xfs或btrfsext4是Ubuntu的默认文件系统其日志机制成熟可靠在意外断电等情况下数据恢复能力较强且与Jetson系统的工具链如e2fsck检查工具集成最好。xfs在处理超大文件时可能有优势但对我们当前场景提升不大。btrfs功能强大但相对复杂在嵌入式稳定运行场景下ext4是更稳妥的选择。4.4 挂载分区并设置开机自动挂载现在我们可以手动挂载分区来测试并配置系统在每次启动时自动挂载它。创建挂载点选择一个目录作为SSD的访问入口。通常我们会在/media或根目录下创建一个。例如sudo mkdir /data这里我选择创建/data目录简洁明了。临时挂载测试sudo mount /dev/nvme0n1p1 /data运行后使用df -h命令查看应该能看到/dev/nvme0n1p1已经挂载到了/data并且显示了可用空间。获取分区的UUID为了在启动配置中可靠地识别分区我们需要使用它的UUID全局唯一标识符而不是设备名/dev/nvme0n1p1因为设备名在某些情况下可能会变。使用以下命令查看sudo blkid /dev/nvme0n1p1输出中会包含类似UUIDa1b2c3d4-e5f6-7890-g1h2-i3j4k5l6m7n8的信息。复制这个很长的字符串。配置开机自动挂载编辑系统文件系统表/etc/fstab。sudo nano /etc/fstab在文件末尾添加一行UUIDa1b2c3d4-e5f6-7890-g1h2-i3j4k5l6m7n8 /data ext4 defaults,nofail 0 2UUID...替换为你刚才复制的实际UUID。/data挂载点。ext4文件系统类型。defaults使用默认挂载选项包含读写权限等。nofail这个选项非常重要它告诉系统即使启动时这块硬盘不存在比如你后来拔掉了也不要导致系统启动失败。对于可移动或后加的存储设备务必加上此选项。0 2最后的两个数字。第一个0表示不使用dump备份工具第二个2表示在启动时用fsck检查文件系统的优先级根目录/是1其他普通分区是2。测试并应用配置保存并退出编辑器。为了测试fstab配置是否正确且不重启系统可以运行sudo mount -a这个命令会挂载fstab中所有未挂载的设备。如果没有报错再用df -h和ls /data检查一下确认挂载成功且目录可访问。现在你的SSD已经成为了Jetson系统的一部分。重启设备SSD也会自动挂载到/data可以像使用本地文件夹一样使用它了。5. 性能测试与优化配置硬盘装上了系统也认了但它跑得到底有多快我们需要进行基准测试并根据结果进行一些优化确保其发挥出在Orin平台上的最佳性能。5.1 使用FIO进行专业磁盘性能测试dd命令虽然简单但测试的是顺序读写对于AI和系统运行中大量的小文件、随机读写场景参考价值有限。我推荐使用更专业的fioFlexible I/O Tester工具。安装fiosudo apt update sudo apt install fio -y测试随机读写4K块队列深度64这是模拟数据库、文件系统元数据操作等真实负载的关键测试。随机读测试sudo fio --namerandom-read --ioenginelibaio --iodepth64 --rwrandread --bs4k --direct1 --size1G --numjobs1 --runtime60 --group_reporting --filename/data/testfile随机写测试sudo fio --namerandom-write --ioenginelibaio --iodepth64 --rwrandwrite --bs4k --direct1 --size1G --numjobs1 --runtime60 --group_reporting --filename/data/testfile参数解读--direct1绕过系统缓存测试真实磁盘性能。--iodepth64较高的队列深度能压出SSD的峰值IOPS。--bs4k4KB小块是许多系统操作的典型大小。--size1G测试文件大小1GB足够且不会过度磨损SSD。--runtime60测试时长60秒。测试完成后重点关注输出中的iops值每秒读写操作数。对于一块不错的NVMe SSD在Orin上随机读的IOPS达到数万甚至十几万随机写达到几万是比较正常的。如果结果远低于预期例如只有几千可能需要排查问题。测试顺序读写1M块模拟大文件连续读写如视频流、数据集加载。# 顺序读 sudo fio --nameseq-read --ioenginelibaio --iodepth32 --rwread --bs1M --direct1 --size1G --numjobs1 --runtime60 --group_reporting --filename/data/testfile # 顺序写 sudo fio --nameseq-write --ioenginelibaio --iodepth32 --rwwrite --bs1M --direct1 --size1G --numjobs1 --runtime60 --group_reporting --filename/data/testfile关注输出中的bw带宽单位KB/s或MB/s。受限于Orin的PCIe通道和平台性能顺序读写速度可能无法达到消费级PC上的峰值如7000MB/s能达到1000-2000MB/s就已经是非常好的成绩足以碾压eMMC。5.2 性能瓶颈分析与优化建议在Jetson这样的嵌入式平台上SSD性能可能无法达到标称值这是正常的。瓶颈可能来自PCIe通道共享Orin的PCIe通道可能与其他高速外设如某些载板上的网卡、PCIe插槽共享带宽。CPU/SoC性能NVMe驱动、文件系统处理需要消耗CPU资源在Orin的ARM CPU上其单核性能与x86桌面CPU有差距可能无法完全驱动高端SSD。散热与功耗限制紧凑的机身可能导致SSD在持续高负载下因过热而降速。你可以通过sudo apt install nvme-cli然后使用sudo nvme smart-log /dev/nvme0来查看SSD的温度。优化建议调整I/O调度器Linux内核有不同的I/O调度算法。对于NVMe SSD通常建议使用none调度器即Noop因为它没有额外的排序逻辑延迟最低。可以使用以下命令查看和设置cat /sys/block/nvme0n1/queue/scheduler # 输出可能为[mq-deadline] kyber bfq none echo none | sudo tee /sys/block/nvme0n1/queue/scheduler要让设置永久生效可以创建udev规则或修改内核引导参数但这需要更深入的系统配置对于一般应用性能提升感知可能不明显。启用TRIM支持TRIM命令帮助SSD回收已删除数据占用的块维持长期写入性能。ext4文件系统默认支持discard一种实时TRIM但可能会对突发写入性能有轻微影响。更推荐使用周期性的fstrimsudo fstrim -v /data可以将其加入每周的cron任务中sudo crontab -e # 添加一行例如每周日凌晨3点执行 0 3 * * 0 /sbin/fstrim /data合理规划数据存放将需要频繁读写的工作目录、Docker容器存储、数据库文件等设置到SSD挂载点如/data下。例如可以在/data下建立workspace、docker等子目录并通过软链接或直接修改应用配置来指向它们。6. 高级应用与系统集成现在SSD已经稳定运行我们可以把它深度集成到开发工作流中最大化利用其性能优势。6.1 将Docker数据目录迁移至SSD如果你在Jetson上使用Docker默认的镜像和容器存储位置在/var/lib/docker这仍在eMMC上。迁移到SSD可以极大提升容器启动和运行效率。停止Docker服务sudo systemctl stop docker docker.socket备份并迁移现有数据sudo cp -rp /var/lib/docker /data/修改Docker配置编辑Docker的daemon配置文件。sudo nano /etc/docker/daemon.json如果文件不存在就新建一个。添加以下内容假设你的SSD挂载在/data{ data-root: /data/docker }重启Docker并验证sudo systemctl start docker sudo docker info | grep Docker Root Dir输出应该显示Docker Root Dir: /data/docker。重要警告此操作会改变Docker的所有数据路径。确保/data/docker目录备份或迁移成功后再修改配置。如果操作失误导致Docker无法启动可以删除/etc/docker/daemon.json文件并恢复原/var/lib/docker目录。6.2 将conda/pip缓存与虚拟环境置于SSDPython包管理工具下载的缓存和创建的虚拟环境也会占用大量空间和IO。修改pip缓存路径设置环境变量可以写入~/.bashrc。echo export PIP_CACHE_DIR/data/.cache/pip ~/.bashrc source ~/.bashrc修改conda环境默认路径如果你使用conda可以修改.condarc文件。conda config --add envs_dirs /data/anaconda3/envs conda config --add pkgs_dirs /data/anaconda3/pkgs之后新创建的conda环境就会在SSD上了。6.3 为ROS2工作空间提供高速存储对于机器人开发者ROS2工作空间在编译时会产生大量中间文件读写非常频繁。直接在SSD上创建你的ROS2工作空间mkdir -p /data/ros2_ws/src cd /data/ros2_ws从此在这个目录下进行colcon build等操作编译速度会有显著提升尤其是首次编译和清理后重新编译。6.4 使用SSD作为交换分区谨慎操作如果你的应用内存消耗极大可以考虑用SSD的一部分空间创建交换文件作为虚拟内存。这比使用eMMC上的交换文件快得多。创建交换文件例如8GBsudo fallocate -l 8G /data/swapfile sudo chmod 600 /data/swapfile sudo mkswap /data/swapfile启用交换文件sudo swapon /data/swapfile开机自动启用在/etc/fstab中添加一行/data/swapfile none swap sw 0 0注意频繁使用交换分区会显著增加SSD的写入量可能影响其寿命。仅建议在物理内存确实不足且应用对性能不极度敏感的情况下作为临时解决方案。优先考虑优化应用内存使用。7. 故障排除与常见问题即使按照步骤操作你也可能会遇到一些问题。这里汇总了一些常见情况及其解决方法。7.1 系统无法识别NVMe SSD症状lsblk或sudo lspci | grep -i nvme命令看不到新硬盘。排查步骤硬件连接首先关机断电重新打开外壳检查SSD是否完全插入插槽固定螺丝是否拧紧。金手指是否有污渍可以尝试用橡皮轻轻擦拭后重新安装。BIOS/UEFI设置Jetson AGX Orin的启动配置中可能需要启用NVMe控制器。进入启动引导界面开机时按Esc或Del键具体按键因载板而异在高级设置或PCIe配置中查看NVMe控制器是否处于Enabled状态。内核驱动运行dmesg | grep -i nvme查看内核启动日志。如果看到关于NVMe的错误信息可能是内核模块未加载。尝试手动加载sudo modprobe nvme。如果模块不存在可能需要更新你的JetPack SDK或内核。7.2 SSD性能远低于预期症状fio测试结果非常低例如顺序读写只有几百MB/s随机IOPS只有几千。排查步骤散热问题运行sudo nvme smart-log /dev/nvme0 | grep temperature。如果温度持续高于70°C很可能因过热降速。确保设备通风良好可以考虑在SSD与外壳间添加导热垫。PCIe链路速度运行sudo lspci -vv -s $(lspci | grep -i nvme | awk {print $1}) | grep -i LnkSta。查看“Speed”和“Width”。理想状态应为“Speed 8GT/s” (PCIe Gen3) 或 “16GT/s” (PCIe Gen4) “Width x4”。如果显示为x2或x1速度减半或降至1/4可能是硬件连接问题或BIOS设置限制。电源管理检查PCIe设备的电源管理是否限制了性能。可以尝试在/etc/default/grub文件中的GRUB_CMDLINE_LINUX_DEFAULT行添加pcie_aspmoff参数然后运行sudo update-grub并重启。但这可能会略微增加功耗。SSD本身问题不排除SSD有质量问题。可以尝试在x86电脑上测试同一块SSD对比性能。7.3 开机时出现“磁盘检查”或“emergency mode”症状系统启动变慢甚至进入紧急模式提示无法挂载/data。原因通常是/etc/fstab文件配置错误特别是UUID写错或者没有添加nofail选项导致系统在硬盘未就绪时无限等待。解决方法在启动时如果进入紧急模式会提供一个root shell。首先检查你的SSD设备名是否还是nvme0n1p1lsblk。检查你输入的UUID是否正确blkid /dev/nvme0n1p1。编辑/etc/fstab文件进行修正nano /etc/fstab。务必确认添加了nofail选项。修正后运行mount -a测试无误后重启。7.4 权限问题无法在/data目录下写入文件症状挂载成功后普通用户无法在/data目录下创建文件或文件夹提示“Permission denied”。原因ext4文件系统挂载后目录的属主和权限默认是root。解决方法将挂载点的所有权更改给你的用户假设你的用户名是jetsonsudo chown -R jetson:jetson /data或者如果你希望所有用户都能读写可以更改目录权限安全性较低sudo chmod -R 777 /data # 不推荐在生产环境使用更精细的做法是在/etc/fstab中使用特定的挂载选项如uid1000,gid10001000通常是第一个创建用户的ID可以在挂载时直接设置属主。整个项目从硬件拆装到系统调优到这里就全部完成了。我个人最大的体会是给Jetson AGX Orin加装SSD其价值远超简单的容量提升。它从根本上改变了设备的I/O能力让数据密集型应用从“能跑”变成了“跑得畅快”。尤其是在处理连续的视频流、频繁读写模型文件或者运行需要大量临时空间的编译任务时那种流畅感的提升是实实在在的。最后一个小建议定期用fstrim维护一下你的SSD就像给车做保养一样能让它长久保持最佳状态。
返回列表