> ## Documentation Index
> Fetch the complete documentation index at: https://docs.siflow.cn/llms.txt
> Use this file to discover all available pages before exploring further.

# 临时存储使用最佳实践

> 了解 Pod 临时存储的占用来源、查看方式、告警配置、清理方法和写入建议，避免临时存储写满导致负载被驱逐。

人工智能平台上的开发环境、训练任务和服务都会以 Pod 形式运行。本文介绍如何查看、告警、清理和迁移 Pod 临时存储数据，避免写满后导致负载被驱逐。

> [!WARNING]
>
> 如果临时存储写满，Pod 可能被系统驱逐，导致训练失败、开发环境中断或服务实例异常。需要保留、复用或持续增长的数据，应写入已挂载的 Volume。

## 什么是临时存储

在 Kubernetes 中，Pod 临时存储是存储在节点上的运行时空间，用于临时保存 Pod 运行过程中产生的数据，例如 `/tmp`、`/root`、`/usr` 等目录下的文件。临时存储的生命周期与 Pod 保持一致：Pod 被删除、重建、迁移或驱逐时，与其关联的临时存储也会被释放。

因此，写入临时存储的数据不具备持久性。需要在任务结束后继续使用的数据，例如数据集、实验结果、Checkpoint、模型文件、业务日志和长期缓存，不应只保存在容器本地路径中。

使用临时存储的常见场景包括：

| 场景 | 说明 |
| - | - |
| 容器文件系统 | 程序在容器内新建、下载或生成的文件，例如写入 `/tmp`、`/root`、`/usr`、`$HOME` 等路径的数据。 |
| 容器日志 | 程序输出到标准输出或标准错误的日志，例如 `stdout`、`stderr` 日志。 |
| 临时目录卷 | 平台为本次运行挂载的空目录，例如 `emptyDir`。 |

不同集群、实例规格和负载形态的临时存储额度可能不同。判断当前负载可用额度时，请以控制台详情页展示的用量、配额、使用率和状态为准。

## 查看当前用量

开发环境、训练任务、大模型推理服务和通用服务均支持在详情页查看 Pod 临时存储。进入对应对象详情页后，打开 **存储** 页签，重点关注已用量、配额、使用率和状态。

以下以训练任务为例：

![训练任务存储页签](https://mintcdn.com/siflow/fREmdYsbhH0eOurr/ai-platform/training/media/training-task-storage.png?fit=max\&auto=format\&n=fREmdYsbhH0eOurr\&q=85\&s=ca8ea27809430d61b8762243197c9895)

如果临时存储用量持续升高，先确认程序是否把日志、缓存、Checkpoint、中间文件或输出结果写入了容器本地路径。

## 配置磁盘告警

对于长时间运行的训练任务、开发环境或服务，建议配置磁盘告警，在临时存储或节点磁盘水位升高时及时收到通知。

1. 在 **告警 > 通知管理** 中准备可用的通知目标或联系人组，并确认通知对象处于启用状态。详情请参见 [管理告警通知目标](https://docs.siflow.cn/ai-platform/alerts/manage-alert-notification-targets.md)。

   没有启用的通知对象时，即使告警触发，平台也无法把告警发送给接收人。
2. 在 **告警 > 告警订阅** 中创建告警订阅。详情请参见 [创建告警订阅](https://docs.siflow.cn/ai-platform/alerts/create-alert-subscriptions.md)。

   创建时展开 **存储** 分类。若要同时接收 Pod 临时存储和节点磁盘水位的严重、警告告警，请勾选以下告警项：

   * `pod_disk_watermark-critical`
   * `pod_disk_watermark-warning`
   * `node_disk_watermark-critical`
   * `node_disk_watermark-warning`

   告警订阅创建后，可在告警总览中查看告警记录和投递结果；通知消息中通常会包含对应负载的直达链接，便于快速进入详情页排查。

## 清理高占用路径

当控制台显示临时存储占用过高时，应先停止继续向本地路径写入数据，再判断哪些数据需要保留。需要保留的数据应迁移到已挂载的 Volume；确认可丢弃的数据再执行清理。

常见可检查路径如下：

| 路径 | 常见内容 | 处理建议 |
| - | - | - |
| `$HOME/.cache` | `pip`、Hugging Face、`torch`、`uv` 等工具下载缓存。 | 通常占用较大。确认不影响当前进程后，可清理不再需要的缓存。 |
| `$HOME/.local` | `pip install --user` 安装的包。 | 确认依赖不再使用后再清理。 |
| `$HOME` 下的其他目录 | 用户下载、上传的文件，或脚本生成的中间文件、输出文件。 | 先迁移需要保留的数据，再删除可重新生成的文件。 |
| Conda 的 `pkgs` 目录 | Conda 包缓存。 | 可按 Conda 缓存清理方式释放空间。 |
| `/tmp`、`/var/tmp` | 运行期临时文件。 | 先查看内容和更新时间，再删除确认可丢弃的文件。 |
| 自定义日志路径 | 业务脚本写出的日志，例如 `~/xxx.log`。 | 限制日志大小，或迁移到 Volume 或日志系统。 |

如果 Pod 已经被驱逐，临时存储中的数据可能无法恢复。后续重新运行前，应先调整写入路径，避免同样的问题再次发生。

## 将缓存和输出写入 Volume

从源头避免临时存储写满，关键是把会持续增长、需要保留或需要复用的数据写入已挂载的 Volume，而不是容器本地目录。常见数据包括依赖缓存、模型缓存、训练 Checkpoint、任务输出、业务日志和大文件下载结果。

挂载路径通常形如 `/volume/<resource-pool>`。可以在启动命令、任务脚本或 `~/.bashrc` 中显式配置常用工具的缓存目录：

| 环境变量 | 建议用途 |
| - | - |
| `PIP_CACHE_DIR` | `pip` 下载缓存。 |
| `HF_HOME` | Hugging Face 缓存。 |
| `TORCH_HOME` | `torch hub` 权重和缓存。 |
| `CONDA_PKGS_DIRS` | Conda 包缓存。 |
| `TMPDIR` | 程序临时文件。 |

示例：

```bash theme={null}
export PIP_CACHE_DIR=/volume/<resource-pool>/<workspace>/cache/pip
export HF_HOME=/volume/<resource-pool>/<workspace>/cache/huggingface
export TORCH_HOME=/volume/<resource-pool>/<workspace>/cache/torch
export CONDA_PKGS_DIRS=/volume/<resource-pool>/<workspace>/cache/conda-pkgs
export TMPDIR=/volume/<resource-pool>/<workspace>/tmp
```

各类工具都可以按类似思路处理。如果某个开发工具或智能体工具默认把配置和缓存写入 `$HOME`，应优先查看该工具是否支持通过环境变量改写目录。

以 Claude Code 为例，默认配置和缓存通常写入 `$HOME`。如需将后续写入的数据放到已挂载的 Volume，可通过 `CLAUDE_CONFIG_DIR` 指定配置目录：

```bash theme={null}
export CLAUDE_CONFIG_DIR=/volume/<resource-pool>/<workspace>/claude
```

配置这类路径时，建议注意以下事项：

1. 使用绝对路径，不要使用相对路径。
2. 在工具启动前设置环境变量，例如写入 `~/.bashrc` 或启动命令；仅在工具配置文件中填写路径通常不会生效。
3. 修改后重启对应工具或进程，使新路径生效。
4. Claude Code 不支持通过 `--config-dir` 修改配置目录，应使用 `CLAUDE_CONFIG_DIR`。
5. 环境变量通常只影响后续新写入的数据，不会自动迁移旧目录中的文件，也不会迁移程序本体、项目文件或其他工具的缓存。

## 判断是否因临时存储写满被驱逐

如果训练任务失败、开发环境中断或服务实例异常，可进入对应对象详情页查看 **事件**。如果事件中出现与驱逐、磁盘压力、临时存储不足相关的信息，通常说明负载可能受到临时存储或节点磁盘水位影响。

排查时建议同时查看：

| 信息 | 用途 |
| - | - |
| **存储** | 判断 Pod 临时存储用量、配额、使用率和状态。 |
| **事件** | 判断是否出现驱逐、调度失败、磁盘压力等事件。 |
| **日志** | 判断程序是否持续写入大文件、缓存、日志或输出结果。 |
| **任务或服务配置** | 确认输出路径、缓存路径、Volume 挂载路径是否符合预期。 |

确认问题与临时存储相关后，应先调整写入路径或清理可丢弃数据，再重新启动开发环境、重提训练任务或重新发布服务。

## 常见问题

> [accordion] 为什么容器内看到的磁盘空间和控制台不一致？
>
> 在容器内执行 `df -h /` 时，看到的通常是所在节点或容器视角下的磁盘空间，不等同于当前 Pod 的临时存储配额。判断 Pod 临时存储是否接近上限时，应以控制台 **存储** 页签中，**Pod 临时存储** 的用量、配额和状态为准。

> [accordion] 如何判断哪些文件需要优先清理？
>
> 可以结合文件路径、文件修改时间和控制台用量变化判断。容器启动后新写入 `/tmp`、`/root`、`/usr`、`$HOME` 等本地路径的文件，更可能持续增加临时存储用量；镜像中自带的文件通常不需要作为清理重点。清理前请先确认文件是否仍被进程使用，是否需要迁移到 Volume。

> [accordion] 临时存储写满后数据还能恢复吗？
>
> 不一定。Pod 被驱逐、重建或迁移后，临时存储中的数据可能已经被释放。需要保留、复用或持续增长的数据，例如代码、数据集、Checkpoint、模型文件、实验结果、缓存和长期日志，应在运行过程中写入 Volume，不要等到 Pod 异常后再尝试恢复。


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.