बूट विभाजन को साफ करने का सबसे सुरक्षित तरीका क्या है?


273

मुझे /bootविभाजन के लिए 200 एमबी सौंपा गया है । जब भी मैं कर्नेल को अपडेट करने का प्रयास करता हूं, मुझे एक त्रुटि संदेश मिलता है जो मूल रूप से राज्यों /bootसे भरा होता है।

मैं /bootपुराने गुठली को साफ करने और हटाने / बैकअप के लिए क्या कर सकता हूं ?



अगर / बूट भरा हुआ है, तो askubuntu.com/questions/263363/…
nslntmnx

जवाबों:


334

कमांड लाइन विधि:

पहले अपना कर्नेल संस्करण जांचें, ताकि आप इन-इन कर्नेल छवि को हटा न दें, चल रहा है:

uname -r

अब इस आदेश को स्थापित गुठली की सूची के लिए चलाएं:

dpkg --list 'linux-image*' | grep ^ii

और इसे चलाने से आप जो कर्नेल चाहते हैं, उसकी आवश्यकता नहीं है:

sudo apt-get remove linux-image-VERSION

आप जिस कर्नेल को निकालना चाहते हैं उसके संस्करण के साथ संस्करण को बदलें।

जब आप पुराने कर्नेल को हटाते हैं, तो आप इसे उन पैकेजों को हटाने के लिए चला सकते हैं जिनकी आपको अब आवश्यकता नहीं होगी:

sudo apt-get autoremove

और अंत में आप इसे ग्रब कर्नेल सूची को अपडेट करने के लिए चला सकते हैं:

sudo update-grub

34
sudo dpkg --list 'linux-image*' | grep ^iiयह सिर्फ स्थापित गुठली को देखने के लिए थोड़ा आसान बनाता है। इसके अलावा, मुझे लगता है update-grubकि हानिरहित है, लेकिन सख्ती से आवश्यक नहीं है, जब आप कर्नेल की स्थापना रद्द करते हैं तो यह स्वचालित रूप से चलाया जाता है।
नेल्सन

9
उपयोग किए sudo dpkg --list 'linux-image*' | grep ^ii | awk '{print $2}' | sort | egrep "[0-9]-generic" | head -n -3 | tr '\n' ' '; echo ""जाने वाले पैकेज नामों की सूची प्राप्त करने के लिए उपयोग करें sudo apt-get removehead -n -3सिस्टम में बचे 3 सबसे हाल के गुठली रखने के लिए उपयोग किया जाता है।
सिथ्सू

2
मेरी साधारण एक लाइनर:apt-get remove `dpkg --list 'linux-image*' |grep ^ii | awk '{print $2}'\ | grep -v \`uname -r\``
gcb

27
sudo apt-get autoremoveपर्याप्त होना चाहिए (आमतौर पर आपको अंतिम 3 कर्नेल के साथ छोड़कर)
mbx

6
यह एक अच्छा जवाब है, लेकिन मुझे संदेह है कि यह अधिकांश (यदि सभी नहीं) मामलों में काम कर सकता है: मुद्दा यह है कि /bootभरा हुआ है, इसलिए apt-getकुछ त्रुटि कोड या अन्य के साथ विफल हो जाएगा। नीचे इस सवाल का जवाब एक सा "hackier" (मैं कबूल करना चाहिए मैं स्टील अपने आप को करना पड़ा है कि जारी करने के लिए है rm -rfमें /boot), लेकिन केवल एक ही है कि इस स्थिति में काम करने के लिए की संभावना है।
मार्को

283

नोट: यह केवल तभी है जब आप 100% पूर्ण / बूट के कारण सफाई का उपयोग नहीं कर सकते हैं

यदि एप-गेट काम नहीं कर रहा है क्योंकि आपका / बूट 100% पर है, तो आपको पहले / बूट को साफ करना होगा। इस संभावना ने एक आंशिक इंस्टाल में कर्नेल अपग्रेड पकड़ा है जिसका अर्थ है कि एप्ट पूरी तरह से बहुत अधिक जम गया है और आपको यह बताता रहेगा apt-get -f installकि कमांड चलने के बावजूद भी वह चलता रहेगा ।

कर्नेल छवियों की सूची प्राप्त करें और निर्धारित करें कि आप बिना क्या कर सकते हैं। यह आदेश वर्तमान में चल रहे को छोड़कर स्थापित गुठली दिखाएगा sudo dpkg --list 'linux-image*'|awk '{ if ($1=="ii") print $2}'|grep -v `uname -r`। सूची में दो नवीनतम संस्करण नोट करें। आपको यहां चलने के बारे में चिंता करने की आवश्यकता नहीं है क्योंकि यह यहां सूचीबद्ध नहीं है। आप इसे देख सकते हैं uname -r

उन सभी फाइलों को हटाने के लिए एक कमांड क्राफ्ट करें जो कर्नेल के लिए बूट में होती हैं जो आपके लिए समझदार नहीं हैं। वर्तमान और दो नवीनतम कर्नेल छवियों को बाहर करना याद रखें। उदाहरण: sudo rm -rf /boot/*-3.2.0-{23,45,49,51,52,53,54,55}-*। आप सिंटैक्स {80..84} के साथ एक सीमा का भी उपयोग कर सकते हैं।

sudo apt-get -f install एक आंशिक स्थापित करने के लिए उपयुक्त क्रोधी बनाने के लिए।

यदि आप एक ऐसी त्रुटि में भाग लेते हैं जिसमें "आंतरिक त्रुटि: जैसी रेखा नहीं होती है, तो छवि नहीं मिल सकती है (/boot/vmlinuz-3.2.0-56-generic)", फिर कमांड चलाएं sudo apt-get purge linux-image-3.2.0-56-generic(अपने उपयुक्त संस्करण के साथ)।

अंत में, sudo apt-get autoremoveपुराने कर्नेल छवि संकुल को साफ करने के लिए जो मैन्युअल बूट क्लीन द्वारा अनाथ किए गए हैं।

सुझाव, रन sudo apt-get updateऔर sudo apt-get upgradeकिसी भी अपग्रेड का ख्याल रखना जो पूर्ण / बूट विभाजन की खोज के लिए आपके इंतजार के दौरान बैकअप ले सकता है।

सुझाव 2, समीक्षा https://help.ubuntu.com/community/AutomaticSecurityUpdates और Unetended-Upgrad को सेट करने पर विचार करें : / Uncended-Dependencies को /etc/apt/apt/conf.d/50unattended-upgrades में सही करने के लिए। यह प्रत्येक सुरक्षा अद्यतनों के बाद ऑटोरेमोव चलाने के बराबर होगा, यह सुनिश्चित करने के लिए कि आप अप्रयुक्त गुठली को साफ करते हैं, लेकिन यह अन्य चीजों को भी हटा देगा, जो यह सोचते हैं कि अप्रयुक्त भविष्य में आपको इस समस्या से बचा रहा है।


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

1
मुझे अनअटेंडेड अपग्रेड के कारण कभी कोई समस्या नहीं हुई। मैं उन परिदृश्यों की कल्पना कर सकता हूं, जहां यह एक मुद्दा हो सकता है, जो कि गैर-डिबेट पैकेज्ड इंस्टाल पर खोई जाने वाली निर्भरता के आसपास हो सकता है। कहें कि आप php इंस्टॉल करते हैं, इसे अनइंस्टॉल करने का फैसला करें और स्रोत से एक नया संस्करण इंस्टॉल करें। इस संस्करण में पिछली इंस्टॉल द्वारा प्रदान की गई निर्भरताएं हैं, लेकिन उपयुक्त यह पता नहीं है कि यह अभी भी आवश्यक है। अगली बार जब आप ऑटो चलाते हैं तो उन पर निर्भरता दूर हो जाएगी। यदि स्वचालित है, तो यह थोड़ा भ्रमित हो सकता है। यदि आप रिपॉजिटरी के बाहर स्थापित नहीं करते हैं, तो मेरा मानना ​​है कि यह पूरी तरह से सुरक्षित है।
झिलमिलाहट

3
इसे कई vsphere वर्चुअल सर्वरों में देखने के बाद (जहां कर्नेल को स्वचालित रूप से अपग्रेड किया जा रहा था लेकिन बाद में हटाया नहीं गया), मैंने इसे स्वचालित करने के लिए एक पायथन स्क्रिप्ट लिखी । मैं इस पर अधिक आँखें
रखना पसंद करूंगा

2
यदि आप dpkg --purgeएक पूर्ण बूट पर उपयोग करते हैं, तो आपको निम्न मिलेगा $ sudo dpkg --purge linux-image-3.13.0-65-generic dpkg: dependency problems prevent removal of linux-image-3.13.0-65-generic: linux-image-extra-3.13.0-65-generic depends on linux-image-3.13.0-65-generic. dpkg: error processing package linux-image-3.13.0-65-generic (--purge): dependency problems - not removing Errors were encountered while processing: linux-image-3.13.0-65-generic
फ़्लिकरफ़ेरिकल

1
सफाई / बूट के बाद apt-get install -f अभी भी काम नहीं करेगा। का उपयोग कर df -iमुझे पता चला कि मैं भी पर inodes से बाहर चल रहा था /क्योंकि में पुराने कर्नेल के स्रोत कोड के लिए फ़ाइलों की बड़ी राशि की/usr/src
Kristofer

51

Https://help.ubuntu.com/community/RemoveOldKernels पर इस बारे में प्रलेखन है

संक्षेप में: उपयोग करें

sudo apt-get autoremove --purge
# and/or:
sudo purge-old-kernels

purge-old-kernelsउपकरण के माध्यम से स्थापित किया जा सकता sudo apt install byobu। इसका मानव-पृष्ठ से वर्णन इस प्रकार है:

यह प्रोग्राम सिस्टम से पुराने कर्नेल और हेडर पैकेज को हटा देगा, डिस्क स्थान को मुक्त करेगा। यह वर्तमान में चल रहे कर्नेल को कभी नहीं हटाएगा। डिफ़ॉल्ट रूप से, यह कम से कम नवीनतम 2 गुठली रखेगा, लेकिन उपयोगकर्ता --keep पैरामीटर का उपयोग करके उस मूल्य को ओवरराइड कर सकता है ।

यदि आप एक कॉपी-पेस्ट समाधान चाहते हैं, तो ReSearchIT Eng ने निम्नलिखित सुझाव दिया:

sudo apt install -y byobu
sudo purge-old-kernels -y --keep 1
sudo apt-get -y autoremove --purge

3
मेरे मामले में लंबित कर्नेल के कारण उपयुक्त काम नहीं कर रहा है और सुझाव दिया गया एक कैच -22 है:
जेम्स बोवेरी

मुझे पहले टूटे हुए पैकेज को askubuntu.com/a/304388/284313 से ठीक करना था । उसके बाद आपके समाधान ने काम किया।
जेम्स बोवेरी

3
मुझे लगता है कि यह अब तक का स्वीकृत समाधान होना चाहिए।
फ्रां मारजो

3
यह स्वीकृत उत्तर की तुलना में अधिक सुरक्षित है। मुझे लगता है कि apt-get autoremove --purgeपर्याप्त होना चाहिए, यद्यपि।
वुड्रो बारलो

7

मैंने पाया कि छोटे विभाजन को छोड़ना और /bootजड़ तक जाना आसान है । यह भविष्य में अंतरिक्ष के किसी भी मुद्दे को रोकता है।

सबसे पहले अपने डेटा को बूट पार्टीशन से रूट पर ले जाएँ (जैसे रन करें sudo -s):

cp -a /boot /boot2
umount /boot
rmdir /boot
mv /boot2 /boot

इसमें /bootप्रविष्टि निकालें (या टिप्पणी) /etc/fstab:

vim /etc/fstab

ग्रब अपडेट करें और सुनिश्चित करें कि सब कुछ सही है:

update-grub

apt अब समस्याओं के बिना अपग्रेड करने में सक्षम होना चाहिए।

यह एक अप्रयुक्त 200mb विभाजन को छोड़ देता है (जिसे आप किसी और चीज के लिए उपयोग कर सकते हैं यदि आप इसे परेशानी के लायक पाते हैं)।


5
यह एक अच्छा विचार है, लेकिन अगर आप अपने रूट विभाजन के लिए फुल-डिस्क एन्क्रिप्शन चाहते हैं तो यह काम नहीं करता है।
पाओलो एबरमन

हां ऐसे मामले हैं जहां / बूट को एक अलग विभाजन होना चाहिए। एक और उदाहरण था कि ग्रब पहले एक LVM विभाजन से लोड करने में असमर्थ था।
बस्तियन

4

पुरानी कर्नेल को हटाने (/ बूट पर स्थान खाली करने के लिए) देखें: http://askubuntu.com/questions/89710/how-do-i-free-up-more-space-in-boot

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

तो भागो

sudo apt-get update

1
यह एकमात्र ऐसा काम था जो .... महान समाधान
जॉन

सबसे बढ़िया उत्तर! यह एकमात्र समाधान है जो मेरे लिए काम करता है; ऑटोरेमोव बेवकूफ है; आधिकारिक तौर पर उन्हें हटाने से पहले यह किसी भी गुठली को बिना निर्भरता के साथ फिर से स्थापित करने की कोशिश करता है। मैं बार-बार अंतरिक्ष से बाहर जाने वाले हलकों में जा रहा था। यह उत्तर सोना है।
लोनी बेस्ट

3

sudo apt-get autoremove

यह सभी लेकिन अंतिम 2 गुठली को हटा देता है। /boot100% क्षमता पर होने पर Ubuntu 16.04 LTS पर परीक्षण किया गया था और apt-get upgradeयह अंतिम कर्नेल उन्नयन था। कर्नेल ऑटोरेमोव पुनरावृत्त है, इसलिए यदि आपको कई कर्नेल मिल गए हैं, तो उन्हें एक बार में हटा दिया जाएगा। इसलिए धैर्य रखें।


1

जब आप इसे एक उपकरण के साथ कर सकते हैं तो इसे हाथ से क्यों करें? आप जानते हैं कि आपको 30 सेकंड में फिर से इसकी आवश्यकता होने वाली है, क्योंकि इन दिनों एक नया कर्नेल अद्यतन करने के लिए 30 सेकंड लगते हैं = P

मैं इस टूल, बूट्नुकम का उपयोग करने की सलाह देता हूं

git clone https://github.com/erichs/bootnukem.git
cd bootnukem
sudo ./install.sh

फिर

sudo bootnukem --dry-run

--dry-runएक बार पुष्टि करने के बाद हटा दें कि यह सुरक्षित दिखता है

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.