Ubuntu GitLab服务器git-data中tmp_pack_xxx文件占满磁盘

服务器版本:

cat /proc/version:Linux version 4.15.0-142-generic (buildd@lgw01-amd64-039) (gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.12)) #146~16.04.1-Ubuntu SMP Tue Apr 13 09:27:15 UTC 2021

GitLab:gitlab-ce_13.10.5-ce.0_amd64

一、问题发现

此服务器上搭建了SVN和GitLab服务器。

使用SVN上传文件时报错“SVN Couldn’t perform atomic initialization”,网上很多人说是由于Linux系统的磁盘空间满了所导致的,因此登录到服务器查看磁盘情况。

没想到是GitLab导致磁盘撑爆的!

二、查找原因

使用sudo df -h发现根目录1.1T的空间全部占满(下图是解决问题后的截图,将git-data迁移到了/home目录下)

在这里插入图片描述

再使用sudo du /* -sh查找根目录下哪个目录占的空间大,发现/var占1.1T

在这里插入图片描述

逐级查找,最终确定是/var/opt/gitlab中git-data目录占用1.1T,但是无法进入此文件夹继续查看

在这里插入图片描述

使用sudo chmod 777 -R git-data后可以进入git-data文件,最终确定是“/var/opt/gitlab/git-data/repositories/@hashed/e6/29/e629fa6598d732768f7c726b4b621285f9c3b85303900aa912017db7617d8bdb.git/objects/pack”路径下有很多17、18G大小的“tmp_pack_XXX”文件,总共占用磁盘1.1T;

使用ls -altr按时间顺序查看文件,发现很有规律,3月15号搭建完GitLab服务器,从3月22号开始晚上20点10分左右生成了第一个大小17G“tmp_pack_XXX”文件,往后每一天差不多相同时间生成一个大小也差不多的“tmp_pack_XXX”文件……持续两个月最终撑爆1.1T磁盘!连Linux下一些基本的Bash都无法使用,例如TAB自动补全功能,所以SVN也收到磁盘的影响!

在这里插入图片描述

三、解决方法

先尝试将git-data迁移到另一个空间大的目录,方法是直接将git-data拷贝到目标目录,然后更改sudo vim /etc/gitlab/gitlab.rb内容:

取消下面注释
# git_data_dirs({
#   "default" => {
#     "path" => "/mnt/nfs-01/git-data"
#    }
# })

更改为自己目标路径下的git-data
git_data_dirs({
  "default" => {
    "path" => "/home/codemgr/git-data/git-data"
   }
})

在这里插入图片描述

然后顺序执行下面命令

sudo gitlab-ctl stop (停止GitLab服务,防止用户写入数据)
sudo gitlab-ctl reconfigure (使其修改配置生效)
sudo gitlab-ctl start (启动所有gitlab组件)

但是由于磁盘满,很可以sudo gitlab-ctl reconfigure很可能无法执行成功,因此尝试删除“/var/opt/gitlab/git-data/repositories/@hashed/e6/29/e629fa6598d732768f7c726b4b621285f9c3b85303900aa912017db7617d8bdb.git/objects/pack”目录下代码没有更改的那几天的新增“tmp_pack_XXX”文件,于是有几十G的空间就可以顺利执行sudo gitlab-ctl reconfigure了(也可以顺利上传SVN和使用TAB自动补全了!)

将git-data迁移之后GitLab就可以正常使用了,但是此方法治标不治本,日积月累也会将28T空间撑爆,因此尝试将原git-data路径下所有“tmp_pack_xxx”文件删除,再次将git-data指向回原路径,再次执行上面3条命令,经过实测,删除"tmp_pack_XXX"文件并不影响GitLab的正常使用,重新拉去的代码及log也都是正常的!

因此解决方法是:删除“/var/opt/gitlab/git-data/repositories/@hashed/e6/29/e629fa6598d732768f7c726b4b621285f9c3b85303900aa912017db7617d8bdb.git/objects/pack”路径中的所有"tmp_pack_XXX"文件!

但是目前尚未了解清楚为什么每天会产生1个17G左右的“tmp_pack_XXX”文件,当前采取手动删除“tmp_pack_XXX”文件,或者写一个Bash脚本定期删除“tmp_pack_XXX”文件,后期找到原因再作补充,欢迎大佬指教!

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐