जब पुराना / बूट भरा हो तो मैं पुराने कर्नेल को कैसे हटा सकता / सकती हूं?


31

मुझे पता है कि यह सवाल पहले भी कई बार पूछा गया है, हालांकि मेरे साथ यह मेरे हिसाब से थोड़ा अलग है।

# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda3       224G  5.2G  208G   3% /
udev            1.9G  4.0K  1.9G   1% /dev
tmpfs           777M  260K  777M   1% /run
none            5.0M     0  5.0M   0% /run/lock
none            1.9G     0  1.9G   0% /run/shm
/dev/sda2        90M   88M     0 100% /boot
/dev/sda6       1.9G  514M  1.3G  29% /tmp

मेरा बूट पार्टीशन भर गया है।

वर्तमान कर्नेल:

# uname -r
3.2.0-35-generic

सभी कर्नेल:

# dpkg --list | grep linux-image
ii  linux-image-3.2.0-32-generic    3.2.0-32.51                         Linux kernel image for version 3.2.0 on 64 bit x86 SMP
ii  linux-image-3.2.0-34-generic    3.2.0-34.53                         Linux kernel image for version 3.2.0 on 64 bit x86 SMP
ii  linux-image-3.2.0-35-generic    3.2.0-35.55                         Linux kernel image for version 3.2.0 on 64 bit x86 SMP
iF  linux-image-3.2.0-37-generic    3.2.0-37.58                         Linux kernel image for version 3.2.0 on 64 bit x86 SMP
iF  linux-image-3.2.0-38-generic    3.2.0-38.60                         Linux kernel image for version 3.2.0 on 64 bit x86 SMP
iU  linux-image-generic             3.2.0.37.45                         Generic Linux kernel image

इसलिए मैंने 3.2.0.32-जेनरिक कर्नेल को हटाने के बारे में सोचा:

# sudo apt-get purge linux-image-3.2.0-32-generic
Reading package lists... Done
Building dependency tree
Reading state information... Done
You might want to run 'apt-get -f install' to correct these:
The following packages have unmet dependencies:
 linux-generic : Depends: linux-headers-generic (= 3.2.0.37.45) but 3.2.0.38.46 is to be installed
E: Unmet dependencies. Try 'apt-get -f install' with no packages (or specify a solution).

कोई सफलता नहीं।

जब मैं कोशिश apt-get -f installकरता हूं तो यह भी विफल हो जाता है:

# apt-get -f install
Reading package lists... Done
Building dependency tree
Reading state information... Done
Correcting dependencies... Done
The following packages were automatically installed and are no longer required:
  linux-headers-3.2.0-34 linux-headers-3.2.0-35 linux-headers-3.2.0-34-generic linux-headers-3.2.0-35-generic
Use 'apt-get autoremove' to remove them.
The following extra packages will be installed:
  linux-generic linux-image-generic
The following packages will be upgraded:
  linux-generic linux-image-generic
2 upgraded, 0 newly installed, 0 to remove and 9 not upgraded.
5 not fully installed or removed.
Need to get 0 B/4,334 B of archives.
After this operation, 0 B of additional disk space will be used.
Do you want to continue [Y/n]? y
Setting up initramfs-tools (0.99ubuntu13.1) ...
update-initramfs: deferring update (trigger activated)
Setting up linux-image-3.2.0-37-generic (3.2.0-37.58) ...
Running depmod.
update-initramfs: deferring update (hook will be called later)
The link /initrd.img is a dangling linkto /boot/initrd.img-3.2.0-38-generic
Examining /etc/kernel/postinst.d.
run-parts: executing /etc/kernel/postinst.d/initramfs-tools 3.2.0-37-generic /boot/vmlinuz-3.2.0-37-generic
update-initramfs: Generating /boot/initrd.img-3.2.0-37-generic

gzip: stdout: No space left on device
E: mkinitramfs failure cpio 141 gzip 1
update-initramfs: failed for /boot/initrd.img-3.2.0-37-generic with 1.
run-parts: /etc/kernel/postinst.d/initramfs-tools exited with return code 1
Failed to process /etc/kernel/postinst.d at /var/lib/dpkg/info/linux-image-3.2.0-37-generic.postinst line 1010.
dpkg: error processing linux-image-3.2.0-37-generic (--configure):
 subprocess installed post-installation script returned error exit status 2
Setting up linux-image-3.2.0-38-generic (3.2.0-38.60) ...
Running depmod.
update-initramfs: deferring update (hook will be called later)
The link /initrd.img is a dangling linkto /boot/initrd.img-3.2.0-37-generic
Examining /etc/kernel/postinst.d.
run-parts: executing /etc/kernel/postinst.d/initramfs-tools 3.2.0-38-generic /boot/vmlinuz-3.2.0-38-generic
update-initramfs: Generating /boot/initrd.img-3.2.0-38-generic

gzip: stdout: No space left on device
E: mkinitramfs failure cpio 141 gzip 1
update-initramfs: failed for /boot/initrd.img-3.2.0-38-generic with 1.
run-parts: /etc/kernel/postinst.d/initramfs-tools exited with return code 1
Failed to process /etc/kernel/postinst.d at /var/lib/dpkg/info/linux-image-3.2.0-38-generic.postinst line 1010.
dpkg: error processing linux-image-3.2.0-38-generic (--configure):
 subprocess installed post-installation script returned error exit status 2
dpkg: dependency problems prevent configuration of linux-image-generic:
 linux-image-generic depends on linux-image-3.2.0-37-generic; however:
  Package linux-image-3.2.0-37-generic is not configured yet.
dpkg: error processing linux-image-generic (--configure):
 dependency problems - leaving unconfigured
dpkg: dependency problems prevent configuration of linux-generic:
 linux-generic depends on linux-image-generic (= 3.2.0.37.45); however:
  Package linux-image-generic is not configured yet.
 linux-generic depends on linux-headers-generic (= 3.2.0.37.45); however:
  Version of linux-headers-generic on system is 3.2.0.38.46.
dpkg: error processing linux-generic (--configure):
 dependency problems - leaving unconfigured
Processing triggers for initramfs-tools ...
No apport report written because the error message indicates its a followup error from a previous failure.
No apport report written because MaxReports is reached already
  update-initramfs: Generating /boot/initrd.img-3.2.0-35-generic

gzip: stdout: No space left on device
E: mkinitramfs failure cpio 141 gzip 1
update-initramfs: failed for /boot/initrd.img-3.2.0-35-generic with 1.
dpkg: error processing initramfs-tools (--configure):
 subprocess installed post-installation script returned error exit status 1
No apport report written because MaxReports is reached already
Errors were encountered while processing:
 linux-image-3.2.0-37-generic
 linux-image-3.2.0-38-generic
 linux-image-generic
 linux-generic
 initramfs-tools
E: Sub-process /usr/bin/dpkg returned an error code (1)

आपकी किसी भी मदद के हम दिल से आभारी होंगे।

अद्यतन: मैंने किया था:

sudo rm /boot/*-3.2.0-32-generic /boot/*-3.2.0-34-generic

उसके बाद निम्न समस्या apt-get -f install:

root@localhost:/# apt-get -f install
Reading package lists... Done
Building dependency tree
Reading state information... Done
Correcting dependencies... Done
The following extra packages will be installed:
  linux-generic
The following packages will be upgraded:
  linux-generic
1 upgraded, 0 newly installed, 0 to remove and 9 not upgraded.
1 not fully installed or removed.
Need to get 0 B/1,722 B of archives.
After this operation, 0 B of additional disk space will be used.
Do you want to continue [Y/n]? y
dpkg: dependency problems prevent configuration of linux-generic:
 linux-generic depends on linux-image-generic (= 3.2.0.37.45); however:
  Version of linux-image-generic on system is 3.2.0.38.46.
 linux-generic depends on linux-headers-generic (= 3.2.0.37.45); however:
  Version of linux-headers-generic on system is 3.2.0.38.46.
dpkg: error processing linux-generic (--configure):
 dependency problems - leaving unconfigured
No apport report written because the error message indicates its a followup error     from a previous failure.
                      Errors were encountered while processing:
 linux-generic
E: Sub-process /usr/bin/dpkg returned an error code (1)


जब जगह की कमी के कारण ऑटोरेमोव काम नहीं करता है तो मेरा जवाब देखें।
nslntmnx

जवाबों:


22

जब आपकी कर्नेल पुरानी हो जाती है तो आप apt-get का उपयोग नहीं कर सकते हैं।

cd /boot
sudo rm *-2.6.35-6.9-generic
sudo rm *-3.16.0-23-generic

lsफ़ोल्डर में जो है उसे देखने के लिए उपयोग करें सबसे पुराना एक या दो हटा दें

sudo apt-get -f install

तब आप या तो उपयुक्त-शुद्ध प्राप्त करते हैं

sudo apt-get purge linux-image-3.2.0-32-generic linux-image-3.2.0-34-generic

या बस rm के साथ जारी रखें।

आप भी sudo update-grubजब आप finsihed हैं चाहिए


इंस्टॉल कमांड ने कई पुराने कर्नेल को फिर से स्थापित किया, जिसके परिणामस्वरूप एक पूर्ण बूट डिस्क है। प्यूरी कमांड ने मेरे लिए इसे हल किया।
SPRBRN

मैंने इस उत्तर का पालन किया sudo apt-get -f install, फिर यह सुनिश्चित करने के लिए पुनः आरंभ किया कि सब अच्छा है और बाकी को apt autoremoveपिछले कमांड आउटपुट में सुझाए गए तरीके से हटा दिया गया है।
सी

10

जाहिर है, यह काम करता है:

sudo apt-get autoremove 

apt-getमैन-पेज के अनुसार :

ऑटोरेमोव का उपयोग उन पैकेजों को हटाने के लिए किया जाता है जो स्वचालित रूप से अन्य पैकेजों के लिए निर्भरता को पूरा करने के लिए स्थापित किए गए थे और जिनकी अब आवश्यकता नहीं है।

3.16.0-39 वह है जिसे मैंने स्थापित करने की कोशिश की, लेकिन असफल रहा क्योंकि / बूट भरा हुआ था। 3.16.0-38 मेरा वर्तमान संस्करण है। आप देख सकते हैं कि -38 को छोड़ दिया गया था।

server:~$ uname -r
3.16.0-38-generic
server:~$ sudo apt-get autoremove 
[sudo] password for mikeb: 
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following packages will be REMOVED:
  linux-headers-3.16.0-30 linux-headers-3.16.0-30-generic
  linux-headers-3.16.0-31 linux-headers-3.16.0-31-generic
  linux-headers-3.16.0-33 linux-headers-3.16.0-33-generic
  linux-headers-3.16.0-34 linux-headers-3.16.0-34-generic
  linux-headers-3.16.0-36 linux-headers-3.16.0-36-generic
  linux-headers-3.16.0-39 linux-headers-3.16.0-39-generic
  linux-image-3.16.0-30-generic linux-image-3.16.0-31-generic
  linux-image-3.16.0-33-generic linux-image-3.16.0-34-generic
  linux-image-3.16.0-36-generic linux-image-3.16.0-39-generic
  linux-image-extra-3.16.0-30-generic linux-image-extra-3.16.0-31-generic
  linux-image-extra-3.16.0-33-generic linux-image-extra-3.16.0-34-generic
  linux-image-extra-3.16.0-36-generic linux-image-extra-3.16.0-39-generic
0 upgraded, 0 newly installed, 24 to remove and 0 not upgraded.

मुझे यह उत्तर पसंद है लेकिन यह जानने के लिए कुछ मैनुअल को याद करता है कि इसके autoremoveलिए क्या है ।
s3m3n

1
ऑटोरेमोव केवल तभी काम करता है जब कोई पूर्व-कतारबद्ध क्रिया ठीक से पूरी हो। यदि आप पहले से ही 'डिवाइस पर कोई स्थान नहीं छोड़ रहे हैं' त्रुटि के कारण ऑटोरेमोव काम नहीं करेगा - पहले से कतारबद्ध क्रियाएं विफल हो जाएंगी, और ऑटोरेमोव नहीं चलेगा। दूसरे शब्दों में, ऑटोरेमोव काम करता है ... जब तक कि यह नहीं होता है।
user535733 17

@ user535733 आप सही हैं। जब जगह की कमी के कारण ऑटोरेमोव काम नहीं करता है तो मेरा जवाब देखें।
nslntmnx

7

एक टर्मिनल में, निम्नलिखित कमांड निष्पादित करें:

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

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


2
शायद आप यह समझाना चाहेंगे कि यह कमांड वास्तव में क्या करता है। यह बल्कि जटिल दिखता है: सामान्य तौर पर, लोगों को इस तरह से चलने वाले आदेशों से दूर रहने की सलाह दी जानी चाहिए, जैसे वे नहीं समझते हैं - विशेष रूप से उनके सिस्टम के लिए कुछ महत्वपूर्ण के साथ।
mtdevans

@mtdevans: मैंने जोड़ा है कि उपरोक्त कमांड सभी वर्तमान में स्थापित लिनक्स कर्नेल को सूचीबद्ध करता है, फिर उन सभी का चयन करता है जो वर्तमान में उपयोग नहीं किए जाते हैं, और फिर उन सभी कर्नेल को हटा देता है जो वर्तमान में उपयोग नहीं किए जाते हैं।
क्रिस्टियन

4
कमांड उपयोगी है, बस "x | xargs" से पहले भाग को जांचें कि आप क्या डिलीट करने जा रहे हैं। इसके अलावा | grep -v को नवीनतम कर्नेल को संरक्षित करने की आवश्यकता हो सकती है, जो अभी तक उपयोग में नहीं हो सकता है, लेकिन वांछित है।
रोमन सूसी

4
यह खतरनाक है क्योंकि यह भी linux-libc-dev से मेल खाता है: amd64
फ्रेडरिक नॉर्ड

2
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 apt-get -y purge" के बिना उपरोक्त कमांड आपके linux-libc-dev से मेल खाता है: amd64 आप इसे शामिल नहीं करने के लिए regex में अर्धविराम जोड़ सकते हैं:

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" जोड़ें


1

Ubuntu 12.04 के लिए यह प्रयास करें sudo apt-get purge linux-image-[kernel version]

यह किसी भी कर्नेल संस्करण को हटा देगा। यदि आपके बूट फ़ोल्डर में कई कर्नेल हैं, तो ग्रब को अपडेट करना और अपने सिस्टम को रिबूट करना मत भूलना

पूर्व। सूद apt-get purge linux-image-3.11.6 *


2
समस्या यह है कि यह तब काम नहीं करता है जब किसी के पास एक बिंदु होता है जहां निर्भरता की समस्याएं होती हैं, जैसे कि आगे।
पाओलो एबरमन

यह मेरे लिए काम करता है!
डैनियल

0

कई जवाब कहते हैं कि "उपयुक्त ऑटोरेमोव" का उपयोग करें, लेकिन यह तब काम नहीं कर सकता है जब / बूट भरा हुआ है क्योंकि उपयुक्त हटाने से पहले कर्नेल को जोड़ने की कोशिश करता है।

अगला उपयुक्त ऑटोरेमोव /etc/apt/apt.conf.d/01autoremove-kernels में वर्णित किसी भी गुठली को नहीं हटाएगा, इसलिए हमें इसे ठीक करने की आवश्यकता है।

यहां वह प्रक्रिया है जो मेरे लिए काम करती है।

अवांछित कर्नेल कॉन्फिग फाइलों को हटा दें।

sudo dpkg --purge $ (COLUMNS = 200 dpkg -l | grep "linux-image-extra" - grep "^ rc" | tr -s '' | cut -d '' -f 2)

अपडेट /etc/apt/apt.conf.d/01autoremove-kernels चलाकर ...

सुडो /etc/kernel/postinst.d/apt-auto-removal

उम्मीद है कि उपयुक्त ऑटोरेमोव काम करेगा।

sudo apt autoremove --purge

यदि आप मैन्युअल रूप से बहुत पुराने और अप्रयुक्त कर्नेल को / बूट से हटाने में सक्षम नहीं होना चाहिए।

पहले पता करें कि आप किस कर्नेल को चला रहे हैं।

बेमिसाल -r

आप वर्तमान कर्नेल, या पिछले कर्नेल को न निकालें।

सुडो rm /boot/initrd.img-V.XX.Y-ZZ-generic

अब आपके पास फिर से उपयुक्त ऑटोरेमोव की कोशिश करने के लिए पर्याप्त जगह होनी चाहिए। यदि नहीं, तो एक और बहुत पुराना कर्नेल निकालें। बेशक, वर्तमान और अगले सबसे पुराने रखें।


-2

मुझे उम्मीद है कि यह मदद कर सकता है:

मैं आमतौर पर ubuntu-tweak चौकीदार, अच्छा जीयूआई और आसान का उपयोग करके पुरानी गुठली को हटा देता हूं :)

'सिस्टम' पर क्लिक करें और पुरानी गुठली की सूची होगी, बस इसे क्लिक करें और साफ करें


1
यह एक ubuntu सर्वर है और मैं पोटीन के माध्यम से जुड़ा हुआ हूं। (लेकिन मुझे सर्वर पर वेबमिन की उपलब्धता भी है)
मार्सेल

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