ไม่สามารถทำความสะอาดเต็ม / บูตได้เนื่องจากการพึ่งพาที่ไม่คาดคิด


43

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

$ 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
muru

ลองคำตอบของ Phrog ใช้uname -rคำสั่งเพื่อค้นหาเวอร์ชันเคอร์เนลปัจจุบันของคุณและลองลบเคอร์เนลอื่นที่ไม่ใช่
muru

คำตอบ:


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 -P abi-3.13.0-32-dpkg ทั่วไป: คำเตือน: ละเว้นการร้องขอเพื่อลบ abi-3.13.0-32-generic ซึ่งไม่ใช่ ติดตั้งแล้ว
Philip Howard

9
นี้ทำงานให้ฉันด้วยการปรับเปลี่ยนที่หนึ่ง: หลังจากลบภาพเคอร์เนลกับdpkgฉันได้ไปทำงานsudo apt-get -f autoremoveที่จะได้รับapt-getที่จะหยุดบ่นเกี่ยวกับการกระทําการอ้างอิง มิฉะนั้น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แฟล็กจะทำให้อิมเมจถูกติดตั้งใหม่และจากนั้นเนื้อที่ดิสก์เหลืออยู่
Ghostkeeper

1
@LonnieBest ฉันเห็นด้วย ในทางตรงกันข้าม Arch Linux คงไว้เพียงทางเลือกเดียวเท่านั้น Fedora ดูเหมือนจะไม่มีปัญหานี้
Franklin Yu

5

นี่คือสิ่งที่ใช้ได้กับฉันใน Ubuntu 16.04

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

วิธีนี้ใช้ได้ผลสำหรับฉัน
Bok

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

หากยังคงมีข้อผิดพลาดเกี่ยวกับพื้นที่ดิสก์สำหรับบูตสำหรับการติดตั้ง / ถอนการติดตั้งไฟล์ให้ลบหนึ่งในอิมเมจเก่าออกจากไดเร็กทอรี / boot โดยตรง ls -lh /boot/*-3.13.0-119*; rm /boot/*-3.13.0-119*; หมายเหตุ: โปรดตรวจสอบภาพเคอร์เนลปัจจุบันอีกครั้งก่อนที่จะลบภาพใด ๆ
Hemant Thorat

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