Skip to content

쓰레기 수집

업그레이드 (-u)나 삭제 (-e)와 같은 nix-env 기능은 시스템에서 패키지들을 절대 실제로 삭제하지 않습니다. 이 기능들은 모두 (위에서 보여드린 것처럼) "삭제되었다"는 패키지들을 향하는 심볼릭 링크들을 더이상 가리키지 않도록 새로운 사용자 환경을 만들 뿐입니다.

물론, 디스크 공간이 무한한것이 아니므로 사용되지 않는 패키지들은 언젠가 지워져야 할것입니다. 사용자는 닉스 쓰레기 수집기를 이용할 수 있습니다. 쓰레기 수집기는 어떤 프로파일의 어떤 세대에 의해서도 (직/간접적으로든) 사용되지 않고 있는 닉스 저장소의 패키지들을 제거해줍니다.

주의할점은 아무리 오래된 세대라고 하더라도 특정 패키지를 지목하고 있는한 제거되지 않는다는 점입니다. 그렇지 않으면, 롤백은 불가능할 것이기 때문입니다. 따라서 쓰레기 수집이 효과적이기 위해서는, (일부) 구 세대도 함께 제거해야 합니다. 당연히, 그 세대들로 롤백하지 않을 것임을 확신할 수 있을 때에만 수행해야 할것입니다.

현재 프로파일의 모든 구 (현재 것이 아닌) 세대를 제거하려면:

$ nix-env --delete-generations old

old 대신에 세대 목록을 특정할 수도 있습니다. 예를 들어,

$ nix-env --delete-generations 10 11 14

특정한 날짜 이상 오래된 (현재 세대를 제외하고) 세대들을 지우고 싶다면 d 접미사를 사용하세요. 예를 들어,

$ nix-env --delete-generations 14d

는 2주 이상된 구 세대를 제거합니다.

적절히 구 세대들을 제거한 이후라면 쓰레기 수집기를 다음과 같이 실행할 수 있습니다:

$ nix-store --gc

쓰레기 수집기의 작동은 닉스 수정 파일의 keep-derivations (기본값: 참)과 keep-outputs (기본값: 거짓) 옵션들의 영향을 받습니다. 기본 설정값은 쓰레기 수집기 루트들의 모든 빌드 시점 의존성을 없애지 않도록 하고, 실행 시점 의존성의 모든 아웃풋 경로 역시 없애지 않도록 확실히 하고자 설정되어 있습니다. 다른 모든 제작물과 경로는 수집될 것입니다. (이는 보통 사용자가 원하는 결과입니다만 만약 사용자가 무언가를 개발중이라면 재-빌드 시간을 단축하고자 아웃풋을 그대로 두는게 더 말이 될지도 모릅니다.) 확신이 서지 않는 경우라면, 우선 어떤 파일들이 삭제될지 확인할 수 있습니다:

$ nix-store --gc --print-dead

마찬가지로, 옵션 --print-live는 삭제되지 않을 경로들을 보여줍니다.

편리한 소도구 nix-collect-garbage도 존재하는데, 이것은 -d (--delete-old)를 통해 실행되며 `/nix/var/nix/profiles'의 모든 프로파일의 모든 구세대를 삭제해줍니다.

따라서,

$ nix-collect-garbage -d

는 시스템 청소를 위한 빠르고 편리한 방법입니다.


Last update: November 4, 2021
Back to top