Как удалить старую версию установленных снимков

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обслуживания моей системы?

rkmax
источник

Ответы:

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/до и после запуска этого скрипта. Должно было освободить немного места - если действительно убрали несколько снимков. Должны отображаться такие сообщения, как snap-name removed, например gtk-common-themes removed.
PeterM
Есть несколько жестких ссылок, /var/lib/snapd/cacheпоэтому вы должны удалить их, чтобы освободить место. Вы можете безопасно удалить кеш сsudo rm /var/lib/snapd/cache/*
rubo77
42

Начиная с версии 2.34 и более поздних, вы можете установить максимальное количество версий оснастки, сохраняемых системой, установив параметр refresh.retain .

$ sudo snap set system refresh.retain=2 

Значение refresh.retain может быть числом от 2 до 20 и имеет значение по умолчанию 3.

Мустафа Хадид
источник
1
после этого переходя от значения по умолчанию 3 к новому значению 2, когда удаляются текущие версии?
Тим Ричардсон
Я думаю, что старые снимки будут удалены после установки новой версии. Как вы, возможно, уже знаете, привязывайте обновления установленных приложений автоматически в зависимости от параметра refresh.timer, поэтому вам не нужно делать обновление вручную
Mustapha Hadid
Но как проверить, сколько нужно моему компьютеру? Пример: refresh.retain=3хорошо для 4Gb RAM или нужно больше?
Питер Краусс
1
@PeterKrauss Это зависит от емкости вашего устройства хранения. Это никак не связано с объемом вашей оперативной памяти.
Мустафа Хадид
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.
Герт ван ден Берг
@ rubo77 указал, что он предполагает английский язык. Запуск его в суб-оболочки (чтобы не возиться с локали переменных ENV главного командного интерпретатора) после выполнения export LC_ALL=en_US.UTF-8заранее должен убедиться в том. (Это также может быть установлено перед командой snap, но я не уверен, что последующее удаление может потребоваться также перевести)
Герт ван ден Берг
Просто добавьте, LANG=c прежде чем вся строка отлично работает на немецких консолях
rubo77
@ rubo77 Скорее всего, это должно быть LANG=C(или LC_ALL=C) для локали по умолчанию. Нижний регистр cможет работать из-за Cтого, что по умолчанию используется неверный языковой стандарт. ( LC_MESSAGESвероятно, минимальный параметр) (Я не хочу редактировать сообщение для параметра, который многим пользователям не нужен ...) (Вы сравниваете ошибки LANG=c localeс LANG=C locale)
Герт ван ден Берг
17

Документы Snapd по версиям утверждают, что устаревшие версии должны быть автоматически удалены, чтобы не было установлено более двух последних версий. Тем не менее, я также увидел более двух версий моих снимков.

Вы можете перечислить все ревизии, 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=...даже предотвращает удаление non- disabledsnaps.

Томаш Гавенчяк
источник