Rake 작업 정리

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

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

참조되지 않는 LFS 파일 제거

caution
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_PATH 대신 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={number} 매개변수를 사용할 수 있습니다.

이 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 -- : /opt/gitlab/embedded/service/gitlab-rails/public/uploads/test.out을 시작으로 하는 500개 프로젝트 업로드 파일 경로 일괄 처리 중
I, [2018-07-27T12:08:28.689869 #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.755624 #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.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 -- : /opt/gitlab/embedded/service/gitlab-rails/public/uploads/test.out을 시작으로 하는 500개 프로젝트 업로드 파일 경로 일괄 처리 중
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:28.764470 #89817]  INFO -- : 이러한 파일을 정리하려면 DRY_RUN=false 명령으로 이 명령을 실행하십시오

오브젝트 스토리지을 사용하는 경우 All-in-one 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

고아 artifact 파일 제거

note
이 명령은 객체 리포지터리에 저장된 artifact에는 작동하지 않습니다.

작업 artifact 파일 및/또는 디렉터리가 예상보다 더 많이 있을 때는 다음을 실행할 수 있습니다.

sudo gitlab-rake gitlab:cleanup:orphan_job_artifact_files

이 명령은 다음을 수행합니다:

  • 전체 artifact 폴더를 스캔합니다.
  • 데이터베이스에 여전히 기록된 파일을 확인합니다.
  • 데이터베이스 기록이 없는 경우, 파일과 디렉터리는 디스크에서 삭제됩니다.

기본적으로 이 작업은 아무것도 삭제하지 않고 삭제할 수 있는 내용을 보여줍니다. 실제로 파일을 삭제하려면 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로 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

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

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