วิธีลบ snaps ที่ติดตั้งรุ่นเก่า


25

ฉันเพิ่งเห็นการใช้งาน snap ฉันมีแอพพลิเคชั่นติดตั้งอยู่ในระบบของฉันสิ่งที่ฉันสังเกตเห็นเมื่อเรียกใช้คำสั่ง df -h ฉันพบรุ่นที่แตกต่างกันของ 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

คำถามของฉันคือทำไมพวกเขาเก็บไว้ที่นั่นวิธีเดียวที่ฉันพบว่าการลบเก่าคือการลบและติดตั้งอีกครั้งอย่างรวดเร็วมีอะไรบางอย่าง prune การบำรุงรักษาระบบของฉัน


คำตอบ:


31

นี่เป็นสคริปต์สั้น ๆ ที่จะลบ ทั้งหมด snaps รุ่นเก่า สิ่งนี้จะเก็บเวอร์ชันปัจจุบันที่ใช้งานอยู่เท่านั้นซึ่งควรกู้คืนพื้นที่ว่างในดิสก์ของคุณ

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

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

สุดยอดสคริปต์!
Oliver

22

เริ่มต้นจาก snap 2.34 และใหม่กว่าคุณสามารถกำหนดจำนวนสูงสุดของการแก้ไขของ snap ที่จัดเก็บโดยระบบโดยการตั้งค่าตัวเลือก refresh.retain

$ sudo snap set system refresh.retain=2 

ค่า refresh.retain สามารถเป็นตัวเลขระหว่าง 2 ถึง 20 เท่านั้นและมีค่าเริ่มต้นเท่ากับ 3


หลังจากทำเช่นนี้แล้วย้ายจากค่าเริ่มต้น 3 เป็นการตั้งค่าใหม่เป็น 2 เมื่อรุ่นปัจจุบันถูกลบ
Tim Richardson

ฉันคิดว่าภาพเก่าจะถูกลบเมื่อติดตั้งเวอร์ชั่นใหม่ ดังที่คุณอาจทราบอยู่แล้วว่าให้อัปเดตแอปที่ติดตั้งไว้โดยอัตโนมัติขึ้นอยู่กับตัวเลือก refresh.timer ดังนั้นคุณไม่จำเป็นต้องทำการอัพเดทด้วยตนเอง
Mustapha Hadid

11

เอกสาร 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=... แม้จะป้องกันไม่ให้คุณลบ disabled ยึด


5

รุ่นของ สคริปต์จากคำตอบอื่น ในฐานะหนึ่งซับโดยไม่มี 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 หรือเปลือกที่เข้ากันได้กับ [[ สร้าง.


ควรเรียกใช้จากผู้ใช้ที่สามารถเพิ่มสแน็ป ใน Ubuntu Core ผู้ใช้งาน admin สามารถใช้งานได้บน Ubuntu ปกติ sudo -i อาจจำเป็นต้องใช้เซสชันหรือ snap remove อาจจำเป็นต้องเรียกใช้ด้วย sudo.
Gert van den Berg
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.