GitLab升级至v17.4.0后执行gitlab-backup create失败报错求助
GitLab 17.4.0备份失败:unexpected EOF错误解决方法
问题重现
执行gitlab-backup create --trace时,出现以下错误(涉及仓库随机变化,错误类型一致):
{"level":"error","msg":"create: pipeline: 3 failures encountered:\n - @hashed/18/d3/18d37c950a3e810d9b9a84c72c230ca16b7cec123456ef123456as1234567fe.git (dev/abc.com): manager: write bundle: remote repository: create bundle: rpc error: code = Internal desc = unexpected EOF\n - @hashed/2e/00/2e00b312b0a9681bef09f9085a4e918b8fceb0c0123456ef123456as1234567fe.git (dev/reports): manager: write bundle: remote repository: create bundle: rpc error: code = Internal desc = unexpected EOF\n - @hashed/b8/1d/b81d00e65f747a4161b56ab92f400b81862c2b123456ef123456as1234567fe.git (sts/matomo): manager: write bundle: remote repository: create bundle: rpc error: code = Internal desc = unexpected EOF","pid":2547819,"time":"2024-09-27T01:11:37.937Z"}
伴随报错栈:
Backup::Error: gitaly-backup exit status 1 /opt/gitlab/embedded/service/gitlab-rails/lib/backup/gitaly_backup.rb:49:in `finish!' /opt/gitlab/embedded/service/gitlab-rails/lib/backup/targets/repositories.rb:33:in `dump' ...(省略后续栈信息) Tasks: TOP => gitlab:backup:create
升级至GitLab v17.4.0前备份正常,多次执行报错仓库不同,排除仓库本身问题,备份存储在/dev/sdb1分区。
解决步骤
1. 排查存储分区问题
- 检查备份分区可用空间:
执行df -h /var/opt/gitlab/backups(替换为你的实际备份目录),确认分区未被占满,磁盘空间不足会导致写入中断触发EOF错误。 - 检查文件系统完整性:
先卸载分区(umount /dev/sdb1),执行fsck /dev/sdb1修复文件系统错误,完成后重新挂载并重试备份。 - 测试磁盘IO性能:
在备份目录执行dd if=/dev/zero of=test_io bs=1G count=1 oflag=direct,观察写入是否正常,若出现中断或异常,说明磁盘硬件或IO链路存在问题。
2. 调整Gitaly备份并发配置
GitLab 17.4.0可能调整了Gitaly备份的默认并发数,高并发会加剧IO压力导致EOF错误:
- 编辑
/etc/gitlab/gitlab.rb,添加配置:gitaly['backup_concurrency'] = 1 - 执行
gitlab-ctl reconfigure应用配置,然后重新运行备份命令。
3. 验证权限与日志
- 检查备份目录权限:
确保备份目录归属git用户组:chown -R git:git /var/opt/gitlab/backups - 查看Gitaly详细日志:
过滤Gitaly日志中的错误信息:
日志中可能包含更具体的IO或存储相关错误提示。grep -i "unexpected EOF" /var/log/gitlab/gitaly/current
4. 单仓库备份测试
单独备份某一个报错的仓库,验证是否为全局备份的并发问题:
gitlab-backup create --trace REPOSITORIES_PATTERNS="dev/abc.com"
若单仓库备份成功,进一步确认是并发IO导致的全局备份失败。
5. 回退相关配置
对比升级前的gitlab.rb配置文件,重点检查Gitaly备份相关参数(如backup_storage_path、gitaly['backup_timeout']等),恢复到升级前的配置后重新尝试备份。
内容的提问来源于stack exchange,提问作者ohara0627
相关产品推荐
相关产品推荐

