Як видалити стару версію встановлених знімків


65

Я newbiew зі швидким використанням, у мене на моїй системі встановлено кілька додатків, те, що я помічаю, коли запускаю команду, 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

Перевірте dir /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, тому вам не доведеться робити оновлення вручну
— Мустафа Хадід

Але як перевірити, скільки потрібно моєму комп'ютеру? Приклад: refresh.retain=3добре для оперативної пам'яті 4Gb або потрібно більше?
— Пітер Краусс

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слід запевнитись у цьому. (Його також можна встановити перед командою оснащення, але я не впевнений, чи видалення пізніше може знадобитися перекласти також)
— Герт ван ден Берг

Просто додайте LANG=c перед тим, як вся лінійка працює добре на німецьких консолях
— rubo77

@ 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невідомі.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.