Làm thế nào để loại bỏ phiên bản cũ của snaps cài đặt


59

Tôi là người mới sử dụng snap, tôi có vài ứng dụng được cài đặt trên hệ thống của mình, một điều mà tôi nhận thấy khi chạy lệnh df -htôi đã tìm thấy các phiên bản khác nhau của cùng một snap

/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

Câu hỏi của tôi là tại sao họ giữ ở đó, cách duy nhất tôi tìm thấy để xóa cái cũ là gỡ bỏ và cài đặt lại snap, có gì đó muốn pruneduy trì hệ thống của tôi không?


Câu trả lời:


78

Đây là một đoạn script ngắn sẽ loại bỏ tất cả các phiên bản cũ của snaps. Điều này sẽ chỉ giữ phiên bản hoạt động hiện tại, sẽ phục hồi cho bạn một số dung lượng đĩa:

#!/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

Nó đã xóa thành công tất cả các phiên bản cũ, nhưng không có không gian nào được thêm vào đĩa của tôi!
mtoloo

Kiểm tra dir /var/lib/snapd/snaps/trước và sau khi chạy tập lệnh này. Nên giải phóng một số không gian - nếu thực sự loại bỏ một số snaps. Nó sẽ hiển thị các thông điệp như snap-name removed, ví dụ gtk-common-themes removed.
PeterM

Có một số liên kết cứng trong /var/lib/snapd/cacheđó vì vậy bạn phải xóa chúng để giải phóng không gian. Bạn có thể xóa bộ nhớ cache một cách an toàn vớisudo rm /var/lib/snapd/cache/*
rubo77

40

Bắt đầu từ snap 2.34 trở lên, Bạn có thể đặt số lượng tối đa các bản sửa đổi của snap được lưu trữ bởi hệ thống bằng cách đặt tùy chọn refresh.retain.

$ sudo snap set system refresh.retain=2 

Giá trị refresh.retain chỉ có thể là một số trong khoảng từ 2 đến 20 và có giá trị mặc định là 3


1
sau khi thực hiện việc này, chuyển từ cài đặt 3 mặc định sang cài đặt mới là 2, khi nào các phiên bản hiện tại bị xóa?
Tim Richardson

Tôi nghĩ rằng các snaps cũ sẽ bị xóa khi cài đặt phiên bản mới. Như bạn có thể đã biết, snap cập nhật các ứng dụng được cài đặt tự động tùy thuộc vào tùy chọn refresh.timer, do đó bạn không phải thực hiện cập nhật thủ công
Mustapha Hadid

Nhưng làm thế nào để kiểm tra xem máy tính của tôi cần bao nhiêu? Ví dụ: refresh.retain=3tốt cho RAM 4Gb hay cần thêm?
Peter Krauss

1
@PeterKrauss Nó phụ thuộc vào dung lượng thiết bị lưu trữ của bạn. Nó không có gì để làm với dung lượng RAM của bạn.
Mustapha Hadid

25

Một phiên bản của tập lệnh từ một câu trả lời khác , dưới dạng một lớp lót, không có sự awkphụ thuộc:

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

Điều này có thể yêu cầu bashhoặc một vỏ tương thích với [[cấu trúc.


5
Điều này nên được chạy từ một người dùng có thể thêm snaps. Trên Ubuntu Core, người dùng quản trị viên làm việc, trên Ubuntu bình thường, sudo -icó thể cần một phiên hoặc snap removecó thể cần phải chạy cùng sudo.
Gert van den Berg

@ rubo77 chỉ ra rằng nó không có ngôn ngữ tiếng Anh. Chạy nó trong shell phụ (để không gây rối với các biến env cục bộ của shell chính) sau khi thực hiện export LC_ALL=en_US.UTF-8trước sẽ đảm bảo điều đó. (Nó cũng có thể được đặt trước lệnh snap, nhưng tôi không chắc liệu các phần xóa sau này có cần phải được dịch hay không)
Gert van den Berg

Chỉ cần thêm LANG=c trước khi toàn bộ dòng hoạt động tốt trên bảng điều khiển của Đức
rubo77

@ rubo77 Nó thực sự có thể là LANG=C(hoặc LC_ALL=C) cho miền địa phương mặc định. Chữ thường ccó thể hoạt động do Cđược mặc định cho một miền địa phương không hợp lệ. ( LC_MESSAGEScó thể là cài đặt tối thiểu) (Tôi không muốn chỉnh sửa bài đăng cho cài đặt mà nhiều người dùng không cần mặc dù ...) (Bạn so sánh các lỗi LANG=c localevới LANG=C locale)
Gert van den Berg

15

Các tài liệu snapd trên các phiên bản nói rằng các bản sửa đổi lỗi thời sẽ được tự động xóa để không quá hai bản sửa đổi cuối cùng được cài đặt. Tuy nhiên, tôi cũng đã thấy nhiều hơn hai phiên bản snaps của tôi được cài đặt.

Bạn có thể liệt kê tất cả các sửa đổi với snap list --allđể xem một cái gì đó như:

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    -

Bạn có thể loại bỏ các sửa đổi cá nhân với snap remove spotify --revision=5.

Điều này an toàn ngay cả đối với các phiên bản bị vô hiệu hóa corevà các phụ thuộc khác, và snap removevới một điều rõ ràng --revision=...thậm chí ngăn bạn loại bỏ các lỗi không disabled.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.