517.md 5.1 KB
Newer Older
Lab机器人's avatar
readme  
Lab机器人 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129
# Integrity check Rake task

> 原文:[https://docs.gitlab.com/ee/administration/raketasks/check.html](https://docs.gitlab.com/ee/administration/raketasks/check.html)

*   [Repository integrity](#repository-integrity)
    *   [Check all GitLab repositories](#check-all-gitlab-repositories)
*   [Uploaded files integrity](#uploaded-files-integrity)
*   [LDAP check](#ldap-check)

# Integrity check Rake task[](#integrity-check-rake-task-core-only "Permalink")

GitLab 提供了 Rake 任务来检查各种组件的完整性.

## Repository integrity[](#repository-integrity "Permalink")

尽管 Git 非常灵活,并试图防止数据完整性问题,但有时还是会出错. 以下 Rake 任务旨在帮助 GitLab 管理员诊断问题存储库,以便对其进行修复.

需要检查 3 件事以确定完整性.

1.  Git 存储库文件系统检查( [`git fsck`](https://git-scm.com/docs/git-fsck) ). 此步骤验证存储库中对象的连接性和有效性.
2.  在存储库目录中检查`config.lock` .
3.  检查`refs/heads`是否有任何分支/引用锁定文件.

重要的是要注意,仅存在`config.lock`或引用锁并不一定表示问题. 当 Git 和 GitLab 在存储库上执行操作时,会定期创建和删除锁定文件. 它们用于防止数据完整性问题. 但是,如果 Git 操作被中断,则这些锁可能无法正确清理.

以下症状可能表明存储库完整性有问题. 如果用户遇到这些症状,则可以使用下面介绍的 Rake 任务来确定导致问题的确切存储库.

*   尝试推送代码时收到错误- `remote: error: cannot lock ref`
*   查看 GitLab 仪表板或访问特定项目时出现 500 错误.

### Check all GitLab repositories[](#check-all-gitlab-repositories "Permalink")

此任务循环遍历 GitLab 服务器上的所有存储库,并运行前面所述的完整性检查.

**全部安装**

```
sudo gitlab-rake gitlab:git:fsck 
```

**源安装**

```
sudo -u git -H bundle exec rake gitlab:git:fsck RAILS_ENV=production 
```

## Uploaded files integrity[](#uploaded-files-integrity "Permalink")

用户可以将各种类型的文件上传到 GitLab 安装. 这些完整性检查可以检测丢失的文件. 此外,对于本地存储的文件,会在上载时生成校验和并将其存储在数据库中,这些校验将针对当前文件进行校验.

当前,以下类型的文件支持完整性检查:

*   CI 工件(从版本 10.7.0 起可用)
*   LFS 对象(从版本 10.6.0 起可用)
*   用户上传(从版本 10.6.0 起可用)

**全部安装**

```
sudo gitlab-rake gitlab:artifacts:check
sudo gitlab-rake gitlab:lfs:check
sudo gitlab-rake gitlab:uploads:check 
```

**Source Installation**

```
sudo -u git -H bundle exec rake gitlab:artifacts:check RAILS_ENV=production
sudo -u git -H bundle exec rake gitlab:lfs:check RAILS_ENV=production
sudo -u git -H bundle exec rake gitlab:uploads:check RAILS_ENV=production 
```

这些任务还接受一些环境变量,可用于覆盖某些值:

| Variable | Type | Description |
| --- | --- | --- |
| `BATCH` | integer | 指定批处理的大小. 默认为 200. |
| `ID_FROM` | integer | 指定从其开始的 ID,包括值. |
| `ID_TO` | integer | 指定以 ID 结尾的 ID 值(包括该值). |
| `VERBOSE` | boolean | 导致失败被单独列出,而不是被汇总. |

```
sudo gitlab-rake gitlab:artifacts:check BATCH=100 ID_FROM=50 ID_TO=250
sudo gitlab-rake gitlab:lfs:check BATCH=100 ID_FROM=50 ID_TO=250
sudo gitlab-rake gitlab:uploads:check BATCH=100 ID_FROM=50 ID_TO=250 
```

输出示例:

```
$ sudo gitlab-rake gitlab:uploads:check
Checking integrity of Uploads
- 1..1350: Failures: 0
- 1351..2743: Failures: 0
- 2745..4349: Failures: 2
- 4357..5762: Failures: 1
- 5764..7140: Failures: 2
- 7142..8651: Failures: 0
- 8653..10134: Failures: 0
- 10135..11773: Failures: 0
- 11777..13315: Failures: 0
Done! 
```

详细输出示例:

```
$ sudo gitlab-rake gitlab:uploads:check VERBOSE=1
Checking integrity of Uploads
- 1..1350: Failures: 0
- 1351..2743: Failures: 0
- 2745..4349: Failures: 2
  - Upload: 3573: #<Errno::ENOENT: No such file or directory @ rb_sysopen - /opt/gitlab/embedded/service/gitlab-rails/public/uploads/user-foo/project-bar/7a77cc52947bfe188adeff42f890bb77/image.png>
  - Upload: 3580: #<Errno::ENOENT: No such file or directory @ rb_sysopen - /opt/gitlab/embedded/service/gitlab-rails/public/uploads/user-foo/project-bar/2840ba1ba3b2ecfa3478a7b161375f8a/pug.png>
- 4357..5762: Failures: 1
  - Upload: 4636: #<Google::Apis::ServerError: Server error>
- 5764..7140: Failures: 2
  - Upload: 5812: #<NoMethodError: undefined method `hashed_storage?' for nil:NilClass>
  - Upload: 5837: #<NoMethodError: undefined method `hashed_storage?' for nil:NilClass>
- 7142..8651: Failures: 0
- 8653..10134: Failures: 0
- 10135..11773: Failures: 0
- 11777..13315: Failures: 0
Done! 
```

## LDAP check[](#ldap-check "Permalink")

LDAP 检查 Rake 任务将测试绑定 DN 和密码凭据(如果已配置),并将列出 LDAP 用户的样本. 此任务也作为`gitlab:check`任务的一部分执行,但可以独立运行. 有关详细信息,请参见[LDAP Rake 任务-LDAP 检查](ldap.html#check) .