बिना पूर्ण निर्भरता के पूर्ण / बूट को साफ नहीं किया जा सकता है


43

मुझे एक त्रुटि संदेश मिला जिसमें मेरा / बूट भरा हुआ है। डिस्क पूर्ण त्रुटियों या निर्भरता त्रुटियों के कारण पुरानी छवि फ़ाइलों को साफ करने की कोशिश करना हमेशा विफल रहता है। क्या कोई समझा सकता है कि मैं कहाँ गलत हो रहा हूँ।

$ sudo apt-get autoremove
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-image-extra-3.13.0-44-generic : Depends: linux-image-3.13.0-44-generic but it is not installed
 linux-image-extra-3.13.0-45-generic : Depends: linux-image-3.13.0-45-generic but it is not installed
 linux-image-generic : Depends: linux-image-3.13.0-45-generic but it is not installed
E: Unmet dependencies. Try using -f.

$ ls /boot
abi-3.13.0-32-generic         initrd.img-3.13.0-43-generic
abi-3.13.0-36-generic         lost+found
abi-3.13.0-37-generic         memtest86+.bin
abi-3.13.0-39-generic         memtest86+.elf
abi-3.13.0-40-generic         memtest86+_multiboot.bin
abi-3.13.0-43-generic         System.map-3.13.0-32-generic
config-3.13.0-32-generic      System.map-3.13.0-36-generic
config-3.13.0-36-generic      System.map-3.13.0-37-generic
config-3.13.0-37-generic      System.map-3.13.0-39-generic
config-3.13.0-39-generic      System.map-3.13.0-40-generic
config-3.13.0-40-generic      System.map-3.13.0-43-generic
config-3.13.0-43-generic      vmlinuz-3.13.0-32-generic
grub                          vmlinuz-3.13.0-36-generic
initrd.img-3.13.0-32-generic  vmlinuz-3.13.0-37-generic
initrd.img-3.13.0-36-generic  vmlinuz-3.13.0-39-generic
initrd.img-3.13.0-37-generic  vmlinuz-3.13.0-40-generic
initrd.img-3.13.0-39-generic  vmlinuz-3.13.0-43-generic
initrd.img-3.13.0-40-generic

मैंनें इस्तेमाल किया

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

लेना

linux-headers-3.13.0-32
linux-headers-3.13.0-32-generic
linux-headers-3.13.0-36
linux-headers-3.13.0-36-generic
linux-headers-3.13.0-37
linux-headers-3.13.0-37-generic
linux-headers-3.13.0-39
linux-headers-3.13.0-39-generic
linux-headers-3.13.0-40
linux-headers-3.13.0-40-generic
linux-headers-3.13.0-44
linux-headers-3.13.0-44-generic
linux-headers-3.13.0-45
linux-headers-3.13.0-45-generic
linux-image-3.13.0-32-generic
linux-image-3.13.0-36-generic
linux-image-3.13.0-37-generic
linux-image-3.13.0-39-generic
linux-image-3.13.0-40-generic

फिर निकालने के लिए पहली छवि

$ sudo apt-get purge linux-image-3.13.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-image-extra-3.13.0-32-generic : Depends: linux-image-3.13.0-32-generic but it is not going to be installed
 linux-image-extra-3.13.0-44-generic : Depends: linux-image-3.13.0-44-generic but it is not going to be installed
 linux-image-extra-3.13.0-45-generic : Depends: linux-image-3.13.0-45-generic but it is not going to be installed
 linux-image-generic : Depends: linux-image-3.13.0-45-generic but it is not going to be installed
E: Unmet dependencies. Try 'apt-get -f install' with no packages (or specify a solution).

अपने प्रश्न और के उत्पादन में संपादित करें sudo apt-get autoremoveऔर ls /boot
मूरू

फ्रॉग के जवाब की कोशिश करो। uname -rअपने वर्तमान कर्नेल संस्करण का पता लगाने के लिए कमांड का उपयोग करें , और इसके अलावा किसी कर्नेल को हटाने का प्रयास करें।
मूरू

जवाबों:


64

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

सबसे पहले उस कर्नेल का पता लगाएं जिसमें सिस्टम बूट किया गया है। वह जो वर्तमान में लोड किया गया है। एक टर्मिनल खोलें (CTRL + ALT + T) और निम्नलिखित कमांड जारी करें

uname -r

यह आपको भरी हुई कर्नेल दिखाएगा, आपको इसे हटाने की कोशिश नहीं करनी चाहिए।

फिर कमांड जारी करें

ls /boot 

यह सभी स्थापित छवियों को वापस कर देगा। एक या दो उठाओ और उन्हें हटाने की कोशिश करो। उन्हें हटाने / शुद्ध करने के लिए मजबूर करने का प्रयास करें। उदाहरण के लिए

sudo dpkg --force-all -P linux-image-3.13.0-32-generic

कुछ स्थान खाली करने के लिए, आप अन्य छवियों के लिए भी ऐसा कर सकते हैं।

तब आप लापता पैकेजों को स्थापित करने का प्रयास कर सकते हैं, या

sudo apt-get install -f 

निर्भरता को हल करने के लिए प्रयास करें।

अंत में, "सफाई पुरानी गुठली" आदेश जारी करें

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

उपरोक्त आदेश वर्तमान में लोड किए गए को छोड़कर सभी कर्नेल को हटा देगा।

क्योंकि आपके पास एक अलग / बूट विभाजन है, ध्यान रखें कि आपको इसके स्थान को ट्रैक करने और अक्सर सफाई करने की आवश्यकता होगी (आवृत्ति / बूट के स्थान पर निर्भर करती है)


1
नमस्ते, जब मैं उन्हें निकालने की कोशिश करता हूं तो मुझे एक त्रुटि sudo dpkg --force-all-ab-3.13.0-32-generic dpkg: चेतावनी: abi-3.13.0-32-generic हटाने के अनुरोध को अनदेखा करना जो नहीं है स्थापित
फिलिप हावर्ड

9
यह मेरे लिए काम किया, एक संशोधन के साथ: गिरी छवियों के साथ हटाने के बाद dpkg, मैं चलाने के लिए किया था sudo apt-get -f autoremoveप्राप्त करने के लिए apt-getunmet की निर्भरता के बारे में शिकायत को रोकने के लिए। अन्यथा, sudo apt-get -f installस्पष्ट रूप से उन सभी कर्नेल छवियों को फिर से स्थापित करने का प्रयास करता रहा dpkg, जिन्हें मैंने हटा दिया था , जो स्पष्ट रूप से बस /bootफिर से भर गए थे ।
mdunsmuir

4
बलपूर्वक शुद्धिकरण और apt-get -f autoremove@mdunsmuir के ऊपर टिप्पणी करने के बाद , यह अभी भी ऊपर दिए गए किसी भी क्लीन ऑपरेशन के दौरान सभी पुराने कर्नेल को स्थापित करना चाहता है। क्या यह सिर्फ असंबंधित निर्भरता को अनदेखा करने और एकल, पूर्ण पुरानी कर्नेल को हटाने का एक तरीका है?
NKijak

3
मैं जोड़ना चाहता हूं कि मुझे एक्स्ट्रा को भी अनइंस्टॉल करना पड़ा था sudo dpkg --force-all -P linux-image-extra-3.13.0-32-generic। अन्यथा ये एक्स्ट्रा अभी भी वास्तविक छवि पर निर्भर करते हैं और -fध्वज छवि को फिर से स्थापित करने और फिर डिस्क स्थान से बाहर चलाने का कारण होगा।
भूतकीपर

1
@ लोनीबेस्ट मैं सहमत हूं। इसके विपरीत, आर्क लिनक्स केवल एक कमबैक रखता है। न तो फेडोरा को यह मुद्दा लगता है।
फ्रैंकलिन यू

5

यह मेरे लिए Ubuntu 16.04 पर काम किया।

sudo apt autoremove --purge
sudo apt autoremove
sudo apt-get -f install
sudo apt-get upgrade

इस विधि ने मेरे लिए काम किया।
बोक

2

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

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*; नोट: कृपया किसी भी छवि को हटाने से पहले वर्तमान कर्नेल छवि की फिर से समीक्षा करें।
हेमंत थोरात

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