Issue: 临时目录空间不足导致模版构建失败
问题描述
CubeSandbox 在从 OCI 镜像创建模版时,模版创建进度卡在 UNPACKING 20% 左右,最终超时失败。
环境信息
- 磁盘布局:
- 根分区
/dev/vda2: 50G,系统占用后仅剩 ~5G 空闲
- 数据分区
/dev/vdb: 200G,挂载至 /data/cubelet,有 ~150G 空闲
根本原因
1. 临时工作目录默认在根分区
CubeSandbox (cubemaster) 在创建模版时需要大量临时空间用于:
- 镜像解压
- rootfs 构建
- ext4 文件系统创建
默认情况下,临时工作目录 CUBEMASTER_ROOTFS_ARTIFACT_DIR 为 /tmp/cubemaster-rootfs-artifacts/,位于根分区。
2. 空间需求
对于一个 1.6GB 的 OCI 镜像,模版创建过程大约需要 8-10GB 的临时空间:
根分区仅剩 5GB 空间,无法满足需求。
解决方案
修改启动脚本 /usr/local/services/cubetoolbox/scripts/one-click/up.sh
添加 CUBEMASTER_ROOTFS_ARTIFACT_DIR 环境变量,将临时工作目录指向大分区:
# 新增:临时工作目录配置
CUBEMASTER_ROOTFS_ARTIFACT_DIR_DEFAULT="/data/cubelet/tmp/cubemaster-rootfs-artifacts"
CUBEMASTER_ROOTFS_ARTIFACT_DIR_CONFIGURED="${CUBEMASTER_ROOTFS_ARTIFACT_DIR:-}"
CUBEMASTER_ROOTFS_ARTIFACT_DIR="${CUBEMASTER_ROOTFS_ARTIFACT_DIR_CONFIGURED:-${CUBEMASTER_ROOTFS_ARTIFACT_DIR_DEFAULT}}"
# 配置临时工作目录(大分区)
if [[ -n "${CUBEMASTER_ROOTFS_ARTIFACT_DIR_CONFIGURED}" ]]; then
mkdir -p "${CUBEMASTER_ROOTFS_ARTIFACT_DIR}"
CUBEMASTER_ARTIFACT_DIR_EXPORT="export CUBEMASTER_ROOTFS_ARTIFACT_DIR=\"${CUBEMASTER_ROOTFS_ARTIFACT_DIR}\";"
elif mkdir -p "${CUBEMASTER_ROOTFS_ARTIFACT_DIR}" >/dev/null 2>&1; then
CUBEMASTER_ARTIFACT_DIR_EXPORT="export CUBEMASTER_ROOTFS_ARTIFACT_DIR=\"${CUBEMASTER_ROOTFS_ARTIFACT_DIR}\";"
else
log "cubemaster artifact work dir ${CUBEMASTER_ROOTFS_ARTIFACT_DIR} unavailable, using /tmp fallback"
fi
# 启动时传递环境变量
start_with_pidfile \
"cubemaster" \
"export CUBE_MASTER_CONFIG_PATH=\"${CUBEMASTER_CFG}\"; ${CUBEMASTER_ARTIFACT_STORE_EXPORT} ${CUBEMASTER_ARTIFACT_DIR_EXPORT} \"${CUBEMASTER_BIN}\""
环境变量说明
| 变量 |
用途 |
默认值 |
建议值 |
CUBEMASTER_ROOTFS_ARTIFACT_DIR |
临时工作目录 |
/tmp/cubemaster-rootfs-artifacts |
/data/cubelet/tmp/cubemaster-rootfs-artifacts |
CUBEMASTER_ROOTFS_ARTIFACT_STORE_DIR |
最终存储目录 |
/data/CubeMaster/storage |
/data/CubeMaster/storage |
建议改进
-
文档更新: 在部署文档中明确说明磁盘空间要求,建议根分区至少保留 20GB 空闲空间
-
默认配置优化: 建议官方安装脚本/配置默认将临时目录设置到大分区
-
空间检查: 在模版创建前检查临时目录可用空间,不足时提前报错而非卡住
-
清理机制: 添加失败模版的临时文件自动清理机制
验证方法
# 1. 检查环境变量是否生效
cat /proc/<cubemaster-pid>/environ | tr '\0' '\n' | grep CUBEMASTER_ROOTFS_ARTIFACT_DIR
# 2. 监控临时目录使用情况
watch -n 5 'du -sh /data/cubelet/tmp/cubemaster-rootfs-artifacts/*'
# 3. 检查模版创建进度
cubemastercli tpl ls
Issue: 临时目录空间不足导致模版构建失败
问题描述
CubeSandbox 在从 OCI 镜像创建模版时,模版创建进度卡在
UNPACKING20% 左右,最终超时失败。环境信息
/dev/vda2: 50G,系统占用后仅剩 ~5G 空闲/dev/vdb: 200G,挂载至/data/cubelet,有 ~150G 空闲根本原因
1. 临时工作目录默认在根分区
CubeSandbox (cubemaster) 在创建模版时需要大量临时空间用于:
默认情况下,临时工作目录
CUBEMASTER_ROOTFS_ARTIFACT_DIR为/tmp/cubemaster-rootfs-artifacts/,位于根分区。2. 空间需求
对于一个 1.6GB 的 OCI 镜像,模版创建过程大约需要 8-10GB 的临时空间:
根分区仅剩 5GB 空间,无法满足需求。
解决方案
修改启动脚本
/usr/local/services/cubetoolbox/scripts/one-click/up.sh添加
CUBEMASTER_ROOTFS_ARTIFACT_DIR环境变量,将临时工作目录指向大分区:环境变量说明
CUBEMASTER_ROOTFS_ARTIFACT_DIR/tmp/cubemaster-rootfs-artifacts/data/cubelet/tmp/cubemaster-rootfs-artifactsCUBEMASTER_ROOTFS_ARTIFACT_STORE_DIR/data/CubeMaster/storage/data/CubeMaster/storage建议改进
文档更新: 在部署文档中明确说明磁盘空间要求,建议根分区至少保留 20GB 空闲空间
默认配置优化: 建议官方安装脚本/配置默认将临时目录设置到大分区
空间检查: 在模版创建前检查临时目录可用空间,不足时提前报错而非卡住
清理机制: 添加失败模版的临时文件自动清理机制
验证方法