1. Jetson Nano 系统重装的核心逻辑与方案选型
Jetson Nano 到手之后,真正让人头疼的往往不是写代码,而是系统崩了之后怎么把它救回来。我自己前前后后重装过不下十次,从最开始对着黑屏手足无措,到后来能在十五分钟内完成从格式化到烧录的全流程,中间踩的坑足够写一本小册子。这篇文章就把这套流程完整拆开,讲清楚每一步背后的原理、为什么这么选、以及哪些地方最容易翻车。
Jetson Nano 本质上是一块 ARM 架构的嵌入式计算板,它没有传统 PC 那样的 BIOS 和硬盘,系统是跑在一张 microSD 卡上的。这一点决定了它的重装逻辑和普通电脑完全不同——你不需要进 BIOS 改启动项,也不需要 PE 盘,核心工作只有两件事:把卡格式化干净,把镜像烧录进去。听起来简单,但实际操作中,卡的质量、格式化工具的选择、烧录软件的参数设置,每一个环节都可能让你卡上几个小时。
先说清楚这套方案适合谁。如果你手里的 Jetson Nano 出现了无法开机、系统卡死、SSH 连不上、或者你想换一个全新的 Ubuntu 版本,那这套流程就是为你准备的。哪怕你之前从来没接触过嵌入式设备,只要跟着步骤走,也能独立完成。我下面会从方案选型的逻辑讲起,再进入具体的实操细节,最后把常见问题和排查技巧整理成速查表。
1.1 为什么重装系统是 Jetson Nano 的必修课
Jetson Nano 的使用场景决定了它特别容易需要重装。很多人拿它做 YOLOv5 推理、跑 Qwen 这类小模型、或者做边缘计算节点,这些任务对系统环境的依赖很强。你装了一个版本的 CUDA,又装了一个版本的 cuDNN,再装 PyTorch,版本之间稍微不匹配,整个环境就废了。更麻烦的是,Jetson Nano 的 eMMC 版本和 SD 卡版本在存储结构上还有差异,eMMC 版本一旦刷坏,恢复起来比 SD 卡版本复杂得多。
另一个高频场景是 SD 卡本身的问题。Jetson Nano 对 microSD 卡的要求比较高,读写速度不够或者质量差的卡,用一段时间就会出现文件系统损坏,表现为开机卡在 NVIDIA logo、或者进入系统后频繁报 I/O 错误。这种情况下,格式化往往解决不了问题,必须重新烧录镜像。我遇到过一张杂牌卡,格式化之后看着正常,烧录也成功,但开机就是进不去系统,换了一张三星的卡立刻就好了。所以重装系统这件事,不只是软件操作,还涉及到硬件的排查。
还有一类情况是系统升级导致的。Jetson Nano 官方支持的 Ubuntu 版本是 18.04 和 20.04,如果你试图升级到更高的版本,或者手动改了源,很容易把系统搞崩。这时候最省时间的做法不是修复,而是直接重装。我个人的经验是,只要系统层面的问题超过半小时还没定位到原因,重装的成本远低于继续排查的成本。
1.2 格式化与烧录的工具选型对比
格式化这一步,Windows 自带的格式化工具其实不太够用。它只能处理常见的 FAT32、exFAT、NTFS 格式,而 Jetson Nano 的镜像烧录需要把卡恢复到干净的状态,有时候还需要处理分区表残留的问题。我试过几种方案,下面这张表是我实际用下来的对比。
| 工具名称 | 适用场景 | 优点 | 缺点 |
|---|---|---|---|
| SD Card Formatter | 日常格式化 | 官方工具,操作简单,兼容性好 | 无法处理分区表损坏 |
| DiskGenius | 分区表修复 | 能删除所有分区,重建分区表 | 界面复杂,误操作风险高 |
| diskpart 命令行 | 彻底清理 | 系统自带,能清除只读属性 | 命令需要记,新手不友好 |
| balenaEtcher | 烧录兼格式化 | 烧录前会自动格式化 | 格式化选项少 |
我现在的习惯是,先用 SD Card Formatter 做一次快速格式化,如果卡还能正常识别,这一步就够了。如果卡出现无法格式化、显示只读、或者容量异常,那就上 diskpart 命令行,把卡彻底清干净。diskpart 的好处是它能处理一些 Windows 图形界面搞不定的情况,比如卡被写保护了,或者分区表乱了。
烧录工具方面,balenaEtcher 是用的最多的,因为它跨平台,Windows、Linux、macOS 都能用,而且烧录完会自动校验,这一点很重要。我见过有人用 Win32 Disk Imager 烧录,烧完不校验,结果开机失败,又得重来。balenaEtcher 的校验虽然多花几分钟,但能确保镜像写进去是完整的。另一个选择是 NVIDIA 官方的 SDK Manager,但那个主要是给 eMMC 版本用的,SD 卡版本用 balenaEtcher 就够了。
1.3 镜像版本的选择逻辑
镜像版本的选择直接决定了你后面能跑什么。NVIDIA 官方为 Jetson Nano 提供了几个版本的镜像,主要是 JetPack 4.6 系列,对应的 Ubuntu 是 18.04。后来也有社区维护的 Ubuntu 20.04 镜像,但官方支持不如 18.04 完善。如果你要跑 YOLOv5,JetPack 4.6 是稳妥的选择,因为 NVIDIA 的 TensorRT 和 CUDA 版本都是配套的。如果你要跑 Qwen 这类需要较新 Python 环境的模型,那可能得考虑 Ubuntu 20.04 的社区镜像,但要做好折腾依赖的准备。
我一般会建议先确认自己的需求。如果只是学习用,跑跑官方的示例,那 JetPack 4.6 的官方镜像最省心。如果是要做项目,需要特定的库版本,那就得先查清楚那个库对 CUDA 和 Python 版本的要求,再倒推选哪个镜像。这一步花十分钟查清楚,能省掉后面几个小时的折腾。
2. 格式化操作的深度拆解与实操要点
格式化听起来是个很基础的操作,但在 Jetson Nano 的重装流程里,它是最容易出问题的一步。我见过太多人卡在“microSD 卡无法格式化”这个提示上,最后以为是卡坏了,其实只是方法不对。这一章把格式化的各种情况和对应的处理方式讲透。
2.1 正常情况下的格式化流程
如果卡还能被电脑正常识别,格式化本身很简单。把 microSD 卡通过读卡器插到电脑上,打开“此电脑”,找到对应的盘符,右键选择“格式化”。文件系统选 exFAT 或者 FAT32 都行,因为后面烧录镜像的时候会覆盖掉。簇大小保持默认,勾选“快速格式化”,点开始就行。
但这里有个细节要注意:Jetson Nano 的镜像烧录会重建分区,所以格式化成什么文件系统其实不影响烧录结果。真正影响的是卡的状态是否干净。如果卡上有多个分区,或者有隐藏分区,Windows 的格式化可能只处理了当前可见的那个分区,其他分区还在。这种情况下,烧录工具可能会报错,或者烧录后系统启动异常。
我的做法是,格式化之前先打开“磁盘管理”,看看这张卡到底有几个分区。如果只有一个分区,那直接格式化没问题。如果有多个分区,或者有“未分配”的空间,那就得先把所有分区删掉,再重新建一个。这一步用磁盘管理就能做,右键每个分区选“删除卷”,全部删完后,卡会变成“未分配”状态,然后再新建简单卷,格式化。
2.2 卡无法格式化时的排查思路
“microSD 卡无法格式化”是我被问得最多的问题之一。这个提示背后可能有几种原因,处理方式各不相同。
第一种是写保护。有些 SD 卡侧面有一个物理的写保护开关,如果拨到了锁定位置,电脑就只能读不能写,格式化自然失败。这个开关很小,容易忽略,先检查一下。如果没有物理开关,那可能是卡被软件写保护了,这时候需要用 diskpart 来清除。
第二种是文件系统损坏。卡在异常断电或者拔出的情况下,文件系统可能损坏,Windows 的格式化工具处理不了。这时候可以试试用 diskpart 的 clean 命令。具体操作是:以管理员身份打开命令提示符,输入diskpart,然后list disk找到你的卡对应的磁盘编号,select disk X,最后clean。这个命令会把卡上所有分区信息清掉,相当于恢复出厂状态。执行完之后,再到磁盘管理里新建分区并格式化。
第三种是卡本身寿命到了。microSD 卡是有写入寿命的,尤其是用作系统盘的情况下,频繁读写会加速磨损。如果卡用了很久,而且格式化总是失败,那可能是闪存颗粒已经坏了。这种情况下,换卡是唯一的办法。我一般会建议用三星、闪迪这类品牌的高速卡,容量至少 32GB,Class 10 以上。便宜的杂牌卡虽然能用,但稳定性差很多,用在 Jetson Nano 上容易出问题。
2.3 格式化后的验证步骤
格式化完成之后,不要急着拔卡。先确认几件事:卡的总容量是否正常显示,有没有出现容量缩水的情况。有些卡损坏后会显示成很小的容量,比如 32GB 的卡只显示 30MB,这说明卡已经坏了。另外,可以在卡里随便拷一个文件,再删掉,确认读写正常。
还有一个容易被忽略的点是盘的盘符。有时候格式化之后,盘符会变,比如原来是 E 盘,格式化后变成了 F 盘。烧录工具一般会自动识别,但如果你手动选盘,一定要看清楚,别选错了把电脑的硬盘给烧了。我见过有人不小心选错盘,把移动硬盘的数据全毁了,这种错误代价太大。
提示:格式化之前,务必确认卡里没有重要数据。格式化是不可逆的操作,一旦执行,数据恢复的难度很大。
3. 镜像烧录的完整流程与参数解析
烧录是重装系统的核心步骤,也是决定成败的关键。这一章把 balenaEtcher 的烧录流程拆开,讲清楚每个选项的含义,以及烧录过程中可能遇到的问题。
3.1 镜像文件的获取与校验
镜像文件一般是从 NVIDIA 官网下载,文件格式是 .zip 或者 .img。下载完之后,第一件事是校验文件的完整性。NVIDIA 官网会提供 SHA256 校验值,你可以用命令行或者校验工具算一下下载文件的哈希值,对比一下。如果哈希值不一致,说明下载过程中文件损坏了,需要重新下载。这一步很多人会跳过,但它是避免烧录失败的第一道防线。
我遇到过好几次下载的镜像不完整,烧录到一半报错,或者烧录成功但开机失败。后来养成习惯,下载完先校验,校验通过再烧录,省了很多时间。校验命令在 Windows 上可以用certutil -hashfile 文件名 SHA256,在 Linux 上可以用sha256sum 文件名。
镜像文件下载后不需要解压,balenaEtcher 可以直接识别 .zip 文件。如果你解压了,得到的是 .img 文件,也可以直接烧录。但要注意,解压后的 .img 文件会占用很大的磁盘空间,Jetson Nano 的镜像解压后大概有 10GB 以上,确保你的电脑有足够的空间。
3.2 balenaEtcher 烧录的详细步骤
打开 balenaEtcher,界面很简洁,三步:选择镜像、选择目标盘、开始烧录。
第一步,点“Flash from file”,选择你下载的镜像文件。如果是 .zip 文件,直接选就行,Etcher 会自动处理。第二步,点“Select target”,选择你的 microSD 卡。这里要特别小心,Etcher 会列出所有可移动存储设备,如果你电脑上插了 U 盘或者其他存储卡,一定要看清楚再选。选错的后果就是那个设备的数据全没了。第三步,点“Flash”,开始烧录。
烧录过程中,Etcher 会显示进度条和剩余时间。烧录完成后,它会自动进行校验,这一步会再读一遍卡里的数据,和镜像对比。校验通过后,会显示“Flash Complete”。整个过程根据卡的速度,大概需要 10 到 20 分钟。高速卡会快一些,低速卡可能更久。
烧录完成后,Windows 可能会弹出一个提示,说“使用光盘之前需要格式化”,这是因为 Windows 不认识 Jetson Nano 的分区格式。这个提示直接关掉就行,不要点格式化。点了的话,烧录好的镜像就被破坏了,又得重来。
3.3 烧录失败的常见原因与处理
烧录失败的原因有很多,我整理了几种最常见的情况。
第一种是卡的速度太慢。有些卡标称是 Class 10,但实际写入速度很慢,烧录过程中会超时。这种情况下,Etcher 会报错,提示写入失败。解决办法是换一张速度更快的卡,或者用读卡器换一个 USB 接口,USB 3.0 的接口比 2.0 快很多。
第二种是读卡器的问题。有些便宜的读卡器稳定性差,烧录过程中会断开连接,导致烧录失败。我建议用品牌读卡器,或者直接用电脑自带的 SD 卡槽。如果用的是 USB 读卡器,尽量插在机箱后面的 USB 接口上,前面的接口有时候供电不足。
第三种是镜像文件损坏。前面提到的校验步骤就是为了排除这种情况。如果校验不通过,重新下载镜像。
第四种是卡本身有坏块。烧录过程中,如果写到坏块,会报错。这种情况下,卡基本可以报废了。可以用一些工具检测卡的坏块,但修复的可能性不大,换卡是最直接的办法。
注意:烧录完成后,不要急着拔卡。先安全弹出,等系统提示可以安全移除后再拔。直接拔卡可能导致数据没写完,烧录失败。
4. 系统启动与首次配置的关键细节
烧录完成只是第一步,把卡插到 Jetson Nano 上,开机,还有一堆配置要做。这一章讲清楚首次启动的流程和容易踩的坑。
4.1 首次开机的正确姿势
把烧录好的 microSD 卡插到 Jetson Nano 的卡槽里,注意方向,卡的金手指朝下,插到底会有一个轻微的卡扣感。然后接上电源、显示器、键盘鼠标。Jetson Nano 的电源接口是 Micro USB 或者 DC 圆口,取决于你的版本。官方推荐用 5V 4A 的 DC 电源,Micro USB 供电有时候功率不够,会导致开机失败或者运行不稳定。
接好线之后,按下电源键,等待系统启动。第一次启动会比较慢,因为系统要做一些初始化的工作,大概需要一到两分钟。屏幕上会先显示 NVIDIA 的 logo,然后进入 Ubuntu 的启动界面。如果卡在 logo 界面超过三分钟,那可能是烧录有问题,或者卡不兼容。
我遇到过一种情况,开机后屏幕一直是黑的,但电源灯亮着。后来发现是 HDMI 线的问题,换了一根线就好了。所以如果开机没反应,先检查线材和显示器,再怀疑系统。
4.2 系统初始化配置的步骤
第一次进入系统,Ubuntu 会引导你做一系列初始化配置。首先是选择语言,建议选 English,因为中文环境下有些终端命令会显示乱码。然后是键盘布局,选 English (US) 就行。接下来是时区,选 Shanghai。然后是创建用户,设置用户名和密码。这一步设置的密码后面会经常用到,比如 sudo 命令,所以记牢。
配置完成后,系统会重启。重启后进入桌面,这时候系统基本可用了。但还有几件事要做:更新软件源、安装必要的工具、配置 SSH。更新软件源可以用sudo apt update和sudo apt upgrade,但要注意,Jetson Nano 的官方源有时候会比较慢,可以换成国内的镜像源,速度会快很多。
SSH 的配置也很重要,尤其是你打算用电脑远程连接 Jetson Nano 的时候。默认情况下,SSH 服务是开启的,你只需要知道 Jetson Nano 的 IP 地址,就可以用ssh 用户名@IP连接。IP 地址可以在 Jetson Nano 的终端里用ifconfig查看,或者在路由器的管理界面里找。
4.3 首次启动后的环境检查
系统起来之后,别急着跑项目,先做几项检查。第一,确认 CUDA 和 cuDNN 是否正常。可以用nvcc -V查看 CUDA 版本,用dpkg -l | grep cudnn查看 cuDNN 版本。第二,确认 Python 版本,Jetson Nano 的 JetPack 4.6 自带 Python 3.6,如果你需要其他版本,得自己装。第三,确认 TensorRT 是否可用,可以用 Python 导入 tensorrt 试试。
这些检查看起来繁琐,但能帮你提前发现问题。我见过有人烧录完系统,直接开始装 PyTorch,结果发现 CUDA 版本不对,又得重装。先花五分钟检查,能省掉后面几个小时的返工。
5. 常见问题与排查技巧实录
这一章把我这些年遇到的各种问题整理成速查表,方便你遇到问题时快速定位。
5.1 烧录与启动问题速查表
| 问题现象 | 可能原因 | 解决方法 |
|---|---|---|
| 烧录到一半报错 | 卡速度慢或读卡器不稳定 | 换高速卡或换 USB 3.0 接口 |
| 烧录成功但开机黑屏 | HDMI 线或显示器问题 | 换线材,确认显示器输入源 |
| 开机卡在 NVIDIA logo | 镜像损坏或卡不兼容 | 重新烧录,换品牌卡 |
| 系统启动后频繁报 I/O 错误 | 卡有坏块或质量差 | 换卡 |
| 无法格式化 microSD 卡 | 写保护或文件系统损坏 | 检查物理开关,用 diskpart clean |
| 烧录后 Windows 提示格式化 | 分区格式不被 Windows 识别 | 忽略提示,不要格式化 |
5.2 独家避坑经验分享
第一个经验是关于卡的。Jetson Nano 对卡的兼容性比较挑剔,不是所有卡都能用。我试过几张不同品牌的卡,三星的 EVO 系列和闪迪的 Extreme 系列都比较稳,杂牌卡经常出问题。如果你手头的卡烧录后开机失败,先别怀疑系统,换一张卡试试。
第二个经验是关于电源的。Jetson Nano 在跑推理任务的时候功耗会上去,如果电源功率不够,会突然断电或者重启。我建议用 5V 4A 的 DC 电源,不要用 Micro USB 供电。另外,电源线也要用质量好的,太细的线压降大,也会导致供电不足。
第三个经验是关于烧录工具的。balenaEtcher 虽然好用,但有时候会抽风,比如识别不到卡,或者烧录进度卡住不动。遇到这种情况,先关掉 Etcher,拔掉读卡器,重新插,再打开 Etcher。如果还是不行,换一个 USB 接口试试。我遇到过 Etcher 识别不到卡,换到机箱后面的 USB 接口就好了。
第四个经验是关于系统备份的。系统装好之后,建议做一次备份。可以用dd命令把整个卡备份成镜像文件,下次再出问题,直接烧录备份镜像,省去重新配置的时间。备份命令是sudo dd if=/dev/sdX of=backup.img bs=4M,其中 /dev/sdX 是你的卡设备名。这个操作需要小心,别把 if 和 of 写反了,写反了会把镜像写到卡上,覆盖掉系统。
5.3 系统重装后的环境恢复技巧
重装系统之后,最烦的是重新配置环境。如果你之前装了很多库和工具,重装后要一个个装回来,很费时间。我的做法是,在系统正常的时候,把常用的配置和安装脚本整理成一个 shell 脚本,重装后直接跑一遍。比如安装 PyTorch、配置 pip 源、安装常用工具,都写进脚本里。
另外,pip 的源建议换成国内的镜像,下载速度会快很多。可以用pip config set global.index-url来设置。apt 的源也可以换,编辑/etc/apt/sources.list,把官方的源替换成国内的镜像源。这些配置在重装后能帮你省不少时间。
还有一个技巧是用 Docker。如果你把项目环境都放在 Docker 容器里,重装系统后只需要装好 Docker,然后拉取之前的镜像,环境就恢复了。Jetson Nano 支持 Docker,而且 NVIDIA 提供了适配的容器运行时。用 Docker 的好处是环境隔离,不会因为系统重装而丢失配置。我现在的项目基本都用 Docker 跑,重装系统后恢复环境只需要几分钟。
5.4 长期使用的维护建议
系统装好之后,日常使用中也有一些维护建议。第一,不要频繁断电,Jetson Nano 没有电池,突然断电容易损坏文件系统。关机用sudo shutdown now,等系统完全关闭后再拔电源。第二,定期清理日志和缓存,sudo apt autoremove和sudo apt clean可以清理不需要的包和缓存。第三,监控卡的寿命,可以用sudo smartctl或者一些工具查看卡的写入量,如果接近寿命上限,提前备份换卡。
我个人的习惯是,每半年做一次系统备份,把重要的配置和数据备份到外部存储。这样即使卡突然坏了,也能快速恢复。Jetson Nano 虽然是个小设备,但用好了能做的事情很多,花点时间维护是值得的。
最后再分享一个小技巧:如果你有多张 microSD 卡,可以给每张卡贴个标签,写上系统和用途。比如一张卡是 JetPack 4.6 基础系统,一张卡是 YOLOv5 环境,一张卡是 Qwen 测试环境。这样需要切换的时候,直接换卡就行,不用重装。这个习惯帮我省了很多时间,尤其是同时跑多个项目的时候。