'apt' ตัดสินใจอย่างไรว่าจะเก็บเมล็ดข้าวไว้กี่เมล็ด


23

ฉันกำลังจัดการเซิร์ฟเวอร์สองสามเครื่องสำหรับบริการหลัก (NTP, DNS และอื่น ๆ ) และมันเพิ่งเกิดขึ้นกับฉันที่เซิร์ฟเวอร์หนึ่งดูเหมือนว่าจะเก็บเมล็ดล่าสุด 3 ตัวแทนที่จะเป็น 2 ต่อไปนี้:

nul@quark:~$ sudo apt-get autoremove --purge
Reading package lists... Done
Building dependency tree       
Reading state information... Done
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
nul@quark:~$ dpkg -l |grep linux-image
ii  linux-image-3.13.0-51-generic       3.13.0-51.84                     amd64        Linux kernel image for version 3.13.0 on 64 bit x86 SMP
ii  linux-image-3.13.0-52-generic       3.13.0-52.85                     amd64        Linux kernel image for version 3.13.0 on 64 bit x86 SMP
ii  linux-image-3.16.0-37-generic       3.16.0-37.49~14.04.1             amd64        Linux kernel image for version 3.16.0 on 64 bit x86 SMP
ii  linux-image-extra-3.13.0-51-generic 3.13.0-51.84                     amd64        Linux kernel extra modules for version 3.13.0 on 64 bit x86 SMP
ii  linux-image-extra-3.13.0-52-generic 3.13.0-52.85                     amd64        Linux kernel extra modules for version 3.13.0 on 64 bit x86 SMP
ii  linux-image-extra-3.16.0-37-generic 3.16.0-37.49~14.04.1             amd64        Linux kernel extra modules for version 3.16.0 on 64 bit x86 SMP
ii  linux-image-generic                 3.13.0.52.59                     amd64        Generic Linux kernel image
ii  linux-image-generic-lts-utopic      3.16.0.37.29                     amd64        Generic Linux kernel image

...

nul@dwarf:~$ sudo apt-get autoremove --purge
Reading package lists... Done
Building dependency tree       
Reading state information... Done
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
nul@dwarf:~$ dpkg -l |grep linux-image
ii  linux-image-3.13.0-52-generic       3.13.0-52.85                     amd64        Linux kernel image for version 3.13.0 on 64 bit x86 SMP
ii  linux-image-3.16.0-37-generic       3.16.0-37.49~14.04.1             amd64        Linux kernel image for version 3.16.0 on 64 bit x86 SMP
ii  linux-image-extra-3.13.0-52-generic 3.13.0-52.85                     amd64        Linux kernel extra modules for version 3.13.0 on 64 bit x86 SMP
ii  linux-image-extra-3.16.0-37-generic 3.16.0-37.49~14.04.1             amd64        Linux kernel extra modules for version 3.16.0 on 64 bit x86 SMP
ii  linux-image-generic                 3.13.0.52.59                     amd64        Generic Linux kernel image
ii  linux-image-generic-lts-utopic      3.16.0.37.29                     amd64        Generic Linux kernel image

เซิร์ฟเวอร์ทั้งหมดได้รับการดูแลเหมือนกันไม่รู้ว่าฉันจะทำอย่างไรต้องเป็นพารามิเตอร์ที่อื่น แต่หาไม่เจอ!

กรุณาให้อาหารความอยากรู้ของฉัน! ขอขอบคุณ

คำตอบ:


32

มีไฟล์ที่สร้างขึ้นโดยอัตโนมัติซึ่งจะบอกapt-getสิ่งที่เมล็ดให้แก่ autoremove และที่เก็บไว้
ไฟล์ที่บอกให้apt-getพวกเขาทราบว่าเป็นเมล็ดข้าว/etc/apt/apt.conf.d/01autoremove-kernelsอัน/etc/kernel/postinst.d/apt-auto-removalไหน

โดยปกติแล้วสิ่งที่เกิดขึ้นก็คือว่าเมื่อคุณได้รับการอัปเดตเคอร์เนล, เมื่อมีการเปลี่ยนแปลงรุ่นเคอร์เนลกล่าวว่าจาก3.13การ3.16, /etc/apt/apt.conf.d/01autoremove-kernelsมีการปรับปรุงแล้วที่จะให้3.16*เมล็ดและตั้งแล้วลบทั้งหมดของ3.13เมล็ดนอกจากที่ระบุไว้โดยสคริปต์สร้างที่จะไม่ถูกลบออก

จากapt-auto-removalสคริปต์:

# ผู้แต่ง: Steve Langasek 
#
# ทำเครื่องหมายเป็นไม่ได้สำหรับ autoremoval แพ็คเกจเคอร์เนลเหล่านั้นคือ:
# - เวอร์ชันที่บู๊ตในปัจจุบัน
# - เวอร์ชันเคอร์เนลที่เราเรียกใช้
# - เคอร์เนลเวอร์ชันล่าสุด (พิจารณาจากกฎที่คัดลอกมาจากด้วง
แพคเกจ # สำหรับการตัดสินใจเคอร์เนลที่จะบูต)
# - เวอร์ชันเคอร์เนลล่าสุดที่สองหากเวอร์ชันเคอร์เนลที่บูตคือ
# เป็นเวอร์ชั่นล่าสุดอยู่แล้วและสคริปต์นี้ถูกเรียกใช้สำหรับเวอร์ชันเดียวกันนั้น
# เพื่อให้แน่ใจว่าทางเลือกยังคงมีอยู่ในกรณีที่ติดตั้งใหม่
# เคอร์เนลที่ ABI นี้ไม่สามารถบูตได้
# ในกรณีทั่วไปผลลัพธ์นี้จะถูกบันทึกเป็นสองเมล็ด แต่สามารถทำได้
# ส่งผลให้ได้รับการบันทึกสามเมล็ด ดีกว่าที่จะทำผิดด้าน
# ประหยัดเมล็ดมากเกินไปกว่าการประหยัดน้อยเกินไป
#
# เราสร้างรายการนี้และบันทึกลงใน /etc/apt/apt.conf.d แทนที่จะทำเครื่องหมาย
# แพ็คเกจในฐานข้อมูลเพราะสิ่งนี้จะเรียกใช้จากสคริปต์ postinst และ apt
# จะเขียนทับ db เมื่อมันออก

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

หากคุณต้องการทำเครื่องหมายเมล็ดก่อนหน้านี้autoremoveยกเว้นสำหรับเมล็ดที่จำเป็นตามสคริปต์ให้เรียกใช้คำสั่งต่อไปนี้จากหน้าต่างเทอร์มินัล:

sudo apt-mark auto ^linux-image-

จากนั้นเมื่อคุณรันapt-get autoremoveคำสั่งเฉพาะคำสั่งที่เก่าและไม่ต้องการอีกต่อไปสามารถลบออกได้ ฉันใส่ตัวอย่างด้านล่าง:

อันแรกนี้จะแสดงเมล็ดทั้งหมดในระบบลบเคอร์เนลที่กำลังทำงานอยู่

root @ terrance-Linux: / home / share # dpkg -l 'linux- *' | sed '/ ^ ii /! d; /' "$ (uname -r | sed" s /\(.*\)-\(CD ^ 0-9] \ + \) / \ 1 / ")" '/ d; s / ^ [^] * [^] * \ ([^] * \). * / \ 1 /; / [0-9] /! d '
ลินุกซ์หัว-3.16.0-34
ลินุกซ์หัว-3.16.0-34 ทั่วไป
ลินุกซ์หัว-3.16.0-36
ลินุกซ์หัว-3.16.0-36 ทั่วไป
ลินุกซ์หัว-3.16.0-37
ลินุกซ์หัว-3.16.0-37 ทั่วไป
ลินุกซ์หัว-4.0.0-040000
ลินุกซ์หัว-4.0.0-040000 ทั่วไป
ลินุกซ์ภาพ 3.16.0-34 ทั่วไป
ลินุกซ์ภาพ 3.16.0-36 ทั่วไป
ลินุกซ์ภาพ 3.16.0-37 ทั่วไป
ลินุกซ์ภาพ 4.0.0-040000 ทั่วไป
ลินุกซ์ภาพพิเศษ 3.16.0-34 ทั่วไป
ลินุกซ์ภาพพิเศษ 3.16.0-36 ทั่วไป
ลินุกซ์ภาพพิเศษ 3.16.0-37 ทั่วไป

อันนี้แสดงเคอร์เนลที่กำลังทำงานอยู่ในปัจจุบัน

terrance @ terrance-Linux: ~ $ uname -r
4.0.1-040001 ทั่วไป
terrance @ terrance-Linux: ~ $ sudo apt-get autoremove
[sudo] รหัสผ่านสำหรับ terrance: 
กำลังอ่านรายการแพ็กเกจ ... เสร็จแล้ว
อาคารต้นไม้พึ่งพา       
กำลังอ่านข้อมูลสถานะ ... เสร็จแล้ว
0 อัพเกรดแล้ว 0 เพิ่งติดตั้งใหม่ 0 เพื่อลบและ 0 ไม่ได้อัปเกรด
terrance @ terrance-Linux: ~ $ sudo apt-mark auto ^ linux-image-
linux-image-extra-3.16.0-33-generic ไม่สามารถทำเครื่องหมายได้เนื่องจากไม่ได้ติดตั้ง
linux-image-extra-3.13.0-27-generic ไม่สามารถทำเครื่องหมายได้เนื่องจากไม่ได้ติดตั้ง
linux-image-3.13.0-44-lowlatency ไม่สามารถทำเครื่องหมายได้เนื่องจากไม่ได้ติดตั้ง
linux-image-3.13.0-27-generic ไม่สามารถทำเครื่องหมายได้เนื่องจากไม่ได้ติดตั้ง
linux-image-3.16.0-31-lowlatency ไม่สามารถทำเครื่องหมายได้เนื่องจากไม่ได้ติดตั้ง
linux-image-3.16.0-36-generic ตั้งค่าให้ติดตั้งโดยอัตโนมัติ
linux-image-lowlatency-lts-utopic ไม่สามารถทำเครื่องหมายได้เนื่องจากไม่ได้ติดตั้ง
linux-image-extra-3.13.0-36-generic ไม่สามารถทำเครื่องหมายได้เนื่องจากไม่ได้ติดตั้ง
linux-image-3.13.0-36-generic ไม่สามารถทำเครื่องหมายได้เนื่องจากไม่ได้ติดตั้ง
linux-image-4.0.0-040000-generic ตั้งค่าให้ติดตั้งโดยอัตโนมัติ
linux-image-extra-3.13.0-45-generic ไม่สามารถทำเครื่องหมายได้เนื่องจากไม่ได้ติดตั้ง
linux-image-3.16.0-25-generic ไม่สามารถทำเครื่องหมายได้เนื่องจากไม่ได้ติดตั้ง

หมายเหตุ: รายการด้านบนยาวเกินไปที่จะแสดงดังนั้นฉันจึงตัดทอนเล็กน้อย

terrance @ terrance-Linux: ~ $ sudo apt-get autoremove
กำลังอ่านรายการแพ็กเกจ ... เสร็จแล้ว
อาคารต้นไม้พึ่งพา       
กำลังอ่านข้อมูลสถานะ ... เสร็จแล้ว
แพ็คเกจต่อไปนี้จะถูกลบ:
  linux-image-3.16.0-34-generic linux-image-3.16.0-36-generic
  linux-image-4.0.0-040000-generic linux-image-extra-3.16.0-34-generic
  ลินุกซ์ภาพพิเศษ 3.16.0-36 ทั่วไป
0 อัพเกรดแล้ว 0 ติดตั้งใหม่ 5 ลบและ 0 ไม่ได้อัพเกรด
หลังจากการดำเนินการนี้พื้นที่ดิสก์ 613 MB จะเป็นอิสระ
คุณต้องการที่จะดำเนินการต่อไป? [Y / N]

ดังนั้นหลังจากรันคำสั่งเหล่านั้นคุณจะเห็นว่าตอนนี้ฉันสามารถลบเก่าทั้งหมด แต่เคอร์เนลปัจจุบัน (4.0.1-040001 ทั่วไป) และใหม่ล่าสุดถัดไป (3.16.0-37-generic)

หวังว่านี่จะช่วยได้


Ubuntu ไม่ลบอัตโนมัติตามค่าเริ่มต้นใช่หรือไม่ เรามีตัวเลือก แต่ก็ยังถือว่าเป็นไปไม่ได้ที่จะตัดสินใจว่าเคอร์เนล "ไม่พึงประสงค์" คืออะไร (ในระบบปฏิบัติการอื่น "ไม่พึงประสงค์" เท่ากับ "ไม่ได้ใช้")
Rinzwind

ตกลง. ฉันอ่านผิดโพสต์ของคุณในบิตนั้น ;-)
Rinzwind

1
@ Terrance ฉันพยายามที่จะผ่านsudo apt-mark auto ^linux-image-ตามด้วยsudo apt-get autoremove --purgeแต่ไม่มีประโยชน์ อย่างไรก็ตามมีการdist-upgradeปรับเปลี่ยนเล็กน้อย2 เมล็ด (3.13.0-52 และ 3.16.0.37) และสิ่งต่อไปนี้autoremoveกำจัด 3.13.0-51 ...
ionreflex

1
@ionreflex ดีใจที่คุณพบว่า ไม่ใช่คำตอบที่สมบูรณ์แบบและอาจไม่เหมาะกับทุกคน แต่ฉันคิดว่าเป็นเรื่องดีที่คนอย่างคุณสามารถแก้ไขปัญหาได้เล็กน้อยและหาวิธีที่จะลบออก ฉันคิดว่าdist-upgradeคุณวิ่งออกไป/etc/kernel/postinst.d/apt-auto-removalซึ่งแก้ไข/etc/apt/apt.conf.d/01autoremove-kernelsแล้วบอกว่าคนที่จะรักษา
Terrance

1
@Terrance ค่อนข้างแน่ใจว่าฉันทำdist-upgradeมาก่อน แต่บางทีความจริงที่ว่าเมล็ดได้รับการอัพเกรดเมื่อเช้านี้ได้ทำเคล็ดลับ ... แล้วไชโยและขอบคุณสำหรับคำตอบของคุณฉันได้เรียนรู้มากมายผ่านมัน!
ionreflex
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.