存储空间告急?HeyGem定期清理建议来了
你是不是也遇到过这样的情况:HeyGem批量生成了几轮数字人视频后,服务器磁盘使用率突然飙到95%以上,/root/workspace/heygem-webui/outputs/目录里堆满了几百个MP4文件,连df -h都开始报警;想手动删又怕误删正在排队的任务结果,不删又担心下次生成直接失败——别急,这不是系统故障,而是所有高效使用者都会经历的“成长烦恼”。
本文不讲模型原理、不堆参数配置,只聚焦一个最实在的问题:如何让HeyGem长期稳定跑下去,不被自己生成的视频“撑爆”硬盘。我们将从空间占用根源出发,提供一套可立即执行、零风险、带自动化脚本的定期清理方案,涵盖手动清理技巧、智能归档策略、定时任务部署,以及关键的“什么能删、什么必须留”的判断原则。
1. 为什么HeyGem会快速吃掉大量存储空间?
先说结论:不是系统设计有问题,而是它太“尽职尽责”了。HeyGem默认将每一次成功生成的视频,无论质量高低、用途是否明确,全部原样保存在outputs/目录下,且不做任何自动清理。这在单次测试时毫无压力,但在批量生产场景中,空间消耗会呈指数级增长。
我们来算一笔账(基于v1.0默认配置):
| 项目 | 数值 | 说明 |
|---|---|---|
| 单视频平均大小 | 80–120 MB | 以720p、30秒口播视频为例,H.264编码,码率约2.5 Mbps |
| 每日生成量(中等规模) | 50–80条 | 教育课件、产品介绍、客服应答等常见场景 |
| 日均新增空间 | 4–9 GB | 不含中间缓存、日志、临时文件 |
| 一周未清理 | 28–63 GB | 足以填满一块128GB系统盘的可用空间 |
outputs/目录结构 | 平铺无分层 | 所有.mp4文件混存,无日期/任务ID前缀 |
更关键的是,HeyGem的WebUI历史记录页面(即“生成结果历史”区域)仅做前端展示,并不依赖文件存在性——也就是说,你手动删除了某个MP4文件,UI上该缩略图可能仍显示,但点击播放或下载会失败。这容易造成误判:“咦?这视频还在列表里,应该还能用”,实则已是“幽灵条目”。
所以,清理的第一步,不是急着删,而是建立对存储结构的清晰认知。
2. HeyGem核心存储路径与文件类型解析
HeyGem的存储行为高度结构化,所有数据均集中在以下三个物理路径。理解它们,是安全清理的前提:
2.1 主输出目录:/root/workspace/heygem-webui/outputs/
这是你最常打交道的地方,也是空间占用主力。其内部结构如下:
outputs/ ├── batch_20251201_142305/ ← 批量任务生成目录(按时间戳命名) │ ├── video_001.mp4 │ ├── video_002.mp4 │ └── result.zip ← 该批次打包文件(含全部MP4) ├── batch_20251202_091533/ │ ├── video_001.mp4 │ └── result.zip ├── single_20251201_164211.mp4 ← 单个模式生成文件(无子目录) ├── single_20251202_110845.mp4 └── latest_batch.zip ← WebUI“一键打包下载”生成的最新汇总包(软链接或副本)可安全清理项:
- 所有
batch_*/子目录(只要确认对应任务已验收交付) - 所有
single_*.mp4文件(只要本地已有备份或无需回溯) latest_batch.zip(它是result.zip的副本,非必需)
❌禁止删除项:
outputs/目录本身(删除会导致后续生成失败)- 任何正在WebUI“生成结果历史”中显示为“处理中”或“排队中”的对应文件(可通过日志确认状态)
2.2 输入缓存目录:/root/workspace/heygem-webui/inputs/
这是HeyGem读取素材的入口,包含:
inputs/ ├── audio.mp3 ← 批量模式当前音频(每次覆盖) ├── videos/ ← 批量模式视频池(多文件上传后存放于此) │ ├── template_a.mp4 │ └── template_b.mp4 └── single/ ← 单个模式临时上传区(通常为空)可安全清理项:
inputs/videos/内所有文件(HeyGem不自动清理,但新任务会覆盖)inputs/audio.mp3(同上,每次上传即替换)
❌谨慎操作项:
inputs/videos/目录本身(删除后需手动重建,否则上传失败)
2.3 运行日志与临时文件:/root/workspace/运行实时日志.log及系统临时区
/root/workspace/运行实时日志.log:文本日志,体积小(通常<10MB),但长期运行会累积。/tmp/及/var/tmp/:HeyGem运行时可能生成临时帧序列、解码缓存等,尤其在长视频处理中可达数GB。
可安全清理项:
- 日志文件可压缩归档(如
gzip 运行实时日志.log)或按月轮转 /tmp/下以heygem_、gradio_开头的临时目录(需确认HeyGem未运行中)
3. 手动清理四步法:快速释放空间,零误操作风险
当你急需腾出空间(比如磁盘已满、生成报错“No space left on device”),请严格按以下顺序操作。每一步都有明确验证点,杜绝手滑误删:
3.1 第一步:暂停服务,锁定当前状态
# 进入HeyGem项目目录 cd /root/workspace/heygem-webui # 停止WebUI服务(优雅终止,避免中断正在写入的文件) pkill -f "gradio" 2>/dev/null || echo "服务已停止" # 验证进程是否退出 pgrep -f "gradio" && echo " 仍有进程运行,请重试" || echo " 服务已安全停止"验证点:
pgrep返回空,表示无Gradio进程残留。这是后续清理的安全前提。
3.2 第二步:识别并保留“待验收”文件
打开WebUI历史页面(http://localhost:7860),截图保存当前“生成结果历史”列表,重点关注:
- 最新几条的状态(“已完成”、“处理中”、“失败”)
- 对应的视频名称(如
video_003.mp4)及其所在批次目录(如batch_20251202_091533/)
然后,在终端中列出最近3个批次目录,确认哪些是“已确认交付”的:
# 列出outputs下最新的5个批次目录(按修改时间倒序) ls -t outputs/batch_* 2>/dev/null | head -n 5 # 输出示例: # outputs/batch_20251202_091533 # outputs/batch_20251201_142305 # outputs/batch_20251130_160211 # outputs/batch_20251128_104522 # outputs/batch_20251125_183344保留规则:
- 最新1个批次目录(
batch_20251202_091533)→ 确认验收后再删 - 倒数第2个(
batch_20251201_142305)→ 若已交付客户,可标记为“待清理” - 更早的(
batch_20251130_160211及之前)→ 默认可清理
3.3 第三步:执行精准清理命令
在确认保留范围后,执行以下命令(请逐行复制,勿合并运行):
# 清理:所有“已确认交付”的旧批次(示例:删除20251130及更早的批次) find /root/workspace/heygem-webui/outputs/ -maxdepth 1 -type d -name "batch_202511[0-9]*" -exec rm -rf {} \; 2>/dev/null echo " 已清理2025年11月及更早的批次目录" # 清理:所有single_*.mp4文件(保留最近7天内的) find /root/workspace/heygem-webui/outputs/ -maxdepth 1 -type f -name "single_*.mp4" -mtime +7 -delete 2>/dev/null echo " 已清理7天前的单个模式视频" # 清理:inputs/videos/下所有文件(清空视频模板池) rm -f /root/workspace/heygem-webui/inputs/videos/* echo " 已清空输入视频池" # 清理:/tmp/下HeyGem相关临时文件 rm -rf /tmp/heygem_* /tmp/gradio_* 2>/dev/null echo " 已清理临时缓存"验证点:每条
echo后检查磁盘空间变化:df -h /root/workspace,应看到Use%明显下降。
3.4 第四步:重启服务,验证功能完整性
# 启动HeyGem bash start_app.sh & # 等待30秒,检查端口监听 sleep 30 lsof -i :7860 | grep LISTEN && echo " WebUI服务已启动" || echo "❌ 启动失败,请检查日志" # 快速验证:上传一个10秒MP3+10秒MP4,点击“开始生成”,确认能正常产出至此,一次安全、可控的手动清理完成。整个过程耗时通常不超过3分钟,释放空间可达数十GB。
4. 自动化清理方案:设置cron定时任务,一劳永逸
手动清理治标,自动化才是治本。我们推荐一个轻量、可靠、可审计的定时清理方案,每天凌晨2点自动执行,仅保留最近7天的产出。
4.1 创建清理脚本:/root/clean_heygem.sh
#!/bin/bash # 文件路径:/root/clean_heygem.sh # 功能:自动清理HeyGem过期文件,保留最近7天 LOG_FILE="/root/clean_heygem.log" DATE=$(date '+%Y-%m-%d %H:%M:%S') echo "[$DATE] 开始执行HeyGem自动清理" >> "$LOG_FILE" # 定义路径 OUTPUT_DIR="/root/workspace/heygem-webui/outputs" INPUT_VIDEO_DIR="/root/workspace/heygem-webui/inputs/videos" TMP_DIR="/tmp" # 清理outputs/下超过7天的batch_*目录 find "$OUTPUT_DIR" -maxdepth 1 -type d -name "batch_*" -mtime +7 -exec rm -rf {} \; 2>/dev/null if [ $? -eq 0 ]; then echo "[$DATE] 已清理outputs/下7天前的batch_*目录" >> "$LOG_FILE" else echo "[$DATE] outputs/清理未执行(可能无过期目录)" >> "$LOG_FILE" fi # 清理outputs/下超过7天的single_*.mp4 find "$OUTPUT_DIR" -maxdepth 1 -type f -name "single_*.mp4" -mtime +7 -delete 2>/dev/null echo "[$DATE] 已清理outputs/下7天前的single_*.mp4" >> "$LOG_FILE" # 清理inputs/videos/下所有文件(模板池每日清空) rm -f "$INPUT_VIDEO_DIR"/* echo "[$DATE] 已清空inputs/videos/" >> "$LOG_FILE" # 清理/tmp/下临时文件 rm -rf "$TMP_DIR"/heygem_* "$TMP_DIR"/gradio_* 2>/dev/null echo "[$DATE] 已清理/tmp/临时文件" >> "$LOG_FILE" # 压缩并轮转日志(保留最近30天) gzip -f "$LOG_FILE" 2>/dev/null find /root/clean_heygem.log.* -mtime +30 -delete 2>/dev/null echo "[$DATE] 清理完成" >> "$LOG_FILE" echo "----------------------------------------" >> "$LOG_FILE"4.2 设置执行权限并测试
# 添加执行权限 chmod +x /root/clean_heygem.sh # 手动运行一次,检查日志和效果 /root/clean_heygem.sh # 查看日志确认执行成功 tail -n 10 /root/clean_heygem.log4.3 添加到crontab(每天凌晨2点执行)
# 编辑root用户的crontab crontab -e在打开的编辑器中,添加以下行:
# 每天凌晨2点执行HeyGem自动清理 0 2 * * * /root/clean_heygem.sh保存退出。cron会自动加载。
验证点:
- 等待次日凌晨2:01,执行
tail -n 20 /root/clean_heygem.log.gz(需先gunzip)查看日志 - 或手动触发:
run-parts --test /etc/cron.daily(若放入daily目录)
该方案优势在于:
- 零侵入:不修改HeyGem源码,不依赖其内部逻辑
- 可审计:所有操作记录在独立日志,便于追溯
- 可伸缩:如需保留14天,只需改
-mtime +7为-mtime +14 - 失败安全:即使某次清理失败,不影响下次执行
5. 高阶建议:构建可持续的存储管理习惯
清理只是手段,建立长效管理机制才是目标。结合HeyGem的实际工作流,我们推荐三条实践原则:
5.1 “生成即归档”工作流
不要让HeyGem成为你的唯一存储库。每次生成任务完成后,立即执行:
- 在WebUI下载
result.zip到本地NAS或对象存储(如阿里云OSS、腾讯COS) - 在本地创建结构化归档目录:
/archive/heygem/20251202/课程A_英语版/ - 将ZIP解压,重命名视频为业务含义名(如
courseA_english_intro.mp4) - 最后一步:在HeyGem服务器上删除该批次目录
这样做的好处:HeyGem只保留“工作区”,真正资产在专业存储中,既安全又释放空间。
5.2 WebUI历史记录“瘦身”技巧
HeyGem的“生成结果历史”页面会随文件增多而变慢。可通过以下方式优化:
- 定期清空历史列表:在WebUI中,勾选所有已下载的视频,点击“🗑 批量删除选中”。注意:这只是删除UI索引,不删除磁盘文件,需配合上述清理脚本。
- 禁用缩略图自动生成(进阶):修改
/root/workspace/heygem-webui/webui.py中缩略图生成逻辑,或在Nginx反向代理层限制图片尺寸,减少内存占用。
5.3 监控告警前置化
与其等df -h报警,不如主动监控。一行命令即可实现:
# 当磁盘使用率超85%时,发邮件通知(需已配置mailutils) df /root/workspace | awk 'NR==2 {if ($5+0 > 85) print "ALERT: HeyGem disk usage is "$5"%"}' | mail -s "HeyGem Disk Alert" admin@yourcompany.com将其加入crontab每10分钟检查一次,真正做到防患于未然。
6. 总结:让HeyGem成为你内容生产的“永动机”,而非“空间黑洞”
HeyGem的强大,恰恰体现在它不知疲倦地为你生成高质量数字人视频;而它的“沉默”,也体现在它从不提醒你:“嘿,我快没地方存了”。本文提供的,不是一套复杂的运维体系,而是一套极简、可执行、经生产环境验证的日常维护法则:
- 认清根源:空间压力来自
outputs/的平铺式存储,而非系统缺陷; - 手动应急:四步法确保3分钟内安全释放数十GB;
- 自动守护:一个脚本+一条crontab,从此告别半夜清盘;
- 习惯升级:用“生成即归档”把HeyGem从存储中心降级为生产引擎。
真正的AI生产力,不在于单次生成多快,而在于能否7×24小时稳定输出。当你不再为磁盘空间提心吊胆,HeyGem才真正从一个工具,进化为你内容工厂里那台不知疲倦的永动机。
--- > **获取更多AI镜像** > > 想探索更多AI镜像和应用场景?访问 [CSDN星图镜像广场](https://ai.csdn.net/?utm_source=mirror_blog_end),提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。