क्यों पुराने initrd अनइंस्टॉल की गई गुठली की फाइलें / बूट पार्टीशन भर रहे हैं?


13

कई उबंटू मशीनों पर मैं लगातार एक पूर्ण बूट विभाजन की समस्या का सामना कर रहा हूं, हालांकि मैं हमेशा सभी पुराने कर्नेल को हटा देता हूं। समस्या तब होती है, क्योंकि कई initrdफाइल बूट पार्टीशन पर होती हैं, भले ही संबंधित कर्नेल वास्तव में स्थापित न हों। उदाहरण में देने के लिए:

root@Jacobi:/boot# ls -lah
insgesamt 202M
drwxr-xr-x  3 root root 3,0K Jan 30 10:03 .
drwxr-xr-x 25 root root 4,0K Jan 30 10:03 ..
-rw-r--r--  1 root root 1,2M Dez 11 15:36 abi-4.4.0-104-generic
-rw-r--r--  1 root root 1,2M Jan  9 22:28 abi-4.4.0-109-generic
-rw-r--r--  1 root root 1,2M Jan 19 14:06 abi-4.4.0-112-generic
-rw-r--r--  1 root root 187K Dez 11 15:36 config-4.4.0-104-generic
-rw-r--r--  1 root root 187K Jan  9 22:28 config-4.4.0-109-generic
-rw-r--r--  1 root root 187K Jan 19 14:06 config-4.4.0-112-generic
drwxr-xr-x  5 root root 1,0K Jan 30 10:03 grub
-rw-r--r--  1 root root  10M Jan 30 10:03 initrd.img-3.13.0-39-generic
-rw-r--r--  1 root root  10M Jan 30 10:02 initrd.img-4.4.0-101-generic
-rw-r--r--  1 root root  10M Jan 30 10:02 initrd.img-4.4.0-103-generic
-rw-r--r--  1 root root  38M Jan 30 10:02 initrd.img-4.4.0-104-generic
-rw-r--r--  1 root root  38M Jan 30 10:02 initrd.img-4.4.0-109-generic
-rw-r--r--  1 root root  10M Jan 30 10:03 initrd.img-4.4.0-38-generic
-rw-r--r--  1 root root  10M Jan 30 10:03 initrd.img-4.4.0-45-generic
-rw-r--r--  1 root root  10M Jan 30 10:02 initrd.img-4.4.0-59-generic
-rw-r--r--  1 root root  10M Jan 30 10:02 initrd.img-4.4.0-77-generic
-rw-r--r--  1 root root  10M Jan 30 10:02 initrd.img-4.4.0-78-generic
-rw-r--r--  1 root root  10M Jan 30 10:02 initrd.img-4.4.0-81-generic
-rw-r--r--  1 root root 179K Jan 28  2016 memtest86+.bin
-rw-r--r--  1 root root 181K Jan 28  2016 memtest86+.elf
-rw-r--r--  1 root root 181K Jan 28  2016 memtest86+_multiboot.bin
-rw-------  1 root root 3,8M Dez 11 15:36 System.map-4.4.0-104-generic
-rw-------  1 root root 3,8M Jan  9 22:28 System.map-4.4.0-109-generic
-rw-------  1 root root 3,8M Jan 19 14:06 System.map-4.4.0-112-generic
-rw-------  1 root root 6,8M Dez 11 15:36 vmlinuz-4.4.0-104-generic
-rw-------  1 root root 6,8M Jan  9 22:28 vmlinuz-4.4.0-109-generic
-rw-------  1 root root 6,8M Jan 19 14:06 vmlinuz-4.4.0-112-generic

लेकिन केवल linux-image-4.4.0-104-generic और linux-image-4.4.0-109-generic स्थापित हैं:

root@Jacobi:/boot# dpkg -l linux-image-\* | grep ^ii
ii  linux-image-4.4.0-104-generic       4.4.0-104.127 amd64        Linux kernel image for version 4.4.0 on 64 bit x86 SMP
ii  linux-image-4.4.0-109-generic       4.4.0-109.132 amd64        Linux kernel image for version 4.4.0 on 64 bit x86 SMP
ii  linux-image-extra-4.4.0-104-generic 4.4.0-104.127 amd64        Linux kernel extra modules for version 4.4.0 on 64 bit x86 SMP
ii  linux-image-extra-4.4.0-109-generic 4.4.0-109.132 amd64        Linux kernel extra modules for version 4.4.0 on 64 bit x86 SMP

यदि मैं अनावश्यक initrd फ़ाइलों को मैन्युअल रूप से हटाता हूं, तो जैसे ही मैं अपग्रेड करने की कोशिश करता हूं, वे फिर से उत्पन्न हो जाएंगे।

इस समस्या का कारण क्या हो सकता है और मैं उन फ़ाइलों से स्थायी रूप से कैसे छुटकारा पा सकता हूं?


1
आपने इन संस्करणों के अनुरूप पैकेज कैसे निकाले?
मुरु

1
@ मरमू मैं इसे किसी भी अन्य तरीके से करने के लिए याद नहीं कर सकता, इससे उन्हें शुद्ध करने के लिए apt-get autoremove
user5950

जवाबों:


12

आपको आंशिक रूप से हटाए गए गुठली की जांच करनी चाहिए

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

और उदाहरण के लिए उन्हें हटा दें sudo apt-get purge linux-image-4.4.0-101-generic

Purit initramfs पीढ़ी के नियमों को हटा देगा /var/lib/initramfs-tools/

यदि यह मदद नहीं करता है, तो आप उन्हें initramfs सूची से मैन्युअल रूप से निकाल सकते हैं:

sudo rm /var/lib/initramfs-tools/3.13.0-39-generic
sudo rm /var/lib/initramfs-tools/4.4.0-101-generic
sudo rm /var/lib/initramfs-tools/4.4.0-103-generic
sudo rm /var/lib/initramfs-tools/4.4.0-38-generic
sudo rm /var/lib/initramfs-tools/4.4.0-45-generic
sudo rm /var/lib/initramfs-tools/4.4.0-59-generic
sudo rm /var/lib/initramfs-tools/4.4.0-77-generic
sudo rm /var/lib/initramfs-tools/4.4.0-78-generic
sudo rm /var/lib/initramfs-tools/4.4.0-81-generic

आमतौर पर मैं केवल 2 हाल की गुठली का purge-old-kernelsपालन ​​करता हूं sudo apt-get autoremove

आप स्थापित inernramfses के साथ स्थापित कर्नेल को पुनर्स्थापित कर सकते हैं:

sudo apt-get install --reinstall \
$(dpkg -l linux-image-\* | grep ^ii | awk '{print $2}')

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

जैसा कि मैंने पढ़ा है, यह कर्नेल या हेडर rmसे initrdसंबंधित किसी भी चीज़ के लिए उपयोग करने के लिए खराब रूप है । कुछ कमांड उपलब्ध हैं जो आपके लिए आंशिक रूप से हटाए गए गुठली / हेडर / initrd.img फ़ाइलों को हटाने का काम करेंगे। देखते हैं update-initramfs। अधिक जानकारी के लिए नीचे मेरा उत्तर देखें।
डैनियल

2

आप पहले से ही उपयोग किया है dpkgकर्नेल / हेडर शुद्ध करने के लिए और अगर आप पहले से जाँच की है dpkg -lकर्नेल नहीं दिख रहा है और अभी भी / हेडर वहाँ स्थापित है, लेकिन आप अभी भी इन पुराने कर्नेल के लिए संदर्भ को देखने में /bootके रूप में initrd-imgफाइल, तो उचित तरीके इन संदर्भों और फ़ाइलों को शुद्ध करने के लिए update-initramfsकमांड के साथ है ।

उदाहरण के लिए, यदि आपने केवल 4.4.0-109स्थापित किया है, लेकिन आप अभी भी निम्नलिखित को देखते हैं /boot:

-rw-r--r--  1 root root  10M Jan 30 10:02 initrd.img-4.4.0-103-generic
-rw-r--r--  1 root root  38M Jan 30 10:02 initrd.img-4.4.0-104-generic
-rw-r--r--  1 root root  38M Jan 30 10:02 initrd.img-4.4.0-109-generic

आप सुरक्षित रूप से हटा सकते हैं 4.4.0-104और 4.4.0-103से /bootनिम्न कमांड के साथ:

$ sudo update-initramfs -d -k 4.4.0-103-generic
$ sudo update-initramfs -d -k 4.4.0-104-generic
$ sudo update-initramfs -c -k all

पहले दो कमांड initramfsपीढ़ी के नियमों के साथ-साथ फाइलों में उन गुठली के संदर्भों को हटाते हैं /boot। अंतिम आदेश initramfs को initrd.imgअद्यतन नियमों के आधार पर फ़ाइलों को फिर से बनाने के लिए कहता है।

सैद्धांतिक रूप से आप भी इस्तेमाल कर सकते हैं

$ sudo update-initramfs -d -k 4.4.0-{103,104}-generic

एक बार में कई गुठली को हटाने के लिए, लेकिन किसी कारण से यह मेरे लिए काम नहीं किया।


+1 - यह अनाथ initrd की सही विधि (और उत्तर) है।
bshea

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