Docker GitLab旧容器数据迁移至新容器及Git仓库存储路径查询
Docker版GitLab仓库实际存储路径说明
你配置的宿主机挂载卷/srv/gitlab/data对应容器内GitLab的数据根目录/var/opt/gitlab,Git仓库的实际存储宿主机路径为:
/srv/gitlab/data/git-data/repositories/@hashed/
为什么查询的组名目录为空
你看到的devops这类以组/项目名命名的目录是GitLab早期传统存储(Legacy Storage)的遗留路径:
- GitLab 10.0版本后默认启用哈希存储机制,所有项目仓库数据都存放在
@hashed目录下,不再按组/项目名的目录结构存储,因此传统路径下的目录为空是正常现象 @hashed目录下采用两级哈希值命名的子目录结构,不会直接显示项目、组的可读名称,这种设计可以避免项目重命名、转移组时产生大量文件移动操作- 同路径下的
@snippets目录存储代码片段数据,+gitaly是Gitaly服务的内部工作目录,.gitaly-metadata是Gitaly服务的元数据标记文件,均不需要单独手动迁移
跨主机迁移注意事项
- 新服务器部署的GitLab版本必须和旧实例故障前最后正常运行的版本完全一致,禁止直接部署最新版跨大版本导入数据,否则会出现数据结构不兼容的问题
- 迁移时不要单独只拷贝仓库目录,建议完整迁移三个挂载卷的全量数据,操作流程如下:
- 停止新旧服务器上的所有GitLab容器,避免拷贝过程中有数据写入导致文件损坏
- 用保留权限的方式全量拷贝旧服务器
/srv/gitlab/下的config、logs、data三个目录到新服务器的同路径下,推荐使用rsync -avz /srv/gitlab/ root@新服务器IP:/srv/gitlab/命令拷贝,自动保留文件的UID/GID权限,避免容器启动后出现权限报错 - 拷贝完成后启动新服务器的GitLab容器,等待服务初始化完成后,进入容器执行
gitlab-ctl reconfigure和gitlab-rake gitlab:check SANITIZE=true校验数据完整性即可
- 如果你之前在
gitlab.rb配置文件中自定义过git_data_dirs参数修改了仓库存储路径,需要先查看/srv/gitlab/config/gitlab.rb内的自定义配置,对应到宿主机挂载路径查找数据即可,默认配置下仓库都在前面提到的@hashed目录下
内容的提问来源于stack exchange,提问作者uberrebu
相关产品推荐
相关产品推荐

