文章目录
前言
如果你在使用 Jetson 开发套件,为了存储容器镜像和 rosbag 文件,你需要一个快速且大容量的存储设备。最好的方式是安装 NVMe SSD 到 Jetson 开发套件的载板上。
注意:通过 USB 3.x 连接 SSD 并不推荐,因为其读写速度比 NVMe(PCIe)接口慢
一、配置 Jetson 使用 NVMe SSD
选择以下方法之一来设置 Jetson 的 NVMe SSD:
- 在全新 Jetson 开发套件上安装 NVMe SSD,并使用运行在 Ubuntu PC 上的 SDK Manager 将整个 L4T(Jetson Linux)刷入 SSD。
- 将 L4T 刷入 Jetson 的 eMMC 或 microSD 卡,然后安装 NVMe SSD,并将其配置为 ROS2 工作区或 Docker overlay 文件的可选存储。
第一个选项更简单,但需要重新刷写整个 Jetson,会导致现有文件丢失。第二个选项虽然步骤更多,但可以避免重新刷写 Jetson
二、使用步骤
1.SSD 安装和自动挂载
- 断开 Jetson 开发套件的电源和所有外设
- 将 NVMe SSD 安装到 Jetson 开发套件的载板上,确保正确连接并用螺丝固定
- 重新插入电源线和外设,并启动 Jetson 开发套件。
验证系统是否识别到 PCI 总线上的新内存控制器:
lspci
典型输出应如下所示:
0007:01:00.0 Non-Volatile memory controller: Marvell Technology Group Ltd. Device 1322 (rev 02)
使用 lsblk 命令找到设备名称:
lsblk
典型输出应如下所示:
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
loop0 7:0 0 16M 1 loop
mmcblk1 179:0 0 59.5G 0 disk
...
nvme0n1 259:0 0 238.5G 0 disk
识别你的 SSD 对应的设备名称,在我的设备中为 nvme0n1
2.格式化 SSD,创建挂载点并挂载到文件系统(可以不格式化)
- 格式化(可选):
sudo mkfs.ext4 /dev/nvme0n1
#mkfs.ext4 格式化并转成ext4格式,可以看情况跳过这一步
- 挂载
sudo mkdir -p /mnt/nova_ssd
#自己选名字,我这里写的nova_ssd
sudo mount /dev/nvme0n1 /mnt/nova_ssd
- 为了确保挂载在启动后仍然有效,需要添加一个条目到 fstab 文件:
找到你的 SSD 的 UUID:
lsblk -f
- 编辑 fstab 文件(vim nano gedit 都行,看习惯):
sudo vi /etc/fstab
- 插入以下内容,替换为你的 UUID:
UUID=你的UUID /mnt/nova_ssd/ ext4 defaults 0 2
- 更改 /mnt/nova_ssd 目录的所有权:
sudo chown ${USER}:${USER} /mnt/nova_ssd
- 查看当前USER是谁
whoami
3. 迁移 Docker 目录到 SSD
- 将 nvidia 用户添加到 docker 组以便使用 docker 无需 sudo:
sudo usermod -aG docker $USER
id nvidia | grep docker
newgrp docker
- 停止 Docker 服务
sudo systemctl stop docker
- 移动现有的 Docker 文件夹:
sudo du -csh /var/lib/docker/ && \
sudo mkdir /mnt/nova_ssd/docker && \
sudo rsync -axPS /var/lib/docker/ /mnt/nova_ssd/docker/ && \
sudo du -csh /mnt/nova_ssd/docker/
- 编辑 /etc/docker/daemon.json 文件:
sudo vi /etc/docker/daemon.json
把下面内容复制进去做替换:
{
"runtimes": {
"nvidia": {
"path": "nvidia-container-runtime",
"runtimeArgs": []
}
},
"default-runtime": "nvidia",
"data-root": "/mnt/nova_ssd/docker"
}
- 重命名旧的 Docker 数据目录:
sudo mv /var/lib/docker /var/lib/docker.old
- 重新启动 Docker 守护进程:
sudo systemctl daemon-reload && \
sudo systemctl restart docker && \
sudo journalctl -u docker
3.在 SSD 上测试 Docker
- 打开一个终端监控磁盘使用情况:
watch -n1 df
- 在另一个终端开始 Docker 拉取:
docker pull nvcr.io/nvidia/l4t-base:r35.2.1
观察 /mnt/nova_ssd 的磁盘使用情况随着容器镜像的下载和解压而增加
4.最终验证
重新启动 Jetson,验证以下内容:
- 查找并显示已连接的 NVMe SSD 的 UUID
sudo blkid | grep nvme
典型输出:
/dev/nvme0n1: UUID="9fc06de1-7cf3-43e2-928a-53a9c03fc5d8" TYPE="ext4"
- 以人类可读的格式显示文件系统的磁盘空间使用情况
df -h
典型输出:
Filesystem Size Used Avail Use% Mounted on
/dev/mmcblk1p1 116G 18G 94G 16% /
...
/dev/nvme0n1 458G 824M 434G 1% /mnt/nova_ssd
- 从 Docker 的信息输出中筛选包含 “Root” 字符串的行
docker info | grep Root
典型输出:
Docker Root Dir: /mnt/nova_ssd/docker
三. 总结
至此, 你的 Jetson 现在已经配置好使用 SSD 了!