存储#

存储服务支持自动设置和配置连接到 Jetson 设备的外部存储(如硬盘),并作为名为 jetson-storage 的 systemd 服务提供。在启用或启动 jetson-storage 服务之前,您可能需要首先在自定义中自定义一些配置。并且在您通过以下方式启用 jetson-storage 服务后,该服务会在下次启动时自动检测并格式化可用的存储:

sudo systemctl enable jetson-storage

然后在后续启动时,它会根据配置文件 /opt/nvidia/jetson-configs/jetson-storage.conf/opt/nvidia/jetson-configs/storage-quota.json 配置存储设备,直到您通过运行以下命令禁用该服务:

sudo systemctl disable jetson-storage

注意

存储驱动器将挂载在 /data 下。如果根文件系统中存在现有的 /data 目录,则其内容将被挂载的存储隐藏。建议在启动存储服务之前删除 /data 中的任何现有内容,因为这些内容将继续占用根文件系统中的磁盘空间。

jetson-storage 服务将创建一个从 /var/lib/docker/data/docker-volume 的符号链接。如果您在启动 jetson-storage 服务之前已经运行了 docker,则 docker 服务将被停止,并且所有容器都将被终止。您可以手动通过 “systemctl start docker” 启动 docker 服务,或者重启您的设备,以便该服务可以再次启动并运行。原始 /var/lib/docker 目录中的现有文件将由 jetson-storage 服务移动到 /data/docker-volume,因此您先前下载的 docker 镜像将被保留。

注意

当删除软件包 nvidia-jetson-services 时,符号链接 /var/lib/docker 将被删除。重新启动 docker 服务时,将创建一个新的 /var/lib/docker 目录,因此您将无法访问 /data/docker-volume 中的任何先前数据。

恢复出厂设置#

如果您想使用先前被存储服务使用过的驱动器,并希望擦除旧数据并像新驱动器一样使用它,请重置磁盘标签(请参见以下示例)并重新启动存储服务,以便它将格式化驱动器并重新设置存储的文件系统。

禁用 LVM 时#

SATA: sudo e2label /dev/sda1 ""

NVMe: sudo e2label /dev/nvme0n1p1 ""

启用 LVM 时#

输入命令 sudo pvdisplay 以检查您的存储是否已格式化为 JPS 的 LVM 卷。如果您看到如下输出,并且 VG Namejetson-vg,您将需要先删除 LVM

--- Physical volume ---
PV Name               /dev/sda1
VG Name               jetson-vg
PV Size               <14.96 GiB / not usable 2.00 MiB
Allocatable           yes (but full)
PE Size               4.00 MiB
Total PE              3829
Free PE               0
Allocated PE          3829
PV UUID               J5Dgo3-205q-xLA9-z5QF-C7On-bHSK-mA9c1

输入命令 sudo vgremove -y jetson-vg 以删除 VG jetson-vg。然后通过以下方式删除 PV

SATA: sudo pvremove -y /dev/sda1

NVMe: sudo pvremove -y /dev/nvme0n1p1

在上面的示例中,将 /dev/sda1/dev/nvme0n1p1 替换为您的存储路径。如果您有多个存储,则需要为每个存储执行此操作。

自定义#

jetson-storage.conf#

/opt/nvidia/jetson-configs/jetson-storage.conf 中可以更改一些选项

LVM_ENABLED=1
ENCRYPTION_ENABLED=0
# User defined storage list, ex: ("/dev/sda" "/dev/nvme0n1" "dev/sdb")
# Only feasible when ENCRYPTION_ENABLED=0
STORAGE_PATH=()
MAX_STORAGE_NUM=5

LVM_ENABLED 用于为多个磁盘启用 LVM。自此版本以来,此选项默认设置。如果您是从先前禁用 LVM 的版本升级的,则需要编辑 /opt/nvidia/jetson-configs/jetson-storage.conf 并手动将其设置为 1。请注意,如果磁盘分区之前已格式化为 LVM 卷,请按照恢复出厂设置中的说明首先删除 LVM 分区,否则 jetson-storage 服务将被未知的 LVM 卷混淆并表现不当。

如果设置了 LVM_ENABLED,您可以在首次设置 jetson 存储后向系统中添加更多磁盘,只要总存储数量小于(或等于)下面提到的 MAX_STORAGE_NUM 即可。新存储将被正确格式化并添加到 LVM 中。除非您在高级 LVM 操作方面有丰富的经验,否则我们不建议您删除或更换任何 LVM 设备。稍后,当您在 jetson-storage 启动后有更多磁盘要添加到系统中时,您可以重新启动设备,以便服务可以在启动时设置您的新磁盘。或者您可以重新启动服务以通过以下方式添加新磁盘:

sudo systemctl restart jetson-storage

ENCRYPTION_ENABLED 用于在 Jetson 存储上启用磁盘加密。请参阅磁盘加密

STORAGE_PATH 是 Bash 中的一个数组。仅当禁用磁盘加密时,此选项才可行(ENCRYPTION_ENABLED 为 0)。您可以使用命令 sudo blkid 列出系统上的可用磁盘,并在启用 jetson-storage 之前指定要使用的存储,例如:

STORAGE_PATH=("/dev/sda")

如果 STORAGE_PATH 为空(默认情况下),则 jetson-storage 服务将自动选择可用的存储作为 Jetson 存储。

MAX_STORAGE_NUM 是您希望在 jetson-storage 服务中支持的最大存储数量。如果连接到您的 Jetson 的存储驱动器数量超过 MAX_STORAGE_NUM,请更新该值。STORAGE_PATH 中的存储驱动器数量不能超过 MAX_STORAGE_NUM

storage-quota.json#

默认的 /opt/nvidia/jetson-configs/storage-quota.json 包括一些微服务的项目,并且此文件将被应用程序包覆盖。以下是来自 ai_nvr 的一个示例,用于填写 storage-quota.json 中的必填字段。任何人都可以在文件底部添加自己的设置。该服务将创建一个系统用户,其中包含 name 和用户 id,并在后续版本中为用户配置磁盘配额,配额大小为 KiB 中指定的 quota。NVME 或 SATA HDD 分区挂载到 /data,其中包含子目录,这些子目录以 volume 命名,用于各种 Jetson 软件模块。以下是默认配置

{
       "default-group" : "logusers",
       "default-group-id" : "150",
       "jetson-quota" : [
               {
                       "name" : "ingress",
                       "id" : 2002,
                       "quota" : 1048576,
                       "volume" : "ingress-secrets-volume",
                       "in-group" : "logusers"
               },
               {
                       "name" : "redis",
                       "id" : 2003,
                       "quota" : 5242880,
                       "volume" : "redis-volume",
                       "in-group" : "logusers"
               },
               {
                       "name" : "logging",
                       "id" : 2004,
                       "quota" : 10485760,
                       "volume" : "logging-volume",
                       "in-group" : "logusers",
                       "share-volume" : "true"
               },
               {
                       "name" : "monitoring",
                       "id" : 2005,
                       "quota" : 5242880,
                       "volume" : "monitoring-volume",
                       "dirs" : "db",
                       "in-group" : "logusers"
               },
               {
                       "name": "vodi",
                       "id" : 2007,
                       "quota" : 104857600,
                       "volume" : "vodi-volume",
                       "in-group" : "logusers"
               },
               {
                       "name": "iotgateway",
                       "id" : 2008,
                       "quota" : 1048576,
                       "volume" : "iotgateway-volume",
                       "in-group" : "logusers"
               }
       ]
}

注意

在第一个版本中,定义的存储配额未强制执行。

磁盘加密#

您可以按照以下说明在 Jetson 存储上启用磁盘加密。

刷写#

请参阅 Jetson Linux 开发者指南中的“安全性 > 磁盘加密”部分,并首先使用磁盘加密刷写您的 Jetson 设备。以下是在 Jetson AGX Orin 和 Jetson Orin Nx 上启用磁盘加密的示例

  1. 根据 Jetson Linux 开发者指南生成 EKS 镜像,并覆盖 Linux_for_Tegra/bootloader/eks.imgLinux_for_Tegra/bootloader/eks_t234.img

  2. 生成默认 EKB 密钥

    cd Linux_for_Tegra
    echo "00000000000000000000000000000000" > ekb.key
    

注意

上面的零密钥只是一个示例。您应该将其替换为生成 EKS 镜像时设置的任何密钥。

  1. 将设备置于恢复模式

  2. 刷写 Jetson AGX Orin

    sudo ROOTFS_ENC=1 ./flash.sh -i "./ekb.key" jetson-agx-orin-devkit mmcblk0p1
    
  3. 刷写 Jetson Orin Nx

    sudo ./tools/kernel_flash/l4t_initrd_flash.sh --network usb0 --showlogs -p "-c bootloader/generic/cfg/flash_t234_qspi.xml" -i ./ekb.key --no-flash jetson-orin-nano-devkit internal
    sudo ROOTFS_ENC=1 ./tools/kernel_flash/l4t_initrd_flash.sh --network usb0 --showlogs --no-flash --external-device nvme0n1p1 -S 16GiB -c ./tools/kernel_flash/flash_l4t_t234_nvme_rootfs_enc.xml --external-only --append -i ./ekb.key jetson-orin-nano-devkit external
    sudo ./tools/kernel_flash/l4t_initrd_flash.sh --network usb0 --showlogs --flash-only
    

注意

默认情况下,根文件系统将被加密。您可以仅为外部存储启用磁盘加密,并将根文件系统分区保留为未加密。有关更多详细信息,请参阅 Jetson Linux 开发者指南。

启用#

按照快速入门指南中的说明安装 nvidia-jetson-services 软件包。

编辑 /opt/nvidia/jetson-configs/jetson-storage.conf 并将 ENCRYPTION_ENABLED 设置为 1

ENCRYPTION_ENABLED=1

然后启用 jetson-storage 服务

sudo systemctl enable jetson-storage

关闭您的 Jetson 设备电源,确保存储已正确插入,然后打开设备电源。请注意,jetson-storage 需要在启用 jetson-storage 后的首次启动时检测您的存储并将其添加到 LUKS 表中,因此您需要通过以下方式检查服务状态:

systemctl status jetson-storage

如果状态如下所示为 active (exited),请再次重启您的 Jetson,以便 Jetson 磁盘加密实用程序可以正确格式化和加密您的设备。

       ubuntu@tegra-ubuntu:~$ systemctl status jetson-storage
● jetson-storage.service - Jetson storage service
    Loaded: loaded (/lib/systemd/system/jetson-storage.service; enabled; vendor preset: enabled)
    Active: active (exited) since Thu 2023-11-23 02:49:37 UTC; 4 days ago
   Process: 4315 ExecStart=/opt/nvidia/jetson/services/storage/bin/jetson-storage-setup init (code=exited, status=0/SUCCESS)
  Main PID: 4315 (code=exited, status=0/SUCCESS)
       CPU: 597ms

所有可用的外部存储都将由 jetson-storage 服务检测并设置为 Jetson 存储。

现在,当您登录控制台时,您应该看到如下所示的挂载消息。您现在可以开始使用加密存储了。

 CURRENT STORAGE STATUS ON JETSON:
* Mount Point: /data
* Mount Path: /dev/mapper/jetson-enc-nvme0n1

Filesystem                      Size  Used Avail Use% Mounted on
/dev/mapper/jetson-enc-nvme0n1  1.9T   48K  1.8T   1% /data