GitLab 项目清理维护指南:Rake 任务详解
前言
在 GitLab 的日常运维中,系统会积累各种不再需要的数据和文件,这些"垃圾"会占用宝贵的存储空间。本文将详细介绍 GitLab 提供的各种清理 Rake 任务,帮助管理员高效维护 GitLab 实例的健康状态。
清理未引用的 LFS 文件
背景知识
LFS (Large File Storage) 是 GitLab 用于管理大文件的扩展功能。当从仓库历史中移除 LFS 文件时,这些文件会变成孤立的,但仍然占用磁盘空间。
操作步骤
重要警告:不要在 GitLab 升级后 12 小时内执行此操作,以避免因后台迁移未完成而导致数据丢失。
- 首先执行检查(不实际删除):
sudo gitlab-rake gitlab:cleanup:orphan_lfs_file_references PROJECT_PATH="项目路径"
或
sudo gitlab-rake gitlab:cleanup:orphan_lfs_file_references PROJECT_ID="项目ID"
- 确认无误后执行实际删除:
sudo gitlab-rake gitlab:cleanup:orphan_lfs_file_references PROJECT_ID="项目ID" DRY_RUN=false
- 可选参数:
LIMIT={数字}
:限制删除的引用数量- 输出示例会显示已移除的无效引用数量
立即清理未引用的 LFS 文件
虽然 GitLab 会每天自动清理未引用的 LFS 文件,但如需立即清理可执行:
sudo gitlab-rake gitlab:cleanup:orphan_lfs_files
清理项目上传文件
文件系统清理
此任务会清理本地文件系统中不存在于数据库记录中的项目上传文件。它会尝试修复能找到对应项目的文件,否则将文件移至"lost and found"目录。
- 检查模式(默认):
sudo gitlab-rake gitlab:cleanup:project_uploads
- 实际执行清理:
sudo gitlab-rake gitlab:cleanup:project_uploads DRY_RUN=false
注意:如果使用对象存储,应先确保所有上传文件已迁移到对象存储。
对象存储清理
对于存储在对象存储中的上传文件,执行:
sudo gitlab-rake gitlab:cleanup:remote_upload_files
实际清理:
sudo gitlab-rake gitlab:cleanup:remote_upload_files DRY_RUN=false
清理孤立的作业产物文件
注意:此命令不适用于对象存储中的产物。
- 检查模式:
sudo gitlab-rake gitlab:cleanup:orphan_job_artifact_files
- 实际清理:
sudo gitlab-rake gitlab:cleanup:orphan_job_artifact_files DRY_RUN=false
- 可选参数:
LIMIT=100
:限制删除文件数量(默认100)DEBUG=1
:显示每个被检测为孤立文件的完整路径NICENESS
:设置I/O优先级(默认2,即Best-effort)
清理过期的活跃会话查找键
执行以下命令清理过期的ActiveSession查找键:
sudo gitlab-rake gitlab:cleanup:sessions:active_sessions_lookup_keys
容器注册表垃圾回收
容器注册表可能占用大量磁盘空间。要清理未使用的镜像层,请执行:
sudo gitlab-ctl registry-garbage-collect [选项]
最佳实践建议
- 在执行任何清理操作前,建议先进行备份
- 生产环境建议先在测试环境验证清理效果
- 对于大型实例,可使用LIMIT参数分批处理
- 定期执行这些清理任务可保持系统高效运行
- 监控磁盘空间使用情况,设置合理的清理计划
通过合理使用这些Rake任务,GitLab管理员可以有效管理系统存储空间,保持实例的最佳性能状态。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考