温馨提示×

ubuntu gitlab怎样优化存储空间

小樊
37
2025-12-10 21:17:13
栏目: 云计算

Ubuntu 上 GitLab 存储空间优化实操指南

一 定位大目录与常见膨胀源

  • 查看各目录占用:执行 sudo du -xh /var/opt/gitlab | sort -rh | head -20,优先关注以下路径:
    • /var/opt/gitlab/git-data:仓库对象与对象池。
    • /var/opt/gitlab/prometheus/data:监控时序数据,默认可能长期累积。
    • /var/opt/gitlab/gitlab-rails/shared/artifacts、uploads、lfs-objects:CI 产物、用户上传、LFS 对象。
    • /var/opt/gitlab/backups:备份文件,如未设置保留策略会持续增长。
    • /var/log/gitlab:服务日志,长期未轮转会变大。
  • 若发现 git-data/repositories 下出现大量 tmp_pack_* 临时文件并导致磁盘被占满,通常是仓库打包/GC 异常或并发过大所致,应先停止写入、清理残留临时文件,再优化并发与 GC 策略。

二 仓库与对象存储优化

  • 使用对象存储卸载大对象
    • LFS、上传、CI 产物等迁移到对象存储(如 Amazon S3、MinIO),在 /etc/gitlab/gitlab.rb 中配置相应项(对接 S3/MinIO 的 endpoint、bucket、access/secret key 等),执行 sudo gitlab-ctl reconfigure 生效。对象存储能显著降低本地盘占用并便于横向扩容。
  • 调整仓库存储路径或扩展新盘
    • 将仓库数据迁移到独立磁盘或大容量挂载点,编辑 /etc/gitlab/gitlab.rb
      • 单目录:git_data_dirs({ "default" => { "path" => "/home/gitlab-data" } })
      • 多目录:git_data_dirs({ "default" => { "path" => "/var/opt/gitlab/git-data" }, "alt" => { "path" => "/home/gitlab-data" } })
    • 迁移步骤(停写→同步→改配置→启动):
      • sudo gitlab-ctl stop
      • sudo rsync -av /var/opt/gitlab/git-data/repositories /home/gitlab-data/
      • sudo gitlab-ctl reconfigure
      • sudo gitlab-ctl start
    • 目标路径及其子目录不要使用软链接;迁移后确认 /home/gitlab-data/repositories 存在并可访问。
  • 规范大文件管理
    • 历史仓库中的大文件应通过 git lfs migrate import --everything 迁移至 LFS,避免继续膨胀仓库对象。完成后执行仓库 GC 回收空间。
  • 定期仓库维护
    • 在维护窗口对仓库执行 git gc --prune=now(Omnibus 可结合 gitlab-rake git:gc),并删除已合并且不再需要的分支,减少对象冗余。

三 监控、日志与备份的存储治理

  • 监控数据降占用
    • 方案 A:缩短保留期(示例保留 15 天
      • 编辑 /etc/gitlab/gitlab.rb
        • prometheus['enable'] = true
        • prometheus['flags'] = { 'storage.tsdb.path' => "/var/opt/gitlab/prometheus/data", 'storage.tsdb.retention.time' => "15d", 'config.file' => "/var/opt/gitlab/prometheus/prometheus.yml" }
    • 方案 B:不需要自监控时可关闭
      • prometheus['enable'] = false
    • 变更后执行 sudo gitlab-ctl reconfigure 生效。
  • 日志轮转与清理
    • 启用与调整 logrotate 策略,控制 /var/log/gitlab 下各服务日志的保留天数与压缩;对审计/访问日志可按需降低级别或缩短保留。
  • 备份保留策略
    • 修改备份目录:gitlab_rails['backup_path'] = '/var/opt/gitlab/backups',执行 sudo gitlab-ctl reconfigure
    • 定时备份并清理旧备份(示例保留 7 天):
      • 备份:/opt/gitlab/bin/gitlab-rake gitlab:backup:create
      • 清理脚本(示例):find "/var/opt/gitlab/backups/" -name "*.tar" -mtime +7 -delete
      • Crontab(示例):0 2 * * * /opt/gitlab/bin/gitlab-rake gitlab:backup:create30 2 * * * find /var/opt/gitlab/backups/ -name "*.tar" -mtime +7 -delete

四 数据库与缓存侧优化

  • 数据库维护
    • 使用受支持的 PostgreSQL 版本,按需调整连接池、共享缓冲区等参数;定期执行 VACUUM/ANALYZE,清理无效/陈旧数据,降低表膨胀对磁盘的压力。
  • 缓存与连接
    • 合理配置 Redis 作为会话与缓存后端,避免频繁落盘;结合实例规格调整 Unicorn/Sidekiq 并发数,减少资源争用与异常堆积导致的额外写入。

五 快速处置命令清单

  • 查看占用:sudo du -xh /var/opt/gitlab | sort -rh | head -20
  • 停止/启动:sudo gitlab-ctl stop / sudo gitlab-ctl start
  • 重新配置:sudo gitlab-ctl reconfigure
  • 迁移仓库数据:sudo rsync -av /var/opt/gitlab/git-data/repositories /new/path/
  • 立即备份:/opt/gitlab/bin/gitlab-rake gitlab:backup:create
  • 清理旧备份:find /var/opt/gitlab/backups/ -name "*.tar" -mtime +7 -delete
  • 调整 Prometheus 保留期或关闭(编辑 gitlab.rbreconfigure):
    • 保留 15 天:prometheus['flags'] = { 'storage.tsdb.retention.time' => "15d", ... }
    • 关闭:prometheus['enable'] = false[4,5,6,7]

0