Tidak dapat membersihkan penuh / boot karena dependensi yang tidak terpenuhi

43

Saya mendapat pesan kesalahan yang menjelaskan / boot saya sudah penuh. mencoba membersihkan file gambar lama sepertinya selalu gagal karena kesalahan penuh disk atau kesalahan ketergantungan. Bisakah seseorang menjelaskan kesalahan saya.

$ 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

Saya menggunakan

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

mendapatkan

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

Kemudian memilih gambar pertama untuk dihapus

$ 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).
Philip Howard
sumber
Harap edit pertanyaan Anda dan hasil dari sudo apt-get autoremovedan ls /boot.
muru
Coba jawaban Phrog. Gunakan uname -rperintah untuk mengetahui versi kernel Anda saat ini, dan coba hapus kernel selain itu.
muru

Jawaban:

64

Dalam kasus seperti itu saya akan menggunakan dpkgalat untuk memaksa penghapusan beberapa paket kernel. Ini tidak disarankan untuk penggunaan umum dan agak berbahaya , tetapi dalam kasus seperti itu dengan dependensi yang tidak terpenuhi mungkin membantu.

Pertama-tama cari kernel tempat sistem boot. Yang saat ini dimuat. Buka terminal (CTRL + ALT + T) dan jalankan perintah berikut

uname -r

Ini akan menunjukkan kepada Anda kernel yang dimuat, Anda TIDAK harus mencoba menghapus yang ini.

Lalu keluarkan perintahnya

ls /boot 

itu akan mengembalikan semua gambar yang diinstal. Pilih satu atau dua dan cobalah untuk menghapusnya. Cobalah untuk memaksa menghapus / membersihkannya. Sebagai contoh

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

Anda dapat melakukan hal yang sama untuk gambar lain, untuk membebaskan ruang.

Kemudian Anda dapat mencoba menginstal paket yang hilang, atau

sudo apt-get install -f 

untuk mencoba menyelesaikan dependensi.

Terakhir, berikan perintah "cleanup old kernel"

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

Perintah di atas akan menghapus SEMUA kernel kecuali yang saat ini dimuat.

Karena Anda memiliki partisi / boot terpisah, perlu diingat bahwa Anda perlu melacak ruangnya dan membersihkannya (frekuensinya tergantung pada ruang / boot)

NickTux
sumber
1
Hai ketika saya mencoba untuk menghapusnya, saya mendapatkan kesalahan sudo dpkg - force-all -P abi-3.13.0-32-generic dpkg: peringatan: abaikan permintaan untuk menghapus abi-3.13.0-32-generic yang tidak terpasang
Philip Howard
9
Ini bekerja untuk saya, dengan satu modifikasi: setelah menghapus gambar kernel dengan dpkg, aku harus lari sudo apt-get -f autoremoveuntuk mendapatkan apt-getberhenti mengeluh tentang dependensi yang belum terpenuhi. Jika tidak, sudo apt-get -f installtampaknya terus mencoba menginstal ulang semua gambar kernel yang saya hapus dpkg, yang jelas hanya terisi /bootlagi.
mdunsmuir
4
Setelah membersihkan paksa dan apt-get -f autoremovekomentar di @mdunsmuir di atas, ia masih ingin menginstal semua kernel lama selama salah satu operasi pembersihan di atas. Apakah ada cara untuk hanya mengatakannya untuk mengabaikan dependensi yang tidak terkait dan menghapus satu kernel lama yang lengkap?
NKijak
3
Saya ingin menambahkan bahwa saya juga harus menghapus instalan ekstra sudo dpkg --force-all -P linux-image-extra-3.13.0-32-generic. Kalau tidak, ekstra ini masih tergantung pada gambar yang sebenarnya dan -fbendera akan menyebabkan gambar diinstal ulang dan kemudian kehabisan ruang disk.
Ghostkeeper
1
@LonnieBest saya setuju. Sebaliknya, Arch Linux hanya menyimpan satu fallback. Tampaknya Fedora juga tidak memiliki masalah ini.
Franklin Yu
5

Inilah yang berhasil bagi saya di Ubuntu 16.04.

sudo apt autoremove --purge
sudo apt autoremove
sudo apt-get -f install
sudo apt-get upgrade
msa
sumber
Metode ini bekerja untuk saya.
Bok
2

Daftar semua kernel:

dpkg --list 'linux-image*'

Tampilkan kernel saat ini:

uname -r

Daftar semua kernel KECUALI yang sekarang:

dpkg -l linux-{image,headers}-"[0-9]*" | awk '/^ii/{ print $2}' | grep -v -e `uname -r | cut -f1,2 -d"-"` | grep -e '[0-9]'

Pastikan kernel Anda saat ini tidak ada dalam daftar itu.

Hapus semua kernel KECUALI yang sekarang:

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

Bersihkan barang-barang lainnya:

sudo apt-get autoremove
Hemant Thorat
sumber
Jika masih memberi Anda kesalahan ruang disk boot untuk menginstal / menghapus file lalu langsung menghapus salah satu gambar lama dari / direktori boot, ls -lh /boot/*-3.13.0-119*; rm /boot/*-3.13.0-119*; CATATAN: Harap tinjau lagi gambar kernel saat ini sebelum menghapus gambar apa pun.
Hemant Thorat
Masih mengeluh bahwa ia memiliki ketergantungan yang tidak terpenuhi
Matiss Jurgelis