พาร์ติชั่นของฉัน / boot ได้รับผลกระทบ 100% และตอนนี้ฉันไม่สามารถอัพเกรดได้ ไม่สามารถลบเมล็ดเก่าเพื่อให้มีที่ว่างได้


154

ปัญหาแรกของฉันคือเมื่อฉันพยายามหรือapt-get update apt-get upgradeในการอัพเกรดฉันได้รับข้อผิดพลาดดังต่อไปนี้:

You might want to run 'apt-get -f install' to correct these.
The following packages have unmet dependencies:
linux-image-server : Depends: linux-image-3.2.0-27-generic but it is not installed
E: Unmet dependencies. Try using -f.

ฉันพยายามเรียกใช้ apt-get install -f และนี่คือผลลัพธ์ (หลังจากบอกว่าใช่ในทันที)

(Reading database ... 186183 files and directories currently installed.)
Unpacking linux-image-3.2.0-27-generic (from .../linux-image-3.2.0-27-generic_3.2.0-27.43_amd64.deb) ...
Done.
dpkg: error processing /var/cache/apt/archives/linux-image-3.2.0-27-generic_3.2.0-27.43_amd64.deb (--unpack):
 failed in write on buffer copy for backend dpkg-deb during `./boot/System.map-3.2.0-27-generic': No space left on device
 No apport report written because the error message indicates a disk full error
                                                                          dpkg-deb:    error: subprocess paste was killed by signal (Broken pipe)
Examining /etc/kernel/postrm.d .
run-parts: executing /etc/kernel/postrm.d/initramfs-tools 3.2.0-27-generic   /boot/vmlinuz-3.2.0-27-generic
run-parts: executing /etc/kernel/postrm.d/zz-update-grub 3.2.0-27-generic /boot/vmlinuz-3.2.0-27-generic
Errors were encountered while processing:
/var/cache/apt/archives/linux-image-3.2.0-27-generic_3.2.0-27.43_amd64.deb
E: Sub-process /usr/bin/dpkg returned an error code (1)

ฉันพยายามทำงานและมันทำให้ฉันข้อผิดพลาดเช่นเดียวกับapt-get autoremoveapt-get upgrade

เมื่อฉันวิ่งdfฉันได้รับสิ่งนี้เพื่อ/boot:

/dev/sda1                    233191     230297         0 100% /boot

ดังนั้นฉันอ่านที่อื่นว่าฉันควรพยายามล้างเมล็ดเก่า ฉันตรวจสอบสิ่งที่เมล็ดของฉันด้วย:

$ dpkg -l linux-image-\* | grep ^ii
ii  linux-image-2.6.38-13-server  2.6.38-13.52  Linux kernel image for version 2.6.38 on x86_64
ii  linux-image-3.0.0-13-server   3.0.0-13.22   Linux kernel image for version 3.0.0  on x86_64
ii  linux-image-3.0.0-14-server   3.0.0-14.23   Linux kernel image for version 3.0.0  on x86_64
ii  linux-image-3.0.0-15-server   3.0.0-15.26   Linux kernel image for version 3.0.0  on x86_64
ii  linux-image-3.0.0-16-server   3.0.0-16.29   Linux kernel image for version 3.0.0  on x86_64
ii  linux-image-3.0.0-17-server   3.0.0-17.30   Linux kernel image for version 3.0.0  on x86_64
ii  linux-image-3.2.0-24-generic  3.2.0-24.39   Linux kernel image for version 3.2.0  on 64 bit x86 SMP
ii  linux-image-3.2.0-25-generic  3.2.0-25.40   Linux kernel image for version 3.2.0  on 64 bit x86 SMP
ii  linux-image-3.2.0-26-generic  3.2.0-26.41   Linux kernel image for version 3.2.0  on 64 bit x86 SMP

เมื่อฉันพยายามที่จะลบเก่าที่สุดด้วยสิ่งนี้:

$ sudo apt-get purge linux-image-2.6.38-13-server
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-server : Depends: linux-image-3.2.0-27-generic but it is not going to be     installed
E: Unmet dependencies. Try 'apt-get -f install' with no packages (or specify a solution).

ฉันจะเพิ่มหรือขยายการบูตโดยไม่ทำให้การติดตั้งของฉันยุ่งลงได้อย่างไร


ฉันคิดว่าคำตอบของ @ mreiter อาจดีที่สุด: ใช้ตัวจัดการแพคเกจและทำงานเมื่อคำสั่งตัวจัดการแพคเกจอื่น ๆ ล้มเหลวอย่างน้อยสำหรับฉัน: askubuntu.com/a/205776/247661
Aaron Hall


1
@dskrvk ใช่! ทำไมจึงRemove-Unused-Dependenciesไม่เป็นค่าเริ่มต้น
Steven R. Loomis

คำตอบ:


129

การเพิ่มพื้นที่ว่างบนระบบไฟล์รูท

หากต้องการเพิ่มพื้นที่ว่างในระบบไฟล์รูทคุณสามารถลองดำเนินการapt-get cleanได้

หากยังไม่ได้ผลคุณสามารถไปที่/var/cache/apt/archivesและลบไฟล์บางส่วนออกจากแคชด้วยตนเองเพื่อให้มีพื้นที่ว่างกลับมาเช่น:

sudo rm linux-headers-*

มันจะไม่เจ็บที่จะลบ.debไฟล์ทั้งหมดที่นี่ถ้าคุณต้องการ - นั่นคือสิ่งที่apt-get cleanไม่ พวกเขาจะถูกดาวน์โหลดอีกครั้งโดยอัตโนมัติaptหากพวกเขาต้องการอีกครั้ง

การเพิ่มพื้นที่ว่างบนระบบไฟล์ / boot

โปสเตอร์ต้นฉบับมี/bootพาร์ติชันแยกต่างหากและนั่นคือสิ่งที่เต็มและป้องกันไม่ให้aptระบบทำงานได้ มันจะจำเป็นสำหรับเขาที่จะเพิ่มพื้นที่ว่างที่นั่น

หากมีพื้นที่เพียงพอให้ไปที่/bootและลบไฟล์กำหนดค่าหรือสองไฟล์:

sudo rm config-3.2.0-19-generic-pae

ตัวอย่างเช่น แต่ใช้ชื่อของหนึ่งในเคอร์เนลเวอร์ชันที่คุณต้องการลบต่อไป สิ่งนี้จะเพิ่มพื้นที่ว่างเล็กน้อย (ประมาณ 144K ต่ออัน)

หากคุณต้องการพื้นที่เพิ่มขึ้นเป็นรายบุคคลลบเก่าvmlinuz, initrd, abiและSystem.mapไฟล์จนกว่าคุณจะมีพื้นที่เพียงพอ (ประมาณ 22M สำหรับหนึ่งในรุ่น i386 เคอร์เนลของฉัน)

สิ่งที่คุณทำไม่ได้ลบออกทั้งหมด อย่างน้อยคุณควรเก็บเวอร์ชันที่ตรงกันล่าสุดสองไฟล์สำหรับแต่ละประเภทเคอร์เนลที่คุณใช้

จากนั้นดำเนินการตามคำสั่ง apt-get install ดังกล่าวข้างต้นพวกเขาอาจต้องดาวน์โหลด debs บางส่วนที่คุณลบอีกครั้ง แต่ถ้าเป็นเช่นนั้นจะเกิดขึ้นโดยอัตโนมัติ เมื่อคุณมี apt ทำงานอีกครั้งให้ล้างข้อมูลโดยใช้ apt-get เพื่อลบแพ็กเกจที่สอดคล้องกับไฟล์ที่คุณลบออก - เพื่อให้ทุกอย่างตรงกัน


แฟ้มปรับแต่งใน/bootคือการกำหนดค่าเคอร์เนลที่ถูกนำมาใช้โดยทีม kernel เพื่อสร้างเคอร์เนลของชื่อเดียวกัน มันจะไม่เป็นอันตรายต่อการลบเว้นแต่ว่าคุณต้องการมันสำหรับการอ้างอิงหรือเพื่อช่วยคุณในการสร้างเมล็ดของคุณเอง

ในที่สุดคุณก็ทำการลบเคอร์เนลแพ็คเกจเก่าหรือสองชุดออกจาก/bootพาร์ติชั่นด้วยตนเองเพื่อเพิ่มพื้นที่สำหรับแพ็คเกจใหม่


ฉันพยายามลบการกำหนดค่าเกือบทั้งหมด ดูเหมือนว่ามันจะมีพื้นที่ไม่เพียงพอ ไฟล์อื่น ๆ ในนั้นจะมีความปลอดภัยในการลบ? ระบบไฟล์รูทของฉันไม่ใกล้เต็มดังนั้นฉันจึงไม่กังวล
Strifey16

ฉันอัปเดตคำตอบของฉันพร้อมไฟล์เพิ่มเติมเพื่อลบด้วยมือ สำหรับฉันดูเหมือนว่าการลบชุด 3.0.0.13 และ 3.0.0.14 (ห้าไฟล์ไปยังชุดรวมถึงไฟล์ abi) จะพอเพียง
John S Gruber

2
สิ่งนี้แก้ไขได้ ฉันรู้ว่ามันอาจลงมาเพื่อลบไฟล์ด้วยมือ แต่ฉันลังเลที่จะทำเช่นนั้นด้วยสิ่งใดก็ตามที่ติดตั้งโดย apt ดังนั้นฉันคิดว่าฉันจะถามที่นี่ก่อน
Strifey16

9
อย่าใช้sudo rmเพื่อลบออกจาก / boot ใช้sudo dpkg --purgeเพื่อลบแพ็คเกจ linux-image เก่าแทน หลังจากนั้นใช้sudo apt-get -f installเพื่อแก้ไขการพึ่งพาที่ขาด
jarno

4
แม้ว่าบางครั้งระบบอาจเต็มจนไม่สามารถใช้งาน dpkg ได้ แต่rmสามารถใช้งานได้แล้ว
jarno

66

ในกรณีของฉันaptคำสั่งและdpkgคำสั่งไม่สามารถเสร็จสิ้นและไม่สามารถลบได้ 2.6.32-56-serverอัปเดตอัตโนมัติล้มเหลวในการติดตั้ง

ขั้นตอนแรกของฉันคือการระบุพื้นที่ที่จะใช้

cd /boot
du -sk *|sort -n

ฉันมีเมล็ดประมาณ 30 และรองรับไฟล์

ฉันทำuname -aเพื่อให้ได้เคอร์เนลที่ใช้งานอยู่ฉันพบว่าฉันอยู่บน Linux สำรอง2.6.32-43-serverและทำtarจาก 6 รุ่นที่ไม่ได้ใช้งานและเก่า

tar -cvf ~username/boot.tar *2.6.32-44-server *2.6.32-45-server *2.6.32-46-server *2.6.32-47-server *2.6.32-48-server *2.6.32-49-server

จากนั้นฉันก็ทำrm -rfสิ่งที่ฉันสำรองไว้:

rm -rf *2.6.32-44-server *2.6.32-45-server *2.6.32-46-server *2.6.32-47-server *2.6.32-48-server *2.6.32-49-server

ฉันกำลังแสดงคำสั่งเหล่านี้เป็นตัวอย่างคุณจะต้องตัดสินใจว่าคุณจะทำงานกับสถานการณ์ของคุณอย่างไร

ตอนนี้ฉันมีที่ว่าง/bootพอฉันสามารถวิ่งได้

apt-get -f install 

2.6.32-56-serverในการทำความสะอาดติดตั้งล้มเหลวของ

จากนั้นฉันก็ทำ

apt-get remove linux-headers-2.6.32-38 linux-headers-2.6.32-38-server linux-image-2.6.32-38-server
apt-get remove linux-headers-2.6.32-39 linux-headers-2.6.32-39-server linux-image-2.6.32-39-server

สิ่งนี้ทำให้ฉันมีพื้นที่สำหรับเก็บสิ่งที่ฉันสำรองไว้

tar -xf ~username/boot.tar
rm  ~username/boot.tar    

เพื่อทำความสะอาดฉันก็สามารถเรียกใช้:

apt-get autoremove

ผมรีบูตและฉันตอนนี้ลงไปโดยใช้ 4% /bootของ


นี่เป็นประโยชน์มากที่สุดสำหรับฉันจากคำแนะนำทั้งหมด ขอบคุณมาก!
Joshua F. Rountree

การลบไฟล์ออกจาก / boot เพียงแค่แบ่ง apt และ dpkg อย่างน่ากลัวเนื่องจากสคริปต์การติดตั้งและการลบของพวกเขาล้มเหลวอย่างหนักเมื่อไฟล์หายไป ฉันไม่เห็นว่าคุณจะได้รับสิ่งนี้ในการทำงาน
FizxMike

20

คุณสามารถใช้dpkgแทนapt-getการลบเมล็ดเก่าได้:

sudo dpkg -r linux-image-3.2.0-29-generic

อาจมีคำย่อในการใช้สิ่งนี้ แต่คำแนะนำของ @ mreiter นั้นใช้ได้สำหรับฉันเมื่อสิ่งนี้ไม่ได้ทำ (แนะนำสิ่งนี้ในช่องทางสนับสนุน IRC ของอูบุนตู)
Aaron Hall

3
@AaronHall คำตอบนี้มีเพียงส่วนสำคัญของคำตอบของ mreiter (บรรทัดสุดท้าย) และสั้นกว่ามากเนื่องจากไม่ครอบคลุมการล้างส่วนหัว (ซึ่งไม่ได้ช่วยในกรณีของ/bootพาร์ติชันแยกต่างหาก)
Melebius

9

ฉันสังเกตว่ายังมีไฟล์บางส่วนของเวอร์ชันเก่าในไดเรกทอรีบูต:

$ ls /boot
vmcoreinfo-2.6.31-17-server

และตัวจัดการแพ็คเกจจะแสดงรายการเวอร์ชันเก่า:

dpkg -l | grep linux-image

ฉันจึงใช้คำสั่งนี้ ( autoremoveจะลบภาพล่าสุดที่ไม่ต้องการลบด้วย)

sudo apt-get purge linux-image-2.6.31-17-server

ฉันยังมีส่วนหัวที่เหลืออยู่:

dpkg -l | grep linux-headers

ดังนั้นฉันจึงทำสิ่งนี้:

sudo apt-get purge linux-headers-2.6.32-34

ในที่สุดก็มีหนึ่งแพ็คเกจที่เหลือฉันไม่สามารถลบได้ด้วยการกำจัด apt-get

$ dpkg -l | grep linux-image
rc  linux-image-2.6.28-11-server

ที่มา: ลบแพ็คเกจที่ทำเครื่องหมายว่า rc โดย dpkg

sudo dpkg --purge linux-image-2.6.28-11-server

3

ตรวจสอบการใช้งานของด้วย/var/tmp du -sh /var/tmp/ไฟล์ทั้งหมดในโฟลเดอร์นั้นสามารถลบได้เพื่อเพิ่มพื้นที่

จากนั้นคุณสามารถรันสิ่งต่อไปนี้เพื่อลบเมล็ดเก่า:

sudo apt-get clean
sudo apt install byobu
sudo purge-old-kernels
sudo apt autoremove
sudo update-grub

สิ่งที่ไม่/var/tmpต้องทำอะไรกับเมล็ดเก่าหรือไม่ และมันก็ไม่ปลอดภัยเสมอที่จะลบทุกสิ่งใน/var/tmp...
fosslinux

3

นี่คือสิ่งที่ฉันใช้:

sudo apt-get autoremove linux-image-xxxx

ทำเช่นนั้นสำหรับเมล็ดเก่าทั้งหมดและเก็บเฉพาะสองล่าสุดเท่านั้น

หากคุณต้องการลบเมล็ดเก่าโดยอัตโนมัติและอัปเดต GRUB โปรดดูที่: เอกสารประกอบของ Ubuntu


2
นี่ควรเป็นคำตอบที่ยอมรับได้ หากคุณไม่รังเกียจที่จะทำความสะอาดทุกสิ่งคุณไม่จำเป็นต้องระบุอิมเมจ Linux
CyberEd

2

ฉันพบว่าสิ่งเดียวที่ทำงานกับฉันคือการใช้ความถนัด

sudo aptitude

จากนั้นเมื่อมันเปิดขึ้นมันมักจะพูดอะไรบางอย่างเกี่ยวกับการพึ่งพาที่ไม่ได้อยู่ที่ด้านล่าง คุณสามารถกดตัวอักษรgเพื่อดำเนินการลบต่อที่แนะนำ จะนำคุณไปยังหน้าที่มีรายการสิ่งที่จะเกิดขึ้น

ควรมีเครื่องหมายลบ-ติดกับเมล็ดข้าวหัก กดgอีกครั้งและมันจะลบเมล็ดที่หัก กดqเพื่อออก จากนั้นคุณควรจะสามารถใช้sudo apt-get autoremoveเพื่อกำจัดเมล็ดเก่าและเพิ่มพื้นที่ว่าง


1
นี่เป็นคำตอบที่ถูกต้องเท่านั้น คำตอบอื่น ๆ ทั้งหมดไม่ทำงานเนื่องจากตัวจัดการแพ็คเกจต้องการติดตั้งแพคเกจก่อนที่จะลบอะไรออก
machineaddict

2

คุณไม่สามารถดำเนินการกับแพ็คเกจ แต่คุณสามารถดำเนินการกับไฟล์อื่นได้ ขั้นแรกให้ไปที่โฟลเดอร์บ้านของคุณและดูว่ามีสิ่งใดที่คุณสามารถลบได้ หากไม่ใช่ให้ลองย้ายไฟล์จำนวนมากไปยังพาร์ติชันอื่น (หรือแฟลชไดรฟ์) จากนั้นลองsudo apt-get install -fล้างข้อมูลปัญหาการพึ่งพาแพ็คเกจ (ส่วนใหญ่คุณติดตั้งไฟล์. deb ผ่านdpkg) แล้วจึงกำจัดเมล็ดเก่า ๆ เมื่อคุณมีอย่างน้อย 10 MB อย่างปลอดภัยให้ลองลบซอฟต์แวร์หรือไฟล์ที่ไม่จำเป็นออก


5
โฟลเดอร์หลักไม่ได้อยู่ใน / boot
Thorbjørn Ravn Andersen

1

ใช้ตัวจัดการแพคเกจ Synaptic เพียงแค่เลือกแพ็คเกจที่คุณต้องการลบออกและมันจะแจ้งให้คุณลบแพ็คเกจที่ขึ้นอยู่กับมันด้วย จากประสบการณ์ของฉันแพคเกจเคอร์เนลมักจะอยู่ในกลุ่มที่สอง (หรือมากกว่านั้นขึ้นอยู่กับว่าคุณนับ) ที่พึ่งพาซึ่งกันและกัน โดยปกติแล้วคุณสามารถหาตัวกรองเก่าได้อย่างรวดเร็วโดยใช้ตัวกรอง "local / ล้าสมัย"


2
เช่นบนเซิร์ฟเวอร์ (ข้อความเท่านั้น) ไม่มี Synaptic ดังนั้นจึงไม่ใช่โซลูชันที่ทำงานได้จริงสำหรับเซิร์ฟเวอร์
nerdoc

1

ฉันได้ต่อสู้กับปัญหานี้เป็นครั้งคราวและยังไม่เคยเห็นวิธีการแก้ปัญหาใด ๆ ที่ได้ผลจริง ในบางกรณีการเอาเมล็ดเก่าออกก็ขึ้นอยู่กับการพึ่งพาซึ่งทำให้ฉันไม่สามารถลบอะไรได้และฉันต้องลบเมล็ดด้วยตนเองออกจาก / boot อย่างไรก็ตามฉันยังต้องการที่จะทำงานเต็มรูปแบบเนื่องจากฉันคิดว่าเมล็ดที่ถูกลบด้วยตนเองถูกบันทึกไว้ที่ใดที่หนึ่งและอาจทำให้เกิดปัญหาในอนาคตเมื่อมีบางสิ่งรายงานไฟล์ที่ขาดหายไปเนื่องจากฉันนั่งทำงาน rm -rf กับไฟล์

ดังนั้นฉันจึงเขียนสคริปต์นี้ตามคำแนะนำ googled มากมายที่นี่ซึ่งไม่จำเป็นต้องติดตั้งอะไรเพิ่มเติม สคริปต์ได้รับการแก้ไขสองสามครั้งเพื่อรองรับสถานการณ์ "ที่ไม่คาดคิด" ของฉันเอง ตัวอย่างเช่นการใช้งานบน raspberry pi อาจไม่มีการอัปเดตด้วง และในบางกรณีเมื่อเรียกใช้ updaters ล่าสุดเซิร์ฟเวอร์นั้นติดกับ IPv6 ซึ่งบางเว็บไซต์ไม่สามารถเข้าถึงได้

สคริปต์จะพิจารณาว่าต้องลบเมล็ดที่ติดค้างอย่างสมบูรณ์เนื่องจากการสร้างการพึ่งพาหรือไม่หากสามารถทำได้ด้วยวิธีที่ "ถูกต้อง"

#!/bin/bash

ipv4="-o Acquire::ForceIPv4=true"

if [ "$1" = "4" ] ; then
    withip=$ipv4
    echo "Going IPv4 ($withip)"
fi

echo "Autoremove+Purge."
apt-get $withip -y -f autoremove --purge >/dev/null 2>&1

if [ "$?" != "0" ] ; then
    echo "Auto Removal Failed!"
fi

echo "Old dependency fix."
apt-get $withip -f -y install >/dev/null 2>&1

if [ "$?" != "0" ] ; then
    echo "That failed. So we'll try to make up to it during this process."
fi

echo "Now, going old kernel cleanup!"
kern=$(dpkg --list 'linux-image*'|awk '{ if ($1=="ii") print $2}'|grep -v `uname -r`)
hadErrors=0

for k in $kern
do
    echo apt-get -y purge $k
    apt-get $withip -y purge $k >/dev/null 2>&1

    if [ "$?" != "0" ] ; then
        echo "Failed apt-purge... Using plan B (--force-all -P)..."
        dpkg --force-all -P $k >/dev/null 2>&1
        echo "Rerunning stuff (apt-get -f -y install) for dependencies..."
        apt-get $withip -f -y install >/dev/null 2>&1
        if [ "$?" != "0" ] ; then
            echo "Still failing..."
            hadErrors=1
        fi
    fi
done

if [ "$hadErrors" = "1" ] ; then
    echo "I had errors. I should rerun this process, to see if there are more kernels that were left out after cleanup..."
    /usr/local/tornevall/cleankernel
fi

apt-get $withip autoremove
apt-get $withip update
apt-get $withip upgrade
apt-get $withip dist-upgrade

grb=$(which update-grub)
if [ "" != "$grb" ] ; then
    update-grub
else
    echo "Can't upgrade grub since update-grub is missing..."
fi

คุณลองใช้linux-purgeหรือไม่ แต่ตอนนี้มันยังไม่มี Force IPv4
jarno

สคริปต์ของคุณจะกำจัด linux-image-generic ในระบบของฉันซึ่งไม่ดี
jarno

พวกเขามีเหตุผลบางอย่างที่ถูกนำกลับมาเมื่อเมล็ดเก่าได้รับการทำความสะอาด อย่างน้อยก็เป็นกรณีนี้สำหรับฉันนับตั้งแต่ฉันสร้างสคริปต์นี้ อย่างไรก็ตามสคริปต์นี้เป็นสิ่งที่ฉันใช้เมื่อไม่มีตัวเลือกอื่นเพื่อดำเนินการต่อ โดยทั่วไปการอัปเกรดจะดูแลสิ่งนี้ด้วยตนเอง แต่เมื่อถึงเวลานี้เมื่อไม่มีสิ่งใดทำงานได้อาจเป็นตัวเลือกที่ดีเนื่องจากมักจะมีเมล็ดมากขึ้นที่จะถูกตั้งค่าหลังจากการล้างข้อมูล ถ้าเรื่องนี้ดีหรือไม่ดีก็คงคุยกันได้
Tomas Tornevall

0

เพียงแค่เรียกใช้sudo apt-get -f autoremoveแก้ไขปัญหาของฉัน


2
คุณมีการใช้พื้นที่ดิสก์ / บูต 100% หรือไม่?
fosslinux

ดูประวัติการตรวจสอบของฉันมันไม่ได้ดูเหมือน PS: ฉันอยู่ใน Xenial Vagrant และระบบไฟล์บูตของฉัน/dev/sda1ติดตั้งอยู่บน/
forzagreen

0

เรียกใช้สิ่งนี้:

sudo apt-get autoremove
sudo apt-get --purge remove && sudo apt-get autoclean
sudo apt-get -f install
sudo dpkg-reconfigure -a

ที่มา: ฉันได้รับข้อผิดพลาดนี้หลังจากอัปเกรดแล้ว กรุณาช่วย


sudo dpkg-reconfigure -a ทำอะไรได้อีก บน Ubuntu 16 มันบอกว่าตัวเลือกที่ไม่รู้จัก -a
Shivam Kotwalia

สำหรับคำถามนี้aptจะไม่สามารถลบแพ็กเกจเคอร์เนลได้เนื่องจากกระบวนการลบจะสร้างไฟล์/bootซึ่งเต็มแล้ว นั่นเป็นเหตุผลที่apt-get autoremoveล้มเหลว คำถามที่คุณต้องการคือaskubuntu.com/q/142926/158442ซึ่งมีautoremoveอยู่ในรายการแล้ว
muru

@muru ฉันเพิ่งโพสต์ไว้เพราะมันใช้กลอุบายสำหรับฉัน: D
Ardi Nusawan

ฉันแน่ใจว่าเป็นอย่างนั้นสิ่งที่ฉันพูดคือปัญหาของคุณอาจเป็นคำถามอื่นไม่ใช่คำถามนี้
muru

@muru โอเคเข้าใจแล้ว: D
Ardi Nusawan

0

ฉันเคยเห็นบทความสองสามข้อเกี่ยวกับ / boot เต็มซึ่งไม่สามารถแก้ไขได้โดยการกำจัด dpkg linux kernels เก่าเพราะapt-get -f installหรือapt-get -f autoremovติดตั้งเมล็ด

ในกรณีของฉันอย่างน้อยที่สุดแพ็คเกจที่เซ็นชื่อและพิเศษก็จำเป็นต้องถูกลบออกด้วย - เมล็ดนั้นเป็นสิ่งที่ต้องพึ่งพาสำหรับแพ็คเกจเหล่านี้ดังนั้นจึงควรติดตั้งใหม่ โดยทั่วไปแพ็คเกจเคอร์เนลที่เกี่ยวข้องควรจะถูกลบทิ้งก่อนเรียก 'ติดตั้ง' หากคุณพยายามอัพเกรด apt-getทันทีหลังจากลบข้อความแสดงข้อผิดพลาดควรบอกว่าแพ็กเกจใดมีการพึ่งพาเคอร์เนลที่ไม่ได้รับการแก้ไข

ในกรณีของฉันชั้นเชิงต่อไปนี้ทำงาน:

#as sudo, repeat 1-3 for any old kernels; can be scripted
dpkg --force-all -P linux-image-4.4.0-112-generic 
dpkg --purge linux-image-extra-4.4.0-112-generic
dpkg --purge linux-signed-image-4.4.0-112-generic
apt-get -f install #dependency resolution didn't have work to do for kernel packages
apt-get autoremove --purge -f 
apt-get autoclean
apt-get upgrade

0

ติดตั้งเครื่องมือล้าง linuxเช่นนี้นี้

จากนั้นรันในเทอร์มินัล:

sudo linux-purge --clear-boot --fix

จากนั้นไปกำจัดเมล็ดด้วยเช่น

sudo linux-purge --keep 1 --choose

เสริม:

หากคุณต้องการใช้ linux-purge สำหรับการลบเคอร์เนลแบบอัตโนมัติแทนที่จะใช้การอัพเกรดแบบอัตโนมัติคุณควรปิดใช้งานการลบสิ่งที่ไม่ได้ใช้ออกโดยแก้ไข /etc/apt/apt.conf.d/50unattended-upgrades และตั้งค่าบริการ systemd การดำเนินการ

/usr/local/bin/linux-purge --auto-only --keep 1 --yes

เมื่อไหร่ก็ได้ที่คุณต้องการ.

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.