刚拿到NVIDIA Jetson Nano或Xavier NX时,16GB的eMMC存储看起来勉强够用。但当你真正开始部署AI模型时,2GB的实际可用空间就像早高峰的地铁车厢——连转身都困难。我去年在部署YOLOv5目标检测模型时就吃过这个亏,刚装完PyTorch环境就收到"磁盘空间不足"的警告,被迫中断了项目进度。
存储瓶颈的三大痛点在实操中尤为明显:
实测数据显示,使用SSD扩容后:
给Xavier NX装上三星970 EVO Plus NVMe SSD后,我用fio做了组对比测试:
| 指标 | eMMC 5.1 | USB 3.0移动硬盘 | NVMe SSD |
|---|---|---|---|
| 顺序读(MB/s) | 320 | 210 | 3500 |
| 4K随机读(IOPS) | 12000 | 8500 | 500000 |
| 延迟(μs) | 900 | 1200 | 80 |
但别急着下单SSD!Jetson Nano的Type-C接口其实暗藏玄机:
去年帮创业团队选型时,我们做了个成本模型:
方案A(SSD路径)
方案B(USB路径)
有趣的是,6个月后回访发现:
第一次装M.2 SSD时,我犯了个低级错误——没撕散热贴!导致SSD在持续负载下很快降频。正确姿势应该是:
提示:遇到SSD不识别时,先检查BIOS设置。在UEFI Shell里输入
dmesg | grep nvme能看到设备初始化日志。
原始教程用的copy-rootfs-ssd.sh其实可以优化:
bash复制#!/bin/bash
# 添加进度条显示
pv /dev/mmcblk0p1 | dd of=/dev/nvme0n1p1 bs=1M
# 校验数据完整性
echo "Verifying..."
cmp /dev/mmcblk0p1 /dev/nvme0n1p1
更高级的玩法是用rsync增量同步:
bash复制rsync -aHAXxv --numeric-ids --progress --exclude={"/dev/*","/proc/*"} / /mnt/ssd/
测试了5款USB硬盘盒后,我发现供电不足会导致:
usb 2-1: reset high-speed USB)JBD2: Found checksum error)终极解决方案是:
/etc/rc.local添加:bash复制echo 1000 > /sys/class/gpio/export
echo out > /sys/class/gpio/gpio1000/direction
echo 1 > /sys/class/gpio/gpio1000/value # 启用USB供电增强
修改extlinux.conf时建议采用模板:
conf复制LABEL usb_boot
MENU LABEL USB Boot
KERNEL /boot/Image
INITRD /boot/initrd
APPEND ${cbootargs} root=PARTUUID=<你的UUID> rw
FDT /boot/tegra210-p3448-0000-p3449-0000-[ab]00.dtb
用这个Python脚本自动提取UUID:
python复制import subprocess
uuid = subprocess.check_output("blkid -s PARTUUID -o value /dev/sda1", shell=True)
print(f"root=PARTUUID={uuid.decode().strip()} rw")
去年给某工厂部署缺陷检测系统时,我们踩过的坑包括:
data=writeback模式在突然断电时丢失过训练数据,改用data=journal后稳定运行至今rsync迁移时忘了加-A参数,导致Docker容器全部报"Permission denied"有个取巧的监控方案——创建/usr/local/bin/stress_monitor:
bash复制#!/bin/bash
while true; do
echo "SSD Temp: $(smartctl -a /dev/nvme0 | grep Temperature)" >> /var/log/stress.log
echo "RAM Usage: $(free -m)" >> /var/log/stress.log
sleep 60
done
最后说个真实案例:某团队用USB SSD部署的机器人,在展会演示时因为观众踩到电源线导致文件系统损坏。现在我们的部署清单里永远多一项——准备两张同样系统的存储卡,一张运行一张热备。存储扩容不是终点,而是可靠性的新起点。