설치된 스냅의 이전 버전을 제거하는 방법


65

나는 스냅 사용법을 가진 초보자이며, 시스템에 설치된 앱이 거의 없습니다. 명령을 실행할 때 df -h발견 한 것은 동일한 스냅의 다른 버전을 마운트 한 것으로 나타났습니다.

/dev/loop0       143M   143M     0 100% /var/lib/snapd/snap/gravit-designer/7
/dev/loop1        82M    82M     0 100% /var/lib/snapd/snap/core/4110
/dev/loop7       198M   198M     0 100% /var/lib/snapd/snap/polarr/3
/dev/loop2        82M    82M     0 100% /var/lib/snapd/snap/core/4206
/dev/loop3       143M   143M     0 100% /var/lib/snapd/snap/gravit-designer/6
/dev/loop10      137M   137M     0 100% /var/lib/snapd/snap/gravit-designer/5

내 질문은 그들이 왜 거기에 보관하고 있는지, 오래된 것을 제거하는 유일한 방법은 제거하고 스냅을 다시 설치 prune하는 것입니다. 시스템을 유지하는 것과 같은 것이 있습니까?


답변:


84

다음은 이전 버전의 스냅을 모두 제거하는 간단한 스크립트입니다 . 이렇게하면 현재 활성 버전 만 유지되므로 디스크 공간이 약간 복구됩니다.

#!/bin/bash
# Removes old revisions of snaps
# CLOSE ALL SNAPS BEFORE RUNNING THIS
set -eu

LANG=C snap list --all | awk '/disabled/{print $1, $3}' |
    while read snapname revision; do
        snap remove "$snapname" --revision="$revision"
    done

이전 버전을 모두 제거했지만 디스크에 공간이 추가되지 않았습니다!
mtoloo

/var/lib/snapd/snaps/이 스크립트를 실행하기 전후에 dir 을 확인하십시오 . 실제로 일부 스냅을 제거한 경우 공간을 확보해야합니다. snap-name removed예를 들어와 같은 메시지가 표시되어야합니다 gtk-common-themes removed.
PeterM

일부 하드 링크가 /var/lib/snapd/cache있으므로 공간을 확보하려면 하드 링크 도 삭제해야합니다. 다음을 사용하여 캐시를 안전하게 제거 할 수 있습니다.sudo rm /var/lib/snapd/cache/*
rubo77

42

snap 2.34 이상부터 refresh.retain 옵션 을 설정하여 시스템에 의해 저장된 스냅 개정의 최대 수를 설정할 수 있습니다 .

$ sudo snap set system refresh.retain=2 

refresh.retain의 값은 2와 20 사이의 숫자와 3의 기본값있다.


1
이 작업을 수행 한 후 현재 버전은 언제 제거됩니까? 기본값 3에서 새 설정 2로 이동합니까?
Tim Richardson

새 버전이 설치되면 이전 스냅이 제거 될 것이라고 생각합니다. 이미 알고 있듯이 refresh.timer 옵션에 따라 설치된 앱을 자동으로 업데이트하므로 수동으로 업데이트하지 않아도됩니다.
Mustapha Hadid

그러나 내 컴퓨터에 필요한 수를 확인하는 방법은 무엇입니까? 예 : refresh.retain=34Gb RAM에 적합하거나 더 필요합니까?
피터 크라우스

1
@PeterKrauss 저장 장치 용량에 따라 다릅니다. RAM 용량과는 아무런 관련이 없습니다.
Mustapha Hadid

30

의존성이 없는 하나의 라이너로 다른 답변스크립트 버전 awk:

# snap list --all | while read snapname ver rev trk pub notes; do if [[ $notes = *disabled* ]]; then snap remove "$snapname" --revision="$rev"; fi; done

이것은 아마도 bash[[ 구조 와 호환되는 쉘을 로합니다 .


6
스냅을 추가 할 수있는 사용자로부터 실행해야합니다. Ubuntu Core에서 관리자는 일반 Ubuntu에서 sudo -i세션이 필요하거나 snap remove로 실행해야 할 수도 있습니다 sudo.
Gert van den Berg

@ rubo77은 영어 로캘을 가정한다고 지적했습니다. export LC_ALL=en_US.UTF-8사전에 수행 한 후 하위 쉘에서 실행하면 (메인 쉘의 로케일 환경 변수와 혼동되지 않도록)이를 확인해야합니다. (snap 명령 전에 설정할 수도 있지만 나중에 제거를 번역
해야하는지

LANG=c 독일어 콘솔에서 전체 라인이
제대로

@ rubo77 기본 로케일의 경우 실제로 LANG=C(또는 LC_ALL=C) 여야합니다 . 유효하지 않은 로케일의 기본값 c으로 인해 소문자 가 작동 할 수 있습니다 C. ( LC_MESSAGES(당신의 오류 비교 (내가 편집에 많은 사용자가 비록 ... 필요가 없습니다 설정에 대한 게시물을하지 않을) 가능성이 최소한의 설정) LANG=c locale과 함께 LANG=C locale)
버그 덴 거트 밴을

17

버전스냅 된 문서 에는 최신 두 개의 개정이 설치되지 않도록 오래된 개정이 자동으로 제거되어야한다고 명시되어 있습니다. 그러나 스냅 버전이 두 개 이상 설치되어있는 것도 확인했습니다.

모든 수정본을 나열하여 snap list --all다음과 같은 것을 볼 수 있습니다 .

Name     Version                  Rev   Tracking  Developer  Notes
core     16-2.31.2                4206  stable    canonical  core,disabled
core     16-2.32.3                4407  stable    canonical  core,disabled
core     16-2.32.5                4486  stable    canonical  core
spotify  1.0.70.399.g5ffabd56-26  5     stable    spotify    disabled
spotify  1.0.72.117.g6bd7cc73-35  6     stable    spotify    disabled
spotify  1.0.77.338.g758ebd78-41  13    stable    spotify    -

으로 개별 개정을 제거 할 수 있습니다 snap remove spotify --revision=5.

이 기능은 비활성화 된 개정판 core및 기타 종속성에 대해서도 안전 snap remove하며 명시적인 --revision=...경우에도 disabled스냅이 아닌 스냅 샷 을 제거 할 수 없습니다 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.