首页 > 解决方案 > GitLab CE:如何恢复或修复突然丢失的问题/合并请求的存储库?

问题描述

大约两年前,我开始在本地 x86 Debian VM 内运行 GitLab CE,去年我决定将 GitLab CE 实例迁移到专用的英特尔 NUC 服务器。一切似乎都很顺利,没有任何问题,我的 GitLab CE 实例截至今天是最新的(运行 13.4.2)。

不过,我最近发现,一些被移动的存储库给出了“没有存储库!” 访问他们的项目页面时出错,如果他们有任何问题板、合并请求等,这些也都消失了。但是您不会怀疑它,因为损坏的存储库与我一直使用的工作存储库一起出现在存储库列表中。

如果我必须对这些损坏的存储库进行推理,那将是他们在一年多前进行了最后一次活动,除了初始推送之外没有对它们进行任何推送,或者如果进行了更改、创建了问题或合并请求创建,它实际上是一年多以前。

其中一些损坏的回购相当大,有很多历史,而另一些则非常小(实际上只是跟踪对 shell 脚本的更改),所以我认为回购大小本身与它没有任何关系。

如果我运行 GitLab 诊断检查sudo gitlab-rake gitlab:check,一切看起来都不错,除了“散列存储”:

All projects are in hashed storage? ... no
  Try fixing it:
  Please migrate all projects to hashed storage

但是运行sudo gitlab-rake gitlab:storage:migrate_to_hashed似乎没有完成(仪表板中有六个失败的作业),并且再次运行“gitlab:check”仍然表明这个“散列存储”问题。我也尝试过运行sudo gitlab-rake gitlab:git:fscksudo gitlab-rake cache:clear但这些命令似乎没有什么不同。

幸运的是,我的机器上有所有丢失的 repos 的最新版本,事实上,我仍然有运行 GitLab CE 12.8.5 的原始 VM(带有稍微过时的 repos 副本。)

所以我的问题是:

  1. 是否可以“修复”我当前实例上损坏的存储库?我怀疑我可以将这些存储库的本地副本“重新推送”回我的服务器,但我真的不想丢失任何元数据,例如问题/合并请求等。
  2. 有没有办法解决“并非所有项目都在散列存储中”的问题?(再次migrate_to_hashed任务未能完成。)
  3. 我是否可以做一些诸如“备份”、“检查/调整备份”、“恢复备份”之类的事情来修复损坏的存储库,或者至少是元数据?

提前致谢。

标签: gitlabgitlab-ce

解决方案


好的,所以我想我知道发生了什么。

我在GitLab 用户论坛上找到了这个帖子

显然这里的场景是:

  1. 有一个 GitLab 实例,它的存储库不在“散列存储”中
  2. 备份你的回购
  3. 恢复你的 repo(到同一台服务器或迁移到另一台服务器)
  4. 自动或手动尝试将您的存储库更新为“散列存储”
  5. 您现在会发现任何带有“ci runner”(持续集成运行器)的 repo 现在都将被列为“NO REPOSITORY!” 并且完全不可用,因为“散列存储”迁移过程将失败

解决方法是:

  1. 重置运行器注册令牌,如GitLab 文档中的本文所列
  2. 重新运行该sudo gitlab-rake gitlab:storage:migrate_to_hashed过程
  3. 后台作业完成后,运行sudo gitlab-rake gitlab:check以确保输出包含消息:
All projects are in hashed storage? ... yes

如果成功,则显示“NO REPOSITORY!”的项目 现在应该完全恢复了。

了解您是否需要运行此过程的关键是您是否:

  1. 以管理员身份登录您的 GitLab CE 实例
  2. 进入管理区
  3. 查看监控->后台作业->死机
  4. 并查看一个名称为的工作
hashed_storage:hashed_storage_project_migrate

有错误

OpenSSL::Cipher::CipherError:

推荐阅读