मैं /बूट में अधिक स्थान कैसे खाली करूं?

मेरे /boot विभाजन लगभग भरा हुआ है और हर बार जब मैं अपने सिस्टम को रिबूट करता हूं तो मुझे एक चेतावनी मिलती है । मैंने पहले ही पुराने कर्नेल पैकेज (लिनक्स-हेडर । ..), वास्तव में मैंने एक नया कर्नेल संस्करण स्थापित करने के लिए किया था जो स्वचालित अपडेट के साथ आया था ।

उस नए संस्करण को स्थापित करने के बाद, विभाजन लगभग फिर से भरा हुआ है । तो मैं और क्या हटा सकता हूं? क्या पुरानी कर्नेल छवियों से जुड़ी कुछ अन्य फाइलें हैं?

यहां उन फाइलों की एक सूची दी गई है जो मेरे पास हैं /boot विभाजन:

:~$ ls /boot/abi-2.6.31-21-generic         lost+foundabi-2.6.32-25-generic         memtest86+.binabi-2.6.38-10-generic         memtest86+_multiboot.binabi-2.6.38-11-generic         System.map-2.6.31-21-genericabi-2.6.38-12-generic         System.map-2.6.32-25-genericabi-2.6.38-8-generic          System.map-2.6.38-10-genericabi-3.0.0-12-generic          System.map-2.6.38-11-genericabi-3.0.0-13-generic          System.map-2.6.38-12-genericabi-3.0.0-14-generic          System.map-2.6.38-8-genericboot                          System.map-3.0.0-12-genericconfig-2.6.31-21-generic      System.map-3.0.0-13-genericconfig-2.6.32-25-generic      System.map-3.0.0-14-genericconfig-2.6.38-10-generic      vmcoreinfo-2.6.31-21-genericconfig-2.6.38-11-generic      vmcoreinfo-2.6.32-25-genericconfig-2.6.38-12-generic      vmcoreinfo-2.6.38-10-genericconfig-2.6.38-8-generic       vmcoreinfo-2.6.38-11-genericconfig-3.0.0-12-generic       vmcoreinfo-2.6.38-12-genericconfig-3.0.0-13-generic       vmcoreinfo-2.6.38-8-genericconfig-3.0.0-14-generic       vmcoreinfo-3.0.0-12-genericextlinux                      vmcoreinfo-3.0.0-13-genericgrub                          vmcoreinfo-3.0.0-14-genericinitrd.img-2.6.31-21-generic  vmlinuz-2.6.31-21-genericinitrd.img-2.6.32-25-generic  vmlinuz-2.6.32-25-genericinitrd.img-2.6.38-10-generic  vmlinuz-2.6.38-10-genericinitrd.img-2.6.38-11-generic  vmlinuz-2.6.38-11-genericinitrd.img-2.6.38-12-generic  vmlinuz-2.6.38-12-genericinitrd.img-2.6.38-8-generic   vmlinuz-2.6.38-8-genericinitrd.img-3.0.0-12-generic   vmlinuz-3.0.0-12-genericinitrd.img-3.0.0-13-generic   vmlinuz-3.0.0-13-genericinitrd.img-3.0.0-14-generic   vmlinuz-3.0.0-14-generic

वर्तमान में, मैं उपयोग कर रहा हूँ 3.0.0-14-generic कर्नेल।

आप एक बहुत अप्रयुक्त गुठली है । अंतिम गुठली को छोड़कर सभी को हटा दें:

sudo apt-get purge linux-image-{3.0.0-12,2.6.3{1-21,2-25,8-{1[012],8}}}

यह शॉर्टहैंड के लिए है:

sudo apt-get purge linux-image-3.0.0-12 linux-image-2.6.31-21 linux-image-2.6.32-25 linux-image-2.6.38-10 linux-image-2.6.38-11 linux-image-2.6.38-12 linux-image-2.6.38-8

हटाने linux-image-x.x.x-x पैकेज भी निकाल देंगे linux-image-x.x.x-x-generic.

हेडर में स्थापित हैं /usr/src और आउट-ट्री कर्नेल मॉड्यूल (जैसे मालिकाना एनवीडिया ड्राइवर और वर्चुअलबॉक्स) का निर्माण करते समय उपयोग किया जाता है । अधिकांश उपयोगकर्ताओं को इन हेडर पैकेजों को हटा देना चाहिए यदि मिलान कर्नेल पैकेज (linux-image-*) स्थापित नहीं है ।

सभी स्थापित कर्नेल को सूचीबद्ध करने के लिए, चलाएं:

dpkg -l linux-image-\* | grep ^ii

सभी कर्नेल और हेडर दिखाने के लिए एक कमांड जिसे हटाया जा सकता है, को छोड़कर वर्तमान रनिंग कर्नेल:

kernelver=$(uname -r | sed -r 's/-[a-z]+//')dpkg -l linux-{image,headers}-"[0-9]*" | awk '/ii/{print $2}' | grep -ve $kernelver

यह शुरू होने वाले सभी पैकेजों का चयन करता है linux-headers-<some number> या linux-image-<some number>, स्थापित पैकेजों के लिए पैकेज नामों को प्रिंट करता है और फिर शामिल नहीं करता है वर्तमान लोड / रनिंग कर्नेल (जरूरी नहीं कि नवीनतम कर्नेल!). यह पुराने, ज्ञात-से-काम कर्नेल को हटाने से पहले एक नए कर्नेल के परीक्षण की सिफारिश में फिट बैठता है ।

तो, कर्नेल को अपग्रेड करने और इसे परीक्षण करने के लिए रिबूट करने के बाद, आप अन्य सभी कर्नेल को हटा सकते हैं:

sudo apt-get purge $(dpkg -l linux-{image,headers}-"[0-9]*" | awk '/ii/{print $2}' | grep -ve "$(uname -r | sed -r 's/-[a-z]+//')")

आपका बूट विभाजन भरा हुआ है । चूंकि यह एक कर्नेल अपडेट है, इसलिए इन फ़ाइलों को बूट विभाजन में कॉपी किया जाएगा ताकि आपको बाहर साफ करने की आवश्यकता हो । यहाँ एक है ब्लॉग पोस्ट यह आपको दिखाएगा कि एक कमांड के साथ पुरानी कर्नेल छवियों को कैसे साफ़ किया जाए । मैं विधि का एक मूल सारांश दूंगा । अपने कर्नेल के वर्तमान संस्करण का प्रिंट आउट लेने के लिए इस कमांड का उपयोग करें:

uname -r

फिर इस कमांड का उपयोग उन सभी कर्नेल को प्रिंट करने के लिए करें जिन्हें आपने स्थापित किया है जो आपके नवीनतम कर्नेल नहीं हैं:

dpkg -l linux-{image,headers}-"[0-9]*" | awk '/^ii/{ print $2}' | grep -v -e `uname -r | cut -f1,2 -d"-"` | grep -e '[0-9]'

सुनिश्चित करें कि आपका वर्तमान कर्नेल उस सूची में नहीं है । ध्यान दें कि यह अंतिम आदेश का बहुमत कैसे है (नीचे) । इन पुरानी गुठली को अनइंस्टॉल करने और हटाने के लिए आप इन तर्कों को पाइप करना चाहेंगे:

sudo apt-get -y purge

अब हम इन अंतिम दो आदेशों को इस अपवित्र गंदगी में मिलाकर अपनी इच्छानुसार सब कुछ कर सकते हैं:

dpkg -l linux-{image,headers}-"[0-9]*" | awk '/^ii/{ print $2}' | grep -v -e `uname -r | cut -f1,2 -d"-"` | grep -e '[0-9]' | xargs sudo apt-get -y purge

और वह एक आदेश आपके लिए हर चीज का ख्याल रखेगा । मैं पुष्टि करूंगा कि यह पूरी तरह से काम करता है लेकिन कभी भी इंटरनेट पर किसी पर भरोसा नहीं करता है । :) अधिक जानकारी के लिए, ब्लॉग पोस्ट इस बात की बहुत अच्छी व्याख्या देता है कि कमांड का प्रत्येक भाग इसके माध्यम से क्या पढ़ता है ताकि आप संतुष्ट हों कि यह वही करता है जो आप करना चाहते हैं ।

sudo apt-get autoremove

यह आदेश स्वचालित रूप से काम कर रहा है ।

सिनैप्टिक पैकेज मैनेजर का उपयोग पुरानी कर्नेल छवियों को आसानी से चुनने और हटाने के लिए किया जा सकता है ।

यदि आपके पास पहले से सिनैप्टिक स्थापित नहीं है:

sudo apt-get install synaptic

एप्लिकेशन प्रारंभ करें और दिखाए गए विकल्पों का चयन करें ।

आपको संस्करण "2.6" के साथ सभी "लिनक्स -" पैकेजों को हाइलाइट करने में सक्षम होना चाहिए । एक्स " जहां एक्स आपके /बूट फ़ोल्डर में फ़ाइलों के अनुसार 31 से 38 के बीच है ।

उन लिनक्स पैकेजों में से प्रत्येक पर राइट-क्लिक करें और "पूर्ण निष्कासन के लिए चिह्नित करें"विकल्प चुनें । अंत में अप्लाई बटन पर क्लिक करें । यह सभी फाइलों और किसी भी संबद्ध फाइलों को हटा देगा । आपका /boot फ़ोल्डर अब थोड़ा टिडियर होना चाहिए ।

आपकी समस्या के विस्तृत पोस्ट के लिए धन्यवाद, इससे मुझे सही दिशा में जाना पड़ा । यद्यपि पिछली कर्नेल फ़ाइलों को रखना उपयोगी है, आप उन सभी को एक बार में हटा सकते हैं, इस पोस्ट को देखें:
सभी अप्रयुक्त लिनक्स कर्नेल हेडर, छवियों और मॉड्यूल को कैसे हटाएं

कमांड लाइन के माध्यम से किया । यदि आप टर्मिनल सत्र खोलने के लिए विनएससीपी जैसे दूरस्थ उपयोग के माध्यम से ऐसा कर रहे हैं और बस इसे पेस्ट कर रहे हैं, तो बहुत अच्छा काम करता है ।

यहाँ यह लेख लिंक से कॉपी किया गया है, मेरा सुझाव है कि आप पूरा लेख पढ़ें:

dpkg -l 'linux-*' | sed '/^ii/!d;/'"$(uname -r | sed "s/\(.*\)-\([^0-9]\+\)/\1/")"'/d;s/^[^ ]* [^ ]* \([^ ]*\).*/\1/;/[0-9]/!d' | xargs sudo apt-get -y purge

यह एक पुराने प्रश्न का एक नया उत्तर है, लेकिन इस चीज़ को साफ करने का एक आसान तरीका (और अधिक) स्थापित करना है उबंटू ट्वीक. को इसे स्थापित करें:

sudo add-apt-repository ppa:tualatrix/ppasudo apt-get updatesudo apt-get install ubuntu-tweak

फिर आप "जेनिटर" टैब पर जाकर उबंटू ट्वीक चला सकते हैं, और यहां से यह तीन क्लिक की बात है:

हालांकि, अंतिम कर्नेल (आप कभी नहीं जानते) या सुरक्षा के लिए एक प्रसिद्ध कामकाजी कर्नेल को छोड़ना बेहतर है; लेकिन यह आसानी से अनुकूलन योग्य है ।

आप बहुत सी चीजों को साफ करने के लिए एक ही टूल का उपयोग कर सकते हैं --- बस याद रखें कि यदि आप थंबनेल कैश या टीबी कैश को साफ करते हैं तो सिस्टम को जरूरत पड़ने पर उन्हें फिर से बनाना होगा ।

मैं उपयोग करके समस्या को ठीक करने में सक्षम था dpkg पैकेज को सीधे हटाने के लिए । हालांकि पैकेज अभी भी सूचीबद्ध हैं dpkg -l, फाइलें हटा दी जाती हैं /boot, स्थान खाली करना ।

phrogz@planar:/boot$ sudo dpkg --remove linux-image-2.6.32-30-server(Reading database ... 145199 files and directories currently installed.)Removing linux-image-2.6.32-30-server ...Running postrm hook script /usr/sbin/update-grub.Generating grub.cfg ...Found linux image: /boot/vmlinuz-2.6.32-35-serverFound linux image: /boot/vmlinuz-2.6.32-34-serverFound initrd image: /boot/initrd.img-2.6.32-34-serverFound linux image: /boot/vmlinuz-2.6.32-33-serverFound initrd image: /boot/initrd.img-2.6.32-33-serverFound linux image: /boot/vmlinuz-2.6.32-32-serverFound initrd image: /boot/initrd.img-2.6.32-32-serverFound linux image: /boot/vmlinuz-2.6.32-31-serverFound initrd image: /boot/initrd.img-2.6.32-31-serverFound memtest86+ image: /memtest86+.bindone# Repeat for kernels -31 and -32 and -33, up to (but not including)# the version listed by `uname -a`

इसके बाद, apt-get -f install मेरी निर्भरता की समस्याओं को ठीक किया, और दुनिया के साथ सब ठीक था ।

मैं मेरा यह जवाब स्वीकार नहीं होगा, तथापि, के रूप में मैं अभी भी पता है कि अगर मैं मेरी वृद्धि की जानी चाहिए की जरूरत है /boot आकार या कुछ और करना ।

आप एक अलग /बूट विभाजन का उपयोग करना बंद कर सकते हैं, फिर आपके पास वहां इतनी सीमित जगह नहीं होगी । ऐसा करने के लिए, विभाजन को अनमाउंट करें, फिर इसे कहीं और माउंट करें और सभी फाइलों को अपने रूट विभाजन में /बूट निर्देशिका में कॉपी करें, फिर /आदि/एफएसटीएबी से प्रविष्टि को हटा दें और ग्रब को पुनर्स्थापित करें । उदाहरण के लिए (आपको सही विभाजन का उपयोग करना होगा ):

sudo -sumount /bootmount /dev/sda2 /mntcp -a /mnt/* /boot/umount /mntgedit /etc/fstabgrub-install /dev/sda

फिर आप पुराने /बूट विभाजन को हटाने के लिए जीपार्ट का उपयोग कर सकते हैं, और संभवतः उस स्थान का उपयोग करने के लिए रूट विभाजन का विस्तार कर सकते हैं । रूट विभाजन का विस्तार करने के लिए आपको लाइवसीडी से बूट करना होगा, और मुक्त स्थान को तुरंत दाईं ओर होना चाहिए । यदि / बूट विभाजन वर्तमान में रूट विभाजन के बाईं ओर है, तो आपको पहले रूट विभाजन को बाईं ओर ले जाना होगा, फिर इसे विस्तारित करना होगा, लेकिन इसमें बहुत, बहुत लंबा समय लग सकता है, इसलिए परेशानी के लायक नहीं हो सकता है ।

उपरोक्त उत्तरों से सर्वश्रेष्ठ लेते हुए, मेरा आजमाया हुआ और सच्चा दृष्टिकोण यह है:

  • uname -a चल रहे कर्नेल को खोजने के लिए ।
  • dpkg -l linux-{headers,image}-\* | grep ^ii वर्तमान में स्थापित सभी कर्नेल-संबंधित पैकेजों को सूचीबद्ध करने के लिए । इसमें रनिंग कर्नेल शामिल होगा ।
  • sudo apt-get purge linux-{image,headers}-3.16.0-{xx,yy,zz} पुरानी गुठली निकालने के लिए । बदलें xx,yy,zz कर्नेल बिल्ड की एक सूची के साथ आप हटाना चाहते हैं—ये पिछले कमांड द्वारा सूचीबद्ध सभी बिल्ड हैं जो वर्तमान में चल रहे कर्नेल से पुराने हैं । सुनिश्चित करें कि आप वर्तमान में चल रहे कर्नेल को नहीं हटाते हैं-आपका सिस्टम अनबूटेबल हो जाएगा. आपको कर्नेल संस्करण को बदलने की भी आवश्यकता हो सकती है 3.16.0 जो कुछ भी आपके सिस्टम पर स्थापित है ।
  • वैकल्पिक रूप से, एक अतिरिक्त करें sudo apt-get autoremove- यह पुरानी गुठली के किसी भी बचे हुए निर्भरता को हटा देगा जो अब वर्तमान एक द्वारा आवश्यक नहीं हैं, कुछ और स्थान खाली कर रहे हैं ।

आपके पास कर्नेल संस्करणों को स्थापित किए बिना हेडर फाइलें हो सकती हैं, या इसके विपरीत—बस इन सभी संस्करणों को कमांड में शामिल करें । एपीटी शिकायत करेगा कि कुछ पैकेज हटाए नहीं जा सकते क्योंकि वे स्थापित नहीं हैं, लेकिन इससे कोई नुकसान नहीं होगा ।

अगर कुछ विफल रहता है । ..

  • यदि उपयुक्त आदेश एक के कारण विफल रहता है डिवाइस पर कोई जगह नहीं बची त्रुटि, इसके बजाय संबंधित डीपीकेजी कमांड का उपयोग करें: sudo dpkg --purge linux-{image,headers}-3.16.0-{xx,yy,zz}.
  • यदि डीपीकेजी कमांड अभी भी काम नहीं करता है क्योंकि linux-image संकुल द्वारा आवश्यक हैं linux-headers उसी संस्करण के पैकेज (जिसे आप भी अनइंस्टॉल करना चाहते हैं), डीपीकेजी इसे हल करने में विफल हो सकता है । के आउटपुट की फिर से जांच करें dpkg -l और कमांड लाइन पर किसी भी पैकेज नाम प्रत्यय को निर्दिष्ट करें । उदाहरण के लिए, मेरे एक सिस्टम पर अंततः काम करने वाली कमांड थी sudo dpkg --purge linux-{image,headers}-3.16.0-{xx,yy,zz}-generic-pae.
  • यदि आपको कोई अन्य त्रुटि मिलती है, तो मदद लें—आपके विचार से आपको एक अलग समस्या हो सकती है ।

सभी गुठली की सूची बनाएं:

dpkg --list 'linux-image*'

वर्तमान कर्नेल प्रदर्शित करें:

uname -r

सभी गुठली की सूची बनाएं सिवाय वर्तमान एक:

dpkg -l linux-{image,headers}-"[0-9]*" | awk '/^ii/{ print $2}' | grep -v -e `uname -r | cut -f1,2 -d"-"` | grep -e '[0-9]'

सुनिश्चित करें कि आपका वर्तमान कर्नेल उस सूची में नहीं है ।

सभी गुठली निकालें सिवाय वर्तमान एक:

dpkg -l linux-{image,headers}-"[0-9]*" | awk '/^ii/{ print $2}' | grep -v -e `uname -r | cut -f1,2 -d"-"` | grep -e '[0-9]' | xargs sudo apt-get -y purge

अन्य सामान साफ़ करें:

sudo apt-get autoremove

यदि यह अभी भी आपको फ़ाइलों को स्थापित/अनइंस्टॉल करने के लिए बूट डिस्क स्थान त्रुटि देता है तो सीधे इनमें से एक को हटा दें पुराना छवि से / बूट निर्देशिका,

ls -lh /boot/*-3.13.0-119*;rm /boot/*-3.13.0-119*; 

नोट: कृपया किसी भी छवि को हटाने से पहले वर्तमान कर्नेल छवि की फिर से समीक्षा करें ।

यदि यह अभी भी कोई त्रुटि फेंकता है तो अवांछित गुठली को हटाने के लिए निम्नलिखित आदेशों को दोहराएं,

sudo dpkg --purge linux-image-X.X.X-XXX-generic linux-image-extra-X.X.X-XXX-generic linux-signed-image-X.X.X-XXX-genericsudo dpkg --purge linux-image-Y.Y.Y-YYY-generic linux-image-extra-Y.Y.Y-YYY-generic linux-signed-image-Y.Y.Y-YYY-genericsudo apt-get -f installdpkg -l linux-{image,headers}-"[0-9]*" | awk '/^ii/{ print $2}' | grep -v -e `uname -r | cut -f1,2 -d"-"` | grep -e '[0-9]' | xargs sudo apt-get -y purge

यह उल्लेखनीय है कि प्रत्येक उबंटू इंस्टॉलेशन में एक अलग /बूट विभाजन नहीं होगा - अक्सर यह सब सिर्फ एक बड़ा विभाजन होगा । यह उत्तर उन लोगों के लिए लागू होता है जिनके पास एक अलग /बूट विभाजन है । एलवीएम या “पूर्ण डिस्क” एन्क्रिप्शन का उपयोग करने वालों को एक अलग /बूट की आवश्यकता होती है, अन्यथा यह वैकल्पिक हो सकता है ।

अगर किसी और को मेरे जैसी ही समस्या है: बूट के बाद कोई जगह नहीं बची है “एपीटी-गेट अपग्रेड” विफल हो जाएगा जब इंस्टॉल किए गए कर्नेल के लिए इनिट्रैड फ़ाइलों को फिर से उत्पन्न करना या अपडेट-इनिट्रामएफएस स्क्रिप्ट का मानना है कि सामग्री की जांच करके स्थापित किया गया है /वार /लिब/इनिट्रामफ-टूल्स । इस स्थिति में कोई भी उपयुक्त-गेट का उपयोग करके पुरानी गुठली को नहीं हटा सकता है क्योंकि एफएससीकिंग /बूट विभाजन में डिवाइस पर कोई स्थान नहीं बचा है । कोई “डीपीकेजी-पी” का उपयोग करके ऐसा कर सकता है, इसके बाद /बूट (खाली स्थान पर) और /वार/लिब/इनिट्रामएफएस-टूल्स (इनिट्रैड छवि उत्पन्न नहीं होगी) में संबंधित प्रविष्टि को साफ कर सकता है ।

सही उत्तरों के लिए एक महत्वपूर्ण बिंदु यह है कि वे आपको कर्नेल के पुराने संस्करणों वाले पैकेज को हटाने के लिए कहते हैं । इस समस्या को संबोधित करने वाले कई वेब पेज /बूट विभाजन में फ़ाइलों को सीधे हटाने की सलाह देते हैं; जो कुछ समय के लिए काम कर सकता है, लेकिन आप अंततः एक पैकेज को अपडेट कर सकते हैं जो उन फ़ाइलों को फिर से बनाता है जो कर्नेल संस्करणों के लिए गायब हैं जिनमें पैकेज हैं, जिससे आप अंतरिक्ष से बाहर

https://help.ubuntu.com/community/RemoveOldKernels

सभी उत्तरों ने मुझे समझने में बहुत मदद की, लेकिन @जर्नो जो लिंक साझा कर रहा है, वह वास्तव में मैंने इसे हल करने के लिए किया था