- 项目背景
一台运行gitlab业务的服务器磁盘阵列异常,导至系统无法启动。经过数据恢复处理后,阵列上的数据得以提取,但是系统遭到破坏无法启动。
2. 验证提取数据
数据提取到后需要验证,数据是否正确。原来运行的gitlab实例是在容器中运行,但是将数所映射到了本地目录,映射关系分别是:
.../data:/var/opt/gitlab
.../log:/var/log/gitlab
然后从data/git-data/repositories/下的目录中提取代码项目时行验证,这个目录下就是项目的所有者的用户名或组名称然后下边是代码项目的名称以.git结尾,目录代表一个完整的代码仓库。
cd repo.git
# 创建budele文件
git bundle create ./reponame.bundle --all
# 从bundle文件中clone出代码
git clone ./reponame.bundle reponame
# 这是文件夹内会出现一个 reponame 文件夹,这个文件夹内就是所有的代码文件
# 并且还可以恢复其他分支的代码
git clone -b release ./reponame.bundle reponame
# 新建新的git仓库 名为 newrepo
git remote rm origin
# url.git 为新的git仓库地址
git remote add origin newrepo.git
3. 确定原来gitlab容器的版本。
我从/data/backups目录中的备份中可以看出系统的版本,类似于这样:
1595556790_2020_07_24_11.8.2_gitlab_backup.tar
其中11.8.2就是gitlab镜像的版本,去docker拉取这个版本,把将环境运行起来,这样就搭好了一个同版本的全新环境。
4. 恢复到最后的备份
进入容器后:
# 停止相关数据连接服务
gitlab-ctl stop unicorn
gitlab-ctl stop sidekiq
# 然后查看服务的状态
gitlab-ctl status
# 确认前面停止的两项服务已停止。
gitlab-rake gitlab:backup:restore BACKUP=1595556790_2020_07_24_11.8.2
# 然后进入恢复进程中间有两次交互确认,根据需要输入yes/no直到恢复完成。
5. 更新仓库到最新版本状态
- 先将gitlab容器停掉。
- 将文件系统中恢复回来的数据, /data/git-data/repositories/的数据复制到对应的目录。
- 将文件系统中恢复回来的数据,/data/postgresql/data/的数据复制到对应的目录
- 重启gitlab容器。
- 经验证数据已经恢复到可用的状态。
来源:oschina
链接:https://my.oschina.net/janl/blog/4428916