备份数据命令
gitlab-rake gitlab:backup:create
# 数据备份位置
cat /etc/gitlab/gitlab.rb | grep "gitlab_rails\['backup_path'\]"
# 默认储存位置
# gitlab_rails['backup_path'] = "/var/opt/gitlab/backups"
备份配置文件
# 储存密钥
/etc/gitlab/gitlab-secrets.json
# GitLab 实例配置
/etc/gitlab/gitlab.rb
备份数据储存位置
cat /etc/gitlab/gitlab.rb | grep "gitlab_rails\['backup_path'\]"
# 默认储存位置
# gitlab_rails['backup_path'] = "/var/opt/gitlab/backups"
如果文件在不同地方进行了拷贝,需要调整权限
chmod 777 /var/opt/gitlab/backups/1768289154_2026_01_13_18.7.1-jh_gitlab_backup.tar
停止程序
gitlab-ctl stop puma
gitlab-ctl stop sidekiq
查看程序停止结果
gitlab-ctl status
恢复数据
# /var/opt/gitlab/backups/1768289154_2026_01_13_18.7.1-jh_gitlab_backup.tar
gitlab-rake gitlab:backup:restore BACKUP=1768289154_2026_01_13_18.7.1-jh
恢复配置
- 配置没有变化,无需操作
- 如果配置发生变化而没有恢复。
gitlab-secrets.json 不同时,可能导致某些功能无法使用(如:GitLab Runner 历史流水线日志无法查看)
# 储存密钥
/etc/gitlab/gitlab-secrets.json
# GitLab 实例配置
/etc/gitlab/gitlab.rb
重新配置
- 显示下列内容,说明
容器镜像 恢复过程中,存在文件(夹)权限异常
- 容器镜像所在的文件夹权限不正常,可能的原因有“Docker 使用挂载路径而不是挂在卷”时,需要修改 docker 内
/var/opt/gitlab/gitlab-rails/shared/registry 文件夹的权限(如果不修改,即使使用下列方法跳过镜像数据恢复,新镜像也无法推送):chmod 777 -R /var/opt/gitlab/gitlab-rails/shared/registry
- 如果不需要镜像,可以临时尝试忽略
容器镜像,命令:gitlab-rake gitlab:backup:restore BACKUP=1768289154_2026_01_13_18.7.1-jh SKIP=registry --trace
{"command.name":"restore","gl_project_path":"snippets/77","level":"info","msg":"completed restore","pid":2563,"relative_path":"@snippets/a8/8a/a88a7902cb4ef697ba0b6759c50e8c10297ff58f942243de19b984841bfe1f73.git","storage_name":"default","time":"2026-01-13T12:14:47.780Z"}
{"command.name":"restore","gl_project_path":"snippets/78","level":"info","msg":"completed restore","pid":2563,"relative_path":"@snippets/34/9c/349c41201b62db851192665c504b350ff98c6b45fb62a8a2161f78b6534d8de9.git","storage_name":"default","time":"2026-01-13T12:14:48.002Z"}
2026-01-13 20:14:48 +0800 -- Object pool @pools/6b/86/6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b...
2026-01-13 20:14:48 +0800 -- Object pool @pools/d4/73/d4735e3a265e16eee03f59718b9b5d03019c07d8b6c51f90da3a666eec13ab35...
2026-01-13 20:14:48 +0800 -- Object pool @pools/4e/07/4e07408562bedb8b60ce05c1decfe3ad16b72230967de01f640b7e4729b49fce...
2026-01-13 20:14:48 +0800 -- Object pool @pools/4b/22/4b227777d4dd1fc61c6f884f48641d02b4d121d3fd328cb08b5531fcacdabf8a...
2026-01-13 20:14:48 +0800 -- Object pool @pools/ef/2d/ef2d127de37b942baad06145e54b0c619a1f22327b2ebbcfbec78f5564afe39d...
2026-01-13 20:14:48 +0800 -- Object pool @pools/e7/f6/e7f6c011776e8db7cd330b54174fd76f7d0216b612387a5ffcfb81e6f0919683...
2026-01-13 20:14:49 +0800 -- Object pool @pools/79/02/7902699be42c8a8e46fbbb4501726517e86b22c56a189f7625a6da49081b2451...
2026-01-13 20:14:49 +0800 -- Object pool @pools/2c/62/2c624232cdd221771294dfbb310aca000a0df6ac8b66b696d90ef06fdefb64a3...
2026-01-13 20:14:49 +0800 -- Object pool @pools/19/58/19581e27de7ced00ff1ce50b2047e7a567c76b1cbaebabe5ef03f7c3017bb5b7...
2026-01-13 20:14:49 +0800 -- Restoring repositories ... done
2026-01-13 20:14:49 +0800 -- Restoring uploads ...
2026-01-13 20:14:51 +0800 -- Restoring uploads ... done
2026-01-13 20:14:51 +0800 -- Restoring builds ...
2026-01-13 20:14:52 +0800 -- Restoring builds ... done
2026-01-13 20:14:52 +0800 -- Restoring artifacts ...
2026-01-13 20:15:37 +0800 -- Restoring artifacts ... done
2026-01-13 20:15:37 +0800 -- Restoring pages ...
2026-01-13 20:15:40 +0800 -- Restoring pages ... done
2026-01-13 20:15:40 +0800 -- Restoring lfs objects ...
2026-01-13 20:15:40 +0800 -- Restoring lfs objects ... done
2026-01-13 20:15:40 +0800 -- Restoring terraform states ...
2026-01-13 20:15:40 +0800 -- Restoring terraform states ... done
2026-01-13 20:15:40 +0800 -- Restoring container registry images ...
2026-01-13 20:15:40 +0800 -- Deleting tar staging files ...
2026-01-13 20:15:40 +0800 -- Cleaning up /var/opt/gitlab/backups/backup_information.yml
2026-01-13 20:15:40 +0800 -- Cleaning up /var/opt/gitlab/backups/db
2026-01-13 20:15:40 +0800 -- Cleaning up /var/opt/gitlab/backups/repositories
2026-01-13 20:15:41 +0800 -- Cleaning up /var/opt/gitlab/backups/uploads.tar.gz
2026-01-13 20:15:41 +0800 -- Cleaning up /var/opt/gitlab/backups/builds.tar.gz
2026-01-13 20:15:41 +0800 -- Cleaning up /var/opt/gitlab/backups/artifacts.tar.gz
2026-01-13 20:15:41 +0800 -- Cleaning up /var/opt/gitlab/backups/pages.tar.gz
2026-01-13 20:15:41 +0800 -- Cleaning up /var/opt/gitlab/backups/lfs.tar.gz
2026-01-13 20:15:41 +0800 -- Cleaning up /var/opt/gitlab/backups/terraform_state.tar.gz
2026-01-13 20:15:41 +0800 -- Cleaning up /var/opt/gitlab/backups/registry.tar.gz
2026-01-13 20:15:41 +0800 -- Cleaning up /var/opt/gitlab/backups/packages.tar.gz
2026-01-13 20:15:41 +0800 -- Cleaning up /var/opt/gitlab/backups/ci_secure_files.tar.gz
2026-01-13 20:15:41 +0800 -- Cleaning up /var/opt/gitlab/backups/external_diffs.tar.gz
2026-01-13 20:15:41 +0800 -- Deleting tar staging files ... done
2026-01-13 20:15:41 +0800 -- Deleting backups/tmp ...
2026-01-13 20:15:41 +0800 -- Deleting backups/tmp ... done
2026-01-13 20:15:41 +0800 -- Deleting backup and restore PID file at [/opt/gitlab/embedded/service/gitlab-rails/tmp/backup_restore.pid] ... done
rake aborted!
Backup::Error: Restore operation failed: tar: .: Cannot utime: Operation not permitted
tar: .: Cannot change mode to rwxr-x---: Operation not permitted
tar: Exiting with failure status due to previous errors
/opt/gitlab/embedded/service/gitlab-rails/lib/backup/targets/files.rb:104:in `restore'
/opt/gitlab/embedded/service/gitlab-rails/lib/backup/tasks/task.rb:31:in `restore!'
/opt/gitlab/embedded/service/gitlab-rails/lib/backup/restore/process.rb:30:in `execute!'
/opt/gitlab/embedded/service/gitlab-rails/lib/backup/manager.rb:101:in `run_restore_task'
/opt/gitlab/embedded/service/gitlab-rails/lib/backup/manager.rb:168:in `block in run_all_restore_tasks'
/opt/gitlab/embedded/service/gitlab-rails/lib/backup/manager.rb:165:in `each_value'
/opt/gitlab/embedded/service/gitlab-rails/lib/backup/manager.rb:165:in `run_all_restore_tasks'
/opt/gitlab/embedded/service/gitlab-rails/lib/backup/manager.rb:68:in `restore'
/opt/gitlab/embedded/service/gitlab-rails/lib/tasks/gitlab/backup.rb:22:in `block in restore_backup'
/opt/gitlab/embedded/service/gitlab-rails/lib/tasks/gitlab/backup.rb:83:in `lock_backup'
/opt/gitlab/embedded/service/gitlab-rails/lib/tasks/gitlab/backup.rb:19:in `restore_backup'
/opt/gitlab/embedded/service/gitlab-rails/lib/tasks/gitlab/backup.rake:14:in `block (3 levels) in <top (required)>'
/opt/gitlab/embedded/bin/bundle:25:in `<main>'
Tasks: TOP => gitlab:backup:restore
(See full trace by running task with --trace)