1. 项目概述:为什么需要清理Jetson Nano存储空间
Jetson Nano作为一款嵌入式AI计算设备,其存储管理往往容易被开发者忽视。我使用Nano开发计算机视觉项目三年多,发现当eMMC存储占用超过80%后,系统响应速度会明显下降,TensorRT模型加载时间可能延长2-3倍。不同于普通PC,Nano的存储清理需要特别注意ARM架构下的软件包依赖关系和CUDA环境完整性。
典型需要清理的场景包括:
- 频繁安装/卸载不同版本的深度学习框架(如PyTorch各版本残留)
- 长期运行产生的日志堆积(尤其Docker容器日志)
- 临时构建文件未及时清理(OpenCV编译中间文件可能占用数GB)
- 冗余内核镜像(系统更新后旧内核未自动移除)
2. 存储占用分析实战
2.1 快速定位大文件
在Nano上推荐使用改进版的磁盘分析命令:
bash复制sudo du -h --max-depth=1 / 2>/dev/null | sort -hr | head -n 20
这个命令相比常规的df -h更能精确显示各目录实际占用,特别是:
/var/log(系统日志)/usr/local/cuda-xx.x(旧版CUDA残留)~/.cache(用户缓存)
注意:直接删除/usr下的文件可能破坏系统,需要先确认是否为活跃版本
2.2 专用工具分析
安装可视化分析工具ncdu:
bash复制sudo apt install ncdu
ncdu /
通过方向键导航,可以看到:
- 红色标注的目录代表可安全清理
- 按d键直接删除(比rm更安全)
3. 深度清理六大核心区域
3.1 系统日志清理
Jetson Nano默认日志轮转配置较保守,手动清理步骤:
bash复制# 查看日志大小
journalctl --disk-usage
# 保留最近100MB日志
sudo journalctl --vacuum-size=100M
# 禁用不必要服务的日志
sudo systemctl disable nvgetty.service
3.2 Docker系统清理
如果使用Docker,会产生大量孤立资源:
bash复制# 删除所有停止的容器
docker container prune
# 删除所有未被使用的网络
docker network prune
# 彻底清理(含build cache)
docker system prune -a
3.3 旧内核清理
Ubuntu系统更新后会保留旧内核,特别占用/boot分区:
bash复制# 查看当前内核
uname -r
# 列出所有已安装内核
dpkg --list | grep linux-image
# 安全删除旧内核(保留最近两个版本)
sudo apt purge linux-image-5.10.120-tegra
3.4 CUDA环境整理
多版本CUDA并存时,需要手动清理:
bash复制# 查看当前CUDA版本
nvcc --version
# 安全删除旧版本(示例)
sudo rm -rf /usr/local/cuda-10.2
# 更新环境变量
sudo nano ~/.bashrc
3.5 Python环境清理
pip安装的包可能占用大量空间:
bash复制# 查看包大小分布
pip list --format=freeze | cut -d= -f1 | xargs pip show | grep -E "Location|Name"
# 批量卸载无用包
pip uninstall numpy pandas matplotlib
3.6 交换空间优化
默认的swapfile可能不合理:
bash复制# 禁用当前swap
sudo swapoff /swapfile
# 创建新swap(建议为内存的1-2倍)
sudo fallocate -l 4G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
4. 自动化维护方案
4.1 创建定时清理脚本
新建/usr/local/bin/clean_nano.sh:
bash复制#!/bin/bash
# 自动清理日志
journalctl --vacuum-time=7d
# 清理apt缓存
apt-get autoremove -y
apt-get clean
# 清理用户缓存
rm -rf ~/.cache/*
# 清理临时文件
find /tmp -type f -atime +7 -delete
设置每周自动运行:
bash复制sudo chmod +x /usr/local/bin/clean_nano.sh
(crontab -l ; echo "0 3 * * 0 /usr/local/bin/clean_nano.sh") | crontab -
4.2 存储监控看板
安装并配置Netdata实时监控:
bash复制bash <(curl -Ss https://my-netdata.io/kickstart.sh)
访问http://[nano-ip]:19999可查看:
- 实时磁盘使用率
- 历史增长趋势
- 异常占用告警
5. 高阶维护技巧
5.1 系统目录迁移
将易增长的目录挂载到外部存储:
bash复制# 假设外接SSD在/mnt/ssd
sudo rsync -av /var/lib/docker /mnt/ssd/
sudo mv /var/lib/docker /var/lib/docker.bak
sudo ln -s /mnt/ssd/docker /var/lib/docker
5.2 最小化系统安装
对于生产环境,建议使用:
bash复制sudo apt install --no-install-recommends package-name
可减少30%-50%的依赖包安装
5.3 容器化方案
将开发环境容器化可避免污染主机:
dockerfile复制FROM nvcr.io/nvidia/l4t-base:r32.7.1
RUN apt-get update && apt-get install -y \
python3-pip \
&& rm -rf /var/lib/apt/lists/*
6. 常见问题排查
6.1 清理后系统异常
如果清理后出现库缺失错误:
bash复制# 重建dpkg数据库
sudo apt-get install --reinstall -o Dpkg::Options::="--force-confmiss" $(dpkg -l | grep '^ii' | awk '{print $2}')
6.2 空间未释放问题
有时删除文件后空间未释放:
bash复制# 查看被进程占用的已删除文件
lsof | grep deleted
# 重启相关服务或系统
sudo systemctl restart service-name
6.3 根目录爆满应急处理
当根目录100%占满时:
bash复制# 创建紧急清理空间
dd if=/dev/zero of=/cleanup bs=1M count=1024
# 执行关键清理后
rm /cleanup
我在实际维护多台Jetson Nano设备时发现,定期执行上述清理可使系统性能保持在新机的90%以上。特别是Docker和Python环境的清理,往往能一次性回收5-10GB空间。建议每月检查一次存储情况,在存储占用达到70%时就进行预防性清理。