Els एप्ट ’कैसे तय करता है कि कितनी पुरानी गुठली रखनी है?


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कि ऑटोरेमोव के लिए कौन सी गुठली है और कौन सी रखनी है।
वह फ़ाइल जो बताती है कि 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स्क्रिप्ट:

# लेखक: स्टीव लैंगसेक 
#
# उन कर्नेल पैकेजों के लिए नहीं, जिनके लिए- autoremoval चिह्नित करें:
# - वर्तमान में बूट किया गया संस्करण
# - कर्नेल संस्करण जिसके लिए हमें बुलाया गया है
# - नवीनतम कर्नेल संस्करण (ग्रब से कॉपी किए गए नियमों का उपयोग करके निर्धारित किया गया है)
# किस कर्नेल को बूट करने का निर्णय लेने के लिए पैकेज)
# - दूसरा-नवीनतम कर्नेल संस्करण, यदि बूट किया हुआ कर्नेल संस्करण है
# पहले से ही नवीनतम और इस स्क्रिप्ट को उसी संस्करण के लिए कहा जाता है,
# यह सुनिश्चित करने के लिए कि नव-स्थापित होने की स्थिति में एक कमबैक उपलब्ध रहेगा
# इस ABI में कर्नेल बूट होने में विफल रहता है
# आम मामले में, यह ठीक दो गुठली में परिणाम है, लेकिन यह कर सकते हैं
# तीन गुठली में परिणाम बचाया जा रहा है। के पक्ष में गलती करना बेहतर है
# बहुत से गुठली को बचाने से बहुत कम बचत होती है।
#
# हम यह सूची बनाते हैं और इसे चिह्नित करने के बजाय /etc/apt/apt.conf.d पर सहेजते हैं
# डेटाबेस में संकुल क्योंकि यह एक पोस्टस्टीन स्क्रिप्ट, और उपयुक्त से चलता है
# जब यह निकल जाएगा तो db को ओवरराइट कर देगा।

हालाँकि, यह कभी-कभी उन्हें ऑटो-रिमूवल के लिए चिन्हित नहीं करेगा क्योंकि ऐसा होने से रोकने के लिए कुछ कोडिंग संस्करणों में बदल गए हैं।

यदि आप autoremoveस्क्रिप्ट के आधार पर आवश्यक कर्नेल को छोड़कर पिछले कर्नेल को चिह्नित करना चाहते हैं, तो टर्मिनल विंडो से निम्न कमांड चलाएँ:

sudo apt-mark auto ^linux-image-

फिर, जब आप apt-get autoremoveकेवल वही कमांड चलाते हैं जो पुराने हैं और अब जरूरी नहीं है तो हटाया जा सकता है। मैंने नीचे उदाहरण प्रस्तुत किए हैं:

यह पहला सिस्टम चालू कर्नेल माइनस माइनस पर सभी कर्नेल दिखाता है।

root @ terrance-Linux: / होम / शेयर # dpkg -l 'linux- *' | sed '/ ^ ii / d!;' 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] टेरेंस के लिए पासवर्ड: 
पैकेज सूची पढ़ना ... पूरा हो गया
निर्भरता का पेड़       
राज्य की जानकारी पढ़ना ... किया
0 अपग्रेड किया गया, 0 नव स्थापित, 0 हटाने के लिए और 0 अपग्रेड नहीं किया गया।
terrance @ terrance-Linux: ~ $ sudo apt-mark auto ^ linux-image-
linux-image-extra-3.16.0-33- जेनेरिक को चिन्हित नहीं किया जा सकता क्योंकि यह स्थापित नहीं है।
linux-image-extra-3.13.0-27-जेनेरिक को चिन्हित नहीं किया जा सकता क्योंकि यह स्थापित नहीं है।
linux-image-3.13.0-44- न्यूनता को चिह्नित नहीं किया जा सकता क्योंकि यह स्थापित नहीं है।
linux-image-3.13.0-27-जेनेरिक को चिन्हित नहीं किया जा सकता क्योंकि यह स्थापित नहीं है।
linux-image-3.16.0-31- न्यूनता को स्थापित नहीं किया जा सकता है क्योंकि यह स्थापित नहीं है।
linux-image-3.16.0-36- जेनेरिक सेट स्वचालित रूप से स्थापित करने के लिए।
linux-image-lowlatency-lts-utopic चिह्नित नहीं किया जा सकता क्योंकि यह स्थापित नहीं है।
linux-image-extra-3.13.0-36- जेनेरिक को चिन्हित नहीं किया जा सकता क्योंकि यह स्थापित नहीं है।
linux-image-3.13.0-36- जेनेरिक को चिन्हित नहीं किया जा सकता क्योंकि यह स्थापित नहीं है।
लिनक्स-इमेज-4.0.0-040000-जेनेरिक सेट स्वचालित रूप से स्थापित करने के लिए।
linux-image-extra-3.13.0-45- जेनेरिक को चिन्हित नहीं किया जा सकता क्योंकि यह स्थापित नहीं है।
linux-image-3.16.0-25-जेनेरिक को चिन्हित नहीं किया जा सकता क्योंकि यह स्थापित नहीं है।

नोट: उपरोक्त एक सूची में बहुत लंबा था, इसलिए मैंने थोड़ा सा काट दिया।

terrance @ terrance-Linux: ~ $ sudo apt-get autoremove
पैकेज सूची पढ़ना ... पूरा हो गया
निर्भरता का पेड़       
राज्य की जानकारी पढ़ना ... किया
निम्नलिखित पैकेज याद किए जाएंगे:
  linux-image-3.16.0-34- जेनेरिक linux-image-3.16.0-36- जेनेरिक
  linux-image-4.0.0-040000- जेनेरिक linux-image-extra-3.16.0-34- जेनेरिक
  लिनक्स छवि अतिरिक्त 3.16.0-36-सामान्य
0 अपग्रेड, 0 नव स्थापित, 5 हटाने के लिए और 0 अपग्रेड नहीं किया गया।
इस ऑपरेशन के बाद, 613 एमबी डिस्क स्थान मुक्त हो जाएगा।
क्या आप जारी रखना चाहते हैं? [Y n]

इसलिए, उन कमांड को चलाने के बाद, आप देख सकते हैं कि मैं अब सभी पुराने लेकिन वर्तमान कर्नेल (4.0.1-040001-जेनेरिक) और अगले नवीनतम (3.16.0-37-जेनेरिक) को ऑटो-हटा सकता हूं।

उम्मीद है कि यह मदद करता है।


उबंटू डिफ़ॉल्ट रूप से ऑटो-रिमूव नहीं करता है। हमारे पास विकल्प है लेकिन यह (अभी भी) यह तय करना असंभव माना जाता है कि "अवांछित" कर्नेल क्या है (अन्य ऑपरेटिंग सिस्टम पर "अवांछित" "अप्रयुक्त" के बराबर है)।
रिनजविंड

ठीक है। मैं उस बिट पर आपका पोस्ट गलत; ;-)
Rinzwind

1
@ ट्रांसरैंस मैं 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 से छुटकारा मिल गया ...
आयनफ्लेक्स

1
@ionreflex खुशी है कि आपने पाया। प्रत्येक उत्तर सही नहीं है, और यह सभी के लिए काम नहीं कर सकता है। लेकिन मुझे यह अच्छा लगता है कि अपने जैसे लोग थोड़ी समस्या निवारण कर सकते हैं और उन्हें दूर करने का एक तरीका निकाल सकते हैं। मैं सोच रहा हूं कि dist-upgradeआप भाग गए, /etc/kernel/postinst.d/apt-auto-removalजो तब संशोधित करके /etc/apt/apt.conf.d/01autoremove-kernelsयह बता रहा था कि इसे किन लोगों को रखना है।
टेरेंस

1
@Terrance बहुत यकीन है कि मैंने dist-upgradeपहले किया था , लेकिन शायद तथ्य यह है कि गुठली का उन्नयन आज सुबह हो गया है ... चाल, वैसे भी, चीयर्स, और आपके उत्तर के लिए धन्यवाद, मैंने इसके माध्यम से बहुत कुछ सीखा है!
आयनराफ्लेक्स
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.