LabHub
学习 学习路径 课程

Rootless Podman 运维

把 graph root 挪到新路径

在 LabHub 中继续学习

目标

将 rootless podman 的 graph root 从主目录迁移到独立路径,并用镜像重新填充新存储。这是实际工作中最常执行的 podman 运维任务之一。

为什么重要

rootless podman 的镜像会累积在 ~/.local/share/containers/storage 中。在一个 CUDA 基础镜像就有 8GB 的 GPU 服务器上,主目录分区很快就会被占满。而一旦主目录已满,不仅 podman,该用户的所有工作都会停止。因此,GPU 节点的标准配置通常直接包含 graphroot 迁移。

需要注意两点。新存储是空的——原有镜像仍留在旧路径,而 podman 不再查看它们。此外,不要迁移 runroot——其中保存运行时锁和临时状态,因此它应位于 tmpfs 上。

步骤

  1. 创建 /root/gr 目录,把 podster 当前的 graphRootrunRoot 各写一行到 /root/gr/before.txt(graphRoot 在前)。
  2. 创建新路径 /srv/podman/podster,将所有者设为 podster,权限设为 700
  3. podsterstorage.conf 中,将 graphroot 改为新路径。
  4. 使用 podman info 确认 graphRoot 是否为新路径,并将其作为一行写入 /root/gr/after.txt
  5. 将新存储的镜像数量以单独一行数字写入 /root/gr/empty.txt。该值应为 0
  6. /opt/images/labhub-alpine.tar 加载到新存储,并把加载后的镜像列表保存到 /root/gr/images.txt。其中必须至少有 1 个镜像。
  7. 创建包含以下 2 行的 /root/gr/runroot.txtRUNROOT=<현재 runRoot 값> / WHY=tmpfs
  8. 创建包含以下 4 行的 /root/gr/report.txtOLD=<1번의 graphRoot> / NEW=/srv/podman/podster / IMAGES_BEFORE=0 / IMAGES_AFTER=<6번 이후 이미지 개수>

参考

记录当前路径

创建 /root/gr 目录,把 podster 当前的 graphRootrunRoot 各写一行到 /root/gr/before.txt(graphRoot 在前)。

podman info 支持使用 Go 模板仅提取指定值。相关路径位于 Store 之下。

准备新路径

创建新路径 /srv/podman/podster,将所有者设为 podster,权限设为 700

所有者和权限非常重要。该用户必须能够读写,而其他人不应能查看。

修改 storage.conf

podsterstorage.conf 中,将 graphroot 改为新路径。

只需修改 [storage] 段中的 graphroot 值。请保留引号。

确认新路径已生效

使用 podman info 确认 graphRoot 是否为新路径,并将其作为一行写入 /root/gr/after.txt

修改配置后再次运行 info,值应发生变化。如果没有变化,请检查所有权或路径。

确认新存储为空

将新存储的镜像数量以单独一行数字写入 /root/gr/empty.txt。该值应为 0

查询镜像列表时,应只有表头而没有条目。统计数量并写入文件。

加载镜像归档

/opt/images/labhub-alpine.tar 加载到新存储,并把加载后的镜像列表保存到 /root/gr/images.txt。其中必须至少有 1 个镜像。

podman 提供从 tar 归档读取镜像的命令。加载后,镜像应出现在列表中。

确认 runroot 并记录依据

创建包含以下 2 行的 /root/gr/runroot.txtRUNROOT=<현재 runRoot 값> / WHY=tmpfs

不要迁移 runroot。请使用指定关键字写明原因。

迁移报告

创建包含以下 4 行的 /root/gr/report.txtOLD=<1번의 graphRoot> / NEW=/srv/podman/podster / IMAGES_BEFORE=0 / IMAGES_AFTER=<6번 이후 이미지 개수>

汇总迁移前后的路径和镜像数量即可。各值必须来自实际检查结果。