Rake 작업 정리

Tier: Free, Premium, Ultimate Offering: Self-managed

GitLab은 GitLab 인스턴스를 정리하기 위한 Rake 작업을 제공합니다.

참조되지 않는 LFS 파일 제거

경고: GitLab 업그레이드 후 12시간 이내에는 실행하지 마십시오. 이렇게 함으로써 모든 백그라운드 마이그레이션이 완료되어 데이터 손실을 방지할 수 있습니다.

저장소 히스토리에서 LFS 파일을 제거하면 그 파일들은 고아가 되어 디스크 공간을 계속 사용합니다. 이 Rake 작업을 사용하면 데이터베이스에서 유효하지 않은 참조를 제거하여 LFS 파일을 가비지 수집할 수 있습니다.

예시:

# omnibus-gitlab
sudo gitlab-rake gitlab:cleanup:orphan_lfs_file_references PROJECT_PATH="gitlab-org/gitlab-foss"

# 소스에서 설치
bundle exec rake gitlab:cleanup:orphan_lfs_file_references RAILS_ENV=production PROJECT_PATH="gitlab-org/gitlab-foss"

또한 PROJECT_ID로 프로젝트를 지정할 수도 있습니다.

예시:

$ sudo gitlab-rake gitlab:cleanup:orphan_lfs_file_references PROJECT_ID="13083"

I, [2019-12-13T16:35:31.764962 #82356]  INFO -- :  프로젝트 GitLab Org / GitLab Foss의 고아 LFS 파일을 찾는 중
I, [2019-12-13T16:35:31.923659 #82356]  INFO -- :  유효하지 않은 참조 제거: 12

기본적으로 이 작업은 아무것도 삭제하지 않고 삭제할 수 있는 파일 참조의 수를 보여줍니다. 실제로 참조를 삭제하려면 DRY_RUN=false로 명령을 실행하십시오. 또한 삭제할 참조의 수를 제한하려면 LIMIT={숫자} 매개변수를 사용할 수도 있습니다.

이 Rake 작업은 LFS 파일에 대한 참조만을 제거합니다. 참조되지 않는 LFS 파일은 나중에 (하루에 한 번) 가비지 수집됩니다. 즉시 가비지 수집을 해야 하는 경우, 아래 설명된 rake gitlab:cleanup:orphan_lfs_files를 실행하십시오.

즉시 참조되지 않는 LFS 파일 제거

참조되지 않는 LFS 파일은 매일 삭제되지만 필요하다면 즉시 삭제할 수 있습니다.

예시:

# omnibus-gitlab
sudo gitlab-rake gitlab:cleanup:orphan_lfs_files

# 소스에서 설치
bundle exec rake gitlab:cleanup:orphan_lfs_files

예시 출력:

$ sudo gitlab-rake gitlab:cleanup:orphan_lfs_files
I, [2020-01-08T20:51:17.148765 #43765]  INFO -- : 참조되지 않는 LFS 파일 삭제: 12

프로젝트 업로드 파일 정리

GitLab 데이터베이스에 존재하지 않는 경우 프로젝트 업로드 파일을 정리합니다.

파일 시스템에서 프로젝트 업로드 파일 정리

GitLab 데이터베이스에 존재하지 않는 경우 로컬 프로젝트 업로드 파일을 정리합니다. 작업은 파일을 찾을 수 있다면 해당 프로젝트를 통해 파일을 수정을 시도하고, 그렇지 않으면 파일을 잃어버린 폴더로 이동시킵니다.

# omnibus-gitlab
sudo gitlab-rake gitlab:cleanup:project_uploads

# 소스에서 설치
bundle exec rake gitlab:cleanup:project_uploads RAILS_ENV=production

예시 출력:

$ sudo gitlab-rake gitlab:cleanup:project_uploads

I, [2018-07-27T12:08:27.671559 #89817]  INFO -- : 정리할 고아 프로젝트 업로드를 찾는 중. 드라이런...
D, [2018-07-27T12:08:28.293568 #89817] DEBUG -- : 일괄 처리할 500개의 프로젝트 업로드 파일 경로 처리,/opt/gitlab/embedded/service/gitlab-rails/public/uploads/test.out 시작
I, [2018-07-27T12:08:28.689869 #89817]  INFO -- : 동일한 이름의 프로젝트 탐색시 잃어버렸다면 해당 경로로 옮길 수 있습니다, /opt/gitlab/embedded/service/gitlab-rails/public/uploads/test.out -> /opt/gitlab/embedded/service/gitlab-rails/public/uploads/-/project-lost-found/test.out
I, [2018-07-27T12:08:28.755624 #89817]  INFO -- : 수선 가능, /opt/gitlab/embedded/service/gitlab-rails/public/uploads/foo/bar/89a0f7b0b97008a4a18cedccfdcd93fb/foo.txt -> /opt/gitlab/embedded/service/gitlab-rails/public/uploads/qux/foo/bar/89a0f7b0b97008a4a18cedccfdcd93fb/foo.txt
I, [2018-07-27T12:08:28.760257 #89817]  INFO -- : 찾아 이동할 수 있음, /opt/gitlab/embedded/service/gitlab-rails/public/uploads/foo/bar/1dd6f0f7eefd2acc4c2233f89a0f7b0b/image.png -> /opt/gitlab/embedded/service/gitlab-rails/public/uploads/-/project-lost-found/foo/bar/1dd6f0f7eefd2acc4c2233f89a0f7b0b/image.png
I, [2018-07-27T12:08:28.764470 #89817]  INFO -- : 이 파일 정리를 위해 DRY_RUN=false 옵션을 사용하십시오

$ sudo gitlab-rake gitlab:cleanup:project_uploads DRY_RUN=false
I, [2018-07-27T12:08:32.944414 #89936]  INFO -- : 정리할 고아 프로젝트 업로드를 찾는 중...
D, [2018-07-27T12:08:33.293568 #89817] DEBUG -- : 일괄 처리할 500개의 프로젝트 업로드 파일 경로를 찾아서 '/opt/gitlab/embedded/service/gitlab-rails/public/uploads/test.out' 를 시작합니다.
I, [2018-07-27T12:08:33.689869 #89817]  INFO -- : 이동 완료, /opt/gitlab/embedded/service/gitlab-rails/public/uploads/test.out -> /opt/gitlab/embedded/service/gitlab-rails/public/uploads/-/project-lost-found/test.out
I, [2018-07-27T12:08:33.755624 #89817]  INFO -- : 수정된 파일, /opt/gitlab/embedded/service/gitlab-rails/public/uploads/foo/bar/89a0f7b0b97008a4a18cedccfdcd93fb/foo.txt -> /opt/gitlab/embedded/service/gitlab-rails/public/uploads/qux/foo/bar/89a0f7b0b97008a4a18cedccfdcd93fb/foo.txt
I, [2018-07-27T12:08:33.760257 #89817]  INFO -- : 이동 완료, /opt/gitlab/embedded/service/gitlab-rails/public/uploads/foo/bar/1dd6f0f7eefd2acc4c2233f89a0f7b0b/image.png -> /opt/gitlab/embedded/service/gitlab-rails/public/uploads/-/project-lost-found/foo/bar/1dd6f0f7eefd2acc4c2233f89a0f7b0b/image.png

객체 저장소를 사용하는 경우 올인원 Rake task를 실행하여 모든 업로드가 객체 저장소로 마이그레이션되었는지 확인하고 업로드 폴더에 파일이 없는지 확인하십시오.

오브젝트 스토리지에서 프로젝트 업로드 파일 정리

만약 GitLab 데이터베이스에 존재하지 않는다면, 오브젝트 스토리지 업로드 파일을 잃어버린/찾을 수 없는 디렉토리로 이동합니다.

# omnibus-gitlab
sudo gitlab-rake gitlab:cleanup:remote_upload_files

# 설치된 소스에서
bundle exec rake gitlab:cleanup:remote_upload_files RAILS_ENV=production

예시 출력:

$ sudo gitlab-rake gitlab:cleanup:remote_upload_files

I, [2018-08-02T10:26:13.995978 #45011]  INFO -- : 잃어버린 원격 업로드를 삭제할 파일을 찾습니다. 시험 실행…
I, [2018-08-02T10:26:14.120400 #45011]  INFO -- : 이동할 수 있음: @hashed/6b/DSC_6152.JPG
I, [2018-08-02T10:26:14.120482 #45011]  INFO -- : 이동할 수 있음: @hashed/79/02/7902699be42c8a8e46fbbb4501726517e86b22c56a189f7625a6da49081b2451/711491b29d3eb08837798c4909e2aa4d/DSC00314.jpg
I, [2018-08-02T10:26:14.120634 #45011]  INFO -- : 이 파일을 삭제하려면 이 명령을 DRY_RUN=false로 실행하세요
$ sudo gitlab-rake gitlab:cleanup:remote_upload_files DRY_RUN=false

I, [2018-08-02T10:26:47.598424 #45087]  INFO -- : 잃어버린 원격 업로드를 삭제할 파일을 찾습니다...
I, [2018-08-02T10:26:47.753131 #45087]  INFO -- : 찾아낸 파일: @hashed/6b/DSC_6152.JPG -> lost_and_found/@hashed/6b/DSC_6152.JPG
I, [2018-08-02T10:26:47.764356 #45087]  INFO -- : 찾아낸 파일: @hashed/79/02/7902699be42c8a8e46fbbb4501726517e86b22c56a189f7625a6da49081b2451/711491b29d3eb08837798c4909e2aa4d/DSC00314.jpg -> lost_and_found/@hashed/79/02/7902699be42c8a8e46fbbb4501726517e86b22c56a189f7625a6da49081b2451/711491b29d3eb08837798c4909e2aa4d/DSC00314.jpg

잃어버린 아티팩트 파일 삭제

참고: 이러한 명령어는 오브젝트 스토리지에 저장된 아티팩트에는 적용되지 않습니다.

디스크에 예상보다 더 많은 작업 아티팩트 파일 및/또는 디렉토리가 있는 것을 알았을 때 다음을 실행할 수 있습니다.

sudo gitlab-rake gitlab:cleanup:orphan_job_artifact_files

이 명령어는 다음을 수행합니다:

  • 전체 아티팩트 폴더를 스캔합니다.
  • 데이터베이스에 여전히 기록이 있는 파일을 확인합니다.
  • 데이터베이스 레코드가 없는 경우, 파일 및 디렉토리가 디스크에서 삭제됩니다.

기본적으로, 이 작업은 아무 것도 삭제하지 않고 삭제할 수 있는 내용을 보여줍니다. 실제로 파일을 삭제하려면 DRY_RUN=false로 명령어를 실행하세요:

sudo gitlab-rake gitlab:cleanup:orphan_job_artifact_files DRY_RUN=false

또한 삭제할 파일의 수를 LIMIT (기본값 100)로 제한할 수 있습니다:

sudo gitlab-rake gitlab:cleanup:orphan_job_artifact_files LIMIT=100

이는 디스크에서 최대 100개의 파일만 삭제합니다. 테스트 목적으로 작은 집합을 삭제하는 데 사용할 수 있습니다.

DEBUG=1을 제공하면, 고아로 식별된 각 파일의 전체 경로가 표시됩니다.

ionice가 설치된 경우, 해당 태스크에서 디스크에 너무 많은 부하를 일으키지 않도록 하기 위해 사용됩니다. 아래에서는 niceness 수준을 구성할 수 있지만, 정확한 수준은 man 1 ionice를 참조하세요.

  • 0 또는 None
  • 1 또는 Realtime
  • 2 또는 Best-effort (기본값)
  • 3 또는 Idle

만료된 ActiveSession 조회 키 삭제

# omnibus-gitlab
sudo gitlab-rake gitlab:cleanup:sessions:active_sessions_lookup_keys

# 설치된 소스에서
bundle exec rake gitlab:cleanup:sessions:active_sessions_lookup_keys RAILS_ENV=production

컨테이너 레지스트리 가비지 수집

컨테이너 레지스트리는 상당한 디스크 공간을 사용할 수 있습니다. 사용되지 않는 레이어를 정리하기 위해 레지스트리에는 쓰레기 수집 명령어가 포함되어 있습니다.