InfoGrab DocsInfoGrab Docs

정리 Rake 작업

요약

GitLab은 GitLab 인스턴스를 정리하는 Rake 태스크를 제공합니다. GitLab 업그레이드 후 12시간 이내에는 이 태스크를 실행하지 않습니다. 리포지터리 히스토리에서 LFS 파일을 제거하면 해당 파일은 고아 상태가 되어 계속 디스크 공간을 차지합니다.

GitLab은 GitLab 인스턴스를 정리하는 Rake 태스크를 제공합니다.

참조되지 않은 LFS 파일 제거#

Warning

GitLab 업그레이드 후 12시간 이내에는 이 태스크를 실행하지 않습니다. 모든 백그라운드 마이그레이션이 완료되도록 하기 위해서이며, 그렇지 않으면 데이터가 손실될 수 있습니다.

리포지터리 히스토리에서 LFS 파일을 제거하면 해당 파일은 고아 상태가 되어 계속 디스크 공간을 차지합니다. 이 Rake 태스크로 데이터베이스에서 유효하지 않은 참조를 제거하면 LFS 파일을 가비지 컬렉션할 수 있습니다. 예를 들면 다음과 같습니다.

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 -- :  Looking for orphan LFS files for project GitLab Org / GitLab Foss
I, [2019-12-13T16:35:31.923659 #82356]  INFO -- :  Removed invalid references: 12

기본적으로 이 태스크는 아무것도 삭제하지 않고 삭제할 수 있는 파일 참조 수만 표시합니다. 실제로 참조를 삭제하려면 DRY_RUN=false와 함께 명령을 실행합니다. LIMIT={number} 매개변수로 삭제할 참조 수를 제한할 수도 있습니다.

이 Rake 태스크는 LFS 파일에 대한 참조만 제거합니다. 참조되지 않은 LFS 파일은 이후에 (하루에 한 번) 가비지 컬렉션됩니다. 즉시 가비지 컬렉션해야 한다면 아래에 설명하는 rake gitlab:cleanup:orphan_lfs_files를 실행합니다.

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

참조되지 않은 LFS 파일은 매일 제거되지만, 필요하면 즉시 제거할 수도 있습니다. 참조되지 않은 LFS 파일을 즉시 제거하려면 다음 명령을 실행합니다.

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 -- : Removed unreferenced LFS files: 12

프로젝트 업로드 파일 정리#

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

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

GitLab 데이터베이스에 존재하지 않는 로컬 프로젝트 업로드 파일을 정리합니다. 이 태스크는 해당 파일의 프로젝트를 찾을 수 있으면 파일을 복구하고, 찾지 못하면 파일을 lost and found 디렉터리로 옮깁니다. 파일 시스템에서 프로젝트 업로드 파일을 정리하려면 다음 명령을 실행합니다.

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 -- : Looking for orphaned project uploads to clean up. Dry run...
D, [2018-07-27T12:08:28.293568 #89817] DEBUG -- : Processing batch of 500 project upload file paths, starting with /opt/gitlab/embedded/service/gitlab-rails/public/uploads/test.out
I, [2018-07-27T12:08:28.689869 #89817]  INFO -- : Can move to lost and found /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 -- : Can fix /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 -- : Can move to lost and found /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 -- : To cleanup these files run this command with DRY_RUN=false

$ sudo gitlab-rake gitlab:cleanup:project_uploads DRY_RUN=false
I, [2018-07-27T12:08:32.944414 #89936]  INFO -- : Looking for orphaned project uploads to clean up...
D, [2018-07-27T12:08:33.293568 #89817] DEBUG -- : Processing batch of 500 project upload file paths, starting with /opt/gitlab/embedded/service/gitlab-rails/public/uploads/test.out
I, [2018-07-27T12:08:33.689869 #89817]  INFO -- : Did move to lost and found /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 -- : Did fix /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 -- : Did move to lost and found /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 태스크를 실행하여 모든 업로드가 오브젝트 스토리지로 마이그레이션되었고 uploads 폴더의 디스크에 파일이 남아 있지 않은지 확인합니다.

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

GitLab 데이터베이스에 존재하지 않는 오브젝트 스토리지 업로드 파일을 lost and found 디렉터리로 옮깁니다. 오브젝트 스토리지에서 프로젝트 업로드 파일을 정리하려면 다음 명령을 실행합니다.

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 -- : Looking for orphaned remote uploads to remove. Dry run...
I, [2018-08-02T10:26:14.120400 #45011]  INFO -- : Can be moved to lost and found: @hashed/6b/DSC_6152.JPG
I, [2018-08-02T10:26:14.120482 #45011]  INFO -- : Can be moved to lost and found: @hashed/79/02/7902699be42c8a8e46fbbb4501726517e86b22c56a189f7625a6da49081b2451/711491b29d3eb08837798c4909e2aa4d/DSC00314.jpg
I, [2018-08-02T10:26:14.120634 #45011]  INFO -- : To cleanup these files run this command with DRY_RUN=false
$ sudo gitlab-rake gitlab:cleanup:remote_upload_files DRY_RUN=false

I, [2018-08-02T10:26:47.598424 #45087]  INFO -- : Looking for orphaned remote uploads to remove...
I, [2018-08-02T10:26:47.753131 #45087]  INFO -- : Moved to lost and found: @hashed/6b/DSC_6152.JPG -> lost_and_found/@hashed/6b/DSC_6152.JPG
I, [2018-08-02T10:26:47.764356 #45087]  INFO -- : Moved to lost and found: @hashed/79/02/7902699be42c8a8e46fbbb4501726517e86b22c56a189f7625a6da49081b2451/711491b29d3eb08837798c4909e2aa4d/DSC00314.jpg -> lost_and_found/@hashed/79/02/7902699be42c8a8e46fbbb4501726517e86b22c56a189f7625a6da49081b2451/711491b29d3eb08837798c4909e2aa4d/DSC00314.jpg

고아 아티팩트 파일 제거#

Note

이 명령은 오브젝트 스토리지에 저장된 아티팩트에는 동작하지 않습니다.

디스크에 있어야 할 것보다 많은 job 아티팩트 파일이나 디렉터리가 있다면 다음 명령을 실행할 수 있습니다.

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가 설치되어 있으면 이 태스크는 ionice를 사용하여 명령이 디스크에 과도한 부하를 주지 않도록 합니다. NICENESS로 niceness 수준을 구성할 수 있습니다. 유효한 수준은 다음과 같으며, 정확한 내용은 man 1 ionice를 확인합니다.

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

제거된 스토리지의 고아 풀 리포지터리 레코드 제거#

히스토리

구성에서 Gitaly 스토리지를 영구적으로 제거하면 해당 스토리지의 객체 중복 제거 풀에 대한 데이터베이스 레코드가 남을 수 있습니다. 이 레코드는 참조하는 스토리지가 더 이상 존재하지 않으므로 일반적인 하우스키핑으로는 정리되지 않습니다.

이 Rake 태스크는 다음 조건을 만족하는 pool_repositories 데이터베이스 레코드를 삭제합니다.

  • 지정한 스토리지 중 하나에 있습니다.
  • 소스 프로젝트가 없습니다.
  • 어떤 프로젝트에서도 참조하지 않습니다.

프로젝트가 여전히 참조하는 레코드는 삭제되지 않으며, 대신 태스크 출력에 보고됩니다.

Warning

영구적으로 제거되었고 데이터도 사라진 스토리지만 전달합니다. 전달한 스토리지가 현재 Gitaly 구성에 남아 있으면 태스크는 실행을 거부합니다. 삭제된 레코드는 생성된 CSV 파일로만 복원할 수 있습니다. 이 태스크는 Rails 노드처럼 Gitaly 스토리지 구성 전체를 가진 노드에서 실행합니다. 구성이 일부만 있는 노드에서는 안전성 검사가 해당 스토리지가 여전히 사용 중이라는 사실을 감지하지 못합니다.

기본적으로 이 태스크는 시험 실행 모드로 동작합니다. 아무것도 삭제하지 않고 삭제 대상 레코드를 OUTPUT_FILE에 지정한 CSV 파일에 기록합니다. 먼저 그 파일을 검토합니다.

sudo gitlab-rake gitlab:pool_repositories:cleanup_orphaned_on_missing_shards \
  SHARD_NAMES=old-storage-1,old-storage-2 OUTPUT_FILE=/tmp/orphaned_pools.csv

레코드를 삭제하려면 DRY_RUN=false와 함께 명령을 다시 실행합니다. 필수인 DELETED_IDS_FILE을 OUTPUT_FILE과 다른 경로로 설정합니다.

sudo gitlab-rake gitlab:pool_repositories:cleanup_orphaned_on_missing_shards \
  SHARD_NAMES=old-storage-1,old-storage-2 OUTPUT_FILE=/tmp/deleted_pools.csv \
  DELETED_IDS_FILE=/tmp/deleted_pool_ids.csv DRY_RUN=false

OUTPUT_FILE은 모든 데이터베이스 칼럼과 샤드 이름을 담은 복구용 CSV입니다. 복구에 사용할 수 있도록 이 파일을 안전하게 보관합니다. 태스크는 삭제하기 전에 각 배치를 CSV에 기록하고 플러시한 다음, 백업된 ID 중 원래 조건을 여전히 충족하는 ID만 삭제합니다. 백업된 레코드가 소스 프로젝트나 멤버 프로젝트를 얻게 되면 삭제되지 않고 남을 수 있습니다. 백업이 없는 새로 대상이 된 레코드는 다음 실행을 기다립니다.

실제 실행에서는 DELETED_IDS_FILE로 지정한 파일도 생성합니다. 이 파일은 실제 DELETE RETURNING 결과에서 가져온 Pool ID 칼럼 하나만 있는 감사용 CSV입니다. 이 파일은 삭제된 레코드를 식별하며, 복구용 CSV에는 삭제되지 않고 남은 레코드가 포함될 수 있습니다. 삭제 후 감사 기록을 쓰기 전에 충돌이 발생하면 감사 기록이 불완전할 수 있습니다. 복구 데이터는 이미 기록된 상태입니다. 드라이 런에는 OUTPUT_FILE만 필요하며 복구용 CSV만 생성합니다.

완료 로그에는 복구용 CSV의 전체 레코드 수와 삭제된 ID의 총수가 보고됩니다. CSV 파일에는 헤더와 데이터만 있으며 합계 행은 없습니다. 태스크가 쓰려는 파일이 하나라도 이미 존재하면 실행을 거부합니다. 실행할 때마다 새 출력 경로를 사용합니다.

만료된 ActiveSession 조회 키 제거#

만료된 ActiveSession 조회 키를 제거하려면 다음 명령을 실행합니다.

sudo gitlab-rake gitlab:cleanup:sessions:active_sessions_lookup_keys
bundle exec rake gitlab:cleanup:sessions:active_sessions_lookup_keys RAILS_ENV=production

컨테이너 레지스트리 가비지 컬렉션#

컨테이너 레지스트리는 상당한 디스크 공간을 사용할 수 있습니다. 사용하지 않는 레이어를 정리할 수 있도록 레지스트리는 가비지 컬렉션 명령을 제공합니다.

정리 Rake 작업

GitLab v19.5
Tier: Free, Premium, Ultimate
Offering: GitLab Self-Managed
원문 보기

요약

GitLab은 GitLab 인스턴스를 정리하는 Rake 태스크를 제공합니다. GitLab 업그레이드 후 12시간 이내에는 이 태스크를 실행하지 않습니다. 리포지터리 히스토리에서 LFS 파일을 제거하면 해당 파일은 고아 상태가 되어 계속 디스크 공간을 차지합니다.

GitLab은 GitLab 인스턴스를 정리하는 Rake 태스크를 제공합니다.

참조되지 않은 LFS 파일 제거#

Warning

GitLab 업그레이드 후 12시간 이내에는 이 태스크를 실행하지 않습니다. 모든 백그라운드 마이그레이션이 완료되도록 하기 위해서이며, 그렇지 않으면 데이터가 손실될 수 있습니다.

리포지터리 히스토리에서 LFS 파일을 제거하면 해당 파일은 고아 상태가 되어 계속 디스크 공간을 차지합니다. 이 Rake 태스크로 데이터베이스에서 유효하지 않은 참조를 제거하면 LFS 파일을 가비지 컬렉션할 수 있습니다. 예를 들면 다음과 같습니다.

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 -- :  Looking for orphan LFS files for project GitLab Org / GitLab Foss
I, [2019-12-13T16:35:31.923659 #82356]  INFO -- :  Removed invalid references: 12

기본적으로 이 태스크는 아무것도 삭제하지 않고 삭제할 수 있는 파일 참조 수만 표시합니다. 실제로 참조를 삭제하려면 DRY_RUN=false와 함께 명령을 실행합니다. LIMIT={number} 매개변수로 삭제할 참조 수를 제한할 수도 있습니다.

이 Rake 태스크는 LFS 파일에 대한 참조만 제거합니다. 참조되지 않은 LFS 파일은 이후에 (하루에 한 번) 가비지 컬렉션됩니다. 즉시 가비지 컬렉션해야 한다면 아래에 설명하는 rake gitlab:cleanup:orphan_lfs_files를 실행합니다.

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

참조되지 않은 LFS 파일은 매일 제거되지만, 필요하면 즉시 제거할 수도 있습니다. 참조되지 않은 LFS 파일을 즉시 제거하려면 다음 명령을 실행합니다.

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 -- : Removed unreferenced LFS files: 12

프로젝트 업로드 파일 정리#

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

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

GitLab 데이터베이스에 존재하지 않는 로컬 프로젝트 업로드 파일을 정리합니다. 이 태스크는 해당 파일의 프로젝트를 찾을 수 있으면 파일을 복구하고, 찾지 못하면 파일을 lost and found 디렉터리로 옮깁니다. 파일 시스템에서 프로젝트 업로드 파일을 정리하려면 다음 명령을 실행합니다.

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 -- : Looking for orphaned project uploads to clean up. Dry run...
D, [2018-07-27T12:08:28.293568 #89817] DEBUG -- : Processing batch of 500 project upload file paths, starting with /opt/gitlab/embedded/service/gitlab-rails/public/uploads/test.out
I, [2018-07-27T12:08:28.689869 #89817]  INFO -- : Can move to lost and found /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 -- : Can fix /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 -- : Can move to lost and found /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 -- : To cleanup these files run this command with DRY_RUN=false

$ sudo gitlab-rake gitlab:cleanup:project_uploads DRY_RUN=false
I, [2018-07-27T12:08:32.944414 #89936]  INFO -- : Looking for orphaned project uploads to clean up...
D, [2018-07-27T12:08:33.293568 #89817] DEBUG -- : Processing batch of 500 project upload file paths, starting with /opt/gitlab/embedded/service/gitlab-rails/public/uploads/test.out
I, [2018-07-27T12:08:33.689869 #89817]  INFO -- : Did move to lost and found /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 -- : Did fix /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 -- : Did move to lost and found /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 태스크를 실행하여 모든 업로드가 오브젝트 스토리지로 마이그레이션되었고 uploads 폴더의 디스크에 파일이 남아 있지 않은지 확인합니다.

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

GitLab 데이터베이스에 존재하지 않는 오브젝트 스토리지 업로드 파일을 lost and found 디렉터리로 옮깁니다. 오브젝트 스토리지에서 프로젝트 업로드 파일을 정리하려면 다음 명령을 실행합니다.

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 -- : Looking for orphaned remote uploads to remove. Dry run...
I, [2018-08-02T10:26:14.120400 #45011]  INFO -- : Can be moved to lost and found: @hashed/6b/DSC_6152.JPG
I, [2018-08-02T10:26:14.120482 #45011]  INFO -- : Can be moved to lost and found: @hashed/79/02/7902699be42c8a8e46fbbb4501726517e86b22c56a189f7625a6da49081b2451/711491b29d3eb08837798c4909e2aa4d/DSC00314.jpg
I, [2018-08-02T10:26:14.120634 #45011]  INFO -- : To cleanup these files run this command with DRY_RUN=false
$ sudo gitlab-rake gitlab:cleanup:remote_upload_files DRY_RUN=false

I, [2018-08-02T10:26:47.598424 #45087]  INFO -- : Looking for orphaned remote uploads to remove...
I, [2018-08-02T10:26:47.753131 #45087]  INFO -- : Moved to lost and found: @hashed/6b/DSC_6152.JPG -> lost_and_found/@hashed/6b/DSC_6152.JPG
I, [2018-08-02T10:26:47.764356 #45087]  INFO -- : Moved to lost and found: @hashed/79/02/7902699be42c8a8e46fbbb4501726517e86b22c56a189f7625a6da49081b2451/711491b29d3eb08837798c4909e2aa4d/DSC00314.jpg -> lost_and_found/@hashed/79/02/7902699be42c8a8e46fbbb4501726517e86b22c56a189f7625a6da49081b2451/711491b29d3eb08837798c4909e2aa4d/DSC00314.jpg

고아 아티팩트 파일 제거#

Note

이 명령은 오브젝트 스토리지에 저장된 아티팩트에는 동작하지 않습니다.

디스크에 있어야 할 것보다 많은 job 아티팩트 파일이나 디렉터리가 있다면 다음 명령을 실행할 수 있습니다.

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가 설치되어 있으면 이 태스크는 ionice를 사용하여 명령이 디스크에 과도한 부하를 주지 않도록 합니다. NICENESS로 niceness 수준을 구성할 수 있습니다. 유효한 수준은 다음과 같으며, 정확한 내용은 man 1 ionice를 확인합니다.

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

제거된 스토리지의 고아 풀 리포지터리 레코드 제거#

히스토리

구성에서 Gitaly 스토리지를 영구적으로 제거하면 해당 스토리지의 객체 중복 제거 풀에 대한 데이터베이스 레코드가 남을 수 있습니다. 이 레코드는 참조하는 스토리지가 더 이상 존재하지 않으므로 일반적인 하우스키핑으로는 정리되지 않습니다.

이 Rake 태스크는 다음 조건을 만족하는 pool_repositories 데이터베이스 레코드를 삭제합니다.

  • 지정한 스토리지 중 하나에 있습니다.
  • 소스 프로젝트가 없습니다.
  • 어떤 프로젝트에서도 참조하지 않습니다.

프로젝트가 여전히 참조하는 레코드는 삭제되지 않으며, 대신 태스크 출력에 보고됩니다.

Warning

영구적으로 제거되었고 데이터도 사라진 스토리지만 전달합니다. 전달한 스토리지가 현재 Gitaly 구성에 남아 있으면 태스크는 실행을 거부합니다. 삭제된 레코드는 생성된 CSV 파일로만 복원할 수 있습니다. 이 태스크는 Rails 노드처럼 Gitaly 스토리지 구성 전체를 가진 노드에서 실행합니다. 구성이 일부만 있는 노드에서는 안전성 검사가 해당 스토리지가 여전히 사용 중이라는 사실을 감지하지 못합니다.

기본적으로 이 태스크는 시험 실행 모드로 동작합니다. 아무것도 삭제하지 않고 삭제 대상 레코드를 OUTPUT_FILE에 지정한 CSV 파일에 기록합니다. 먼저 그 파일을 검토합니다.

sudo gitlab-rake gitlab:pool_repositories:cleanup_orphaned_on_missing_shards \
  SHARD_NAMES=old-storage-1,old-storage-2 OUTPUT_FILE=/tmp/orphaned_pools.csv

레코드를 삭제하려면 DRY_RUN=false와 함께 명령을 다시 실행합니다. 필수인 DELETED_IDS_FILE을 OUTPUT_FILE과 다른 경로로 설정합니다.

sudo gitlab-rake gitlab:pool_repositories:cleanup_orphaned_on_missing_shards \
  SHARD_NAMES=old-storage-1,old-storage-2 OUTPUT_FILE=/tmp/deleted_pools.csv \
  DELETED_IDS_FILE=/tmp/deleted_pool_ids.csv DRY_RUN=false

OUTPUT_FILE은 모든 데이터베이스 칼럼과 샤드 이름을 담은 복구용 CSV입니다. 복구에 사용할 수 있도록 이 파일을 안전하게 보관합니다. 태스크는 삭제하기 전에 각 배치를 CSV에 기록하고 플러시한 다음, 백업된 ID 중 원래 조건을 여전히 충족하는 ID만 삭제합니다. 백업된 레코드가 소스 프로젝트나 멤버 프로젝트를 얻게 되면 삭제되지 않고 남을 수 있습니다. 백업이 없는 새로 대상이 된 레코드는 다음 실행을 기다립니다.

실제 실행에서는 DELETED_IDS_FILE로 지정한 파일도 생성합니다. 이 파일은 실제 DELETE RETURNING 결과에서 가져온 Pool ID 칼럼 하나만 있는 감사용 CSV입니다. 이 파일은 삭제된 레코드를 식별하며, 복구용 CSV에는 삭제되지 않고 남은 레코드가 포함될 수 있습니다. 삭제 후 감사 기록을 쓰기 전에 충돌이 발생하면 감사 기록이 불완전할 수 있습니다. 복구 데이터는 이미 기록된 상태입니다. 드라이 런에는 OUTPUT_FILE만 필요하며 복구용 CSV만 생성합니다.

완료 로그에는 복구용 CSV의 전체 레코드 수와 삭제된 ID의 총수가 보고됩니다. CSV 파일에는 헤더와 데이터만 있으며 합계 행은 없습니다. 태스크가 쓰려는 파일이 하나라도 이미 존재하면 실행을 거부합니다. 실행할 때마다 새 출력 경로를 사용합니다.

만료된 ActiveSession 조회 키 제거#

만료된 ActiveSession 조회 키를 제거하려면 다음 명령을 실행합니다.

sudo gitlab-rake gitlab:cleanup:sessions:active_sessions_lookup_keys
bundle exec rake gitlab:cleanup:sessions:active_sessions_lookup_keys RAILS_ENV=production

컨테이너 레지스트리 가비지 컬렉션#

컨테이너 레지스트리는 상당한 디스크 공간을 사용할 수 있습니다. 사용하지 않는 레이어를 정리할 수 있도록 레지스트리는 가비지 컬렉션 명령을 제공합니다.