Không thể dọn sạch toàn bộ / khởi động vì phụ thuộc chưa được đáp ứng


43

Tôi nhận được một thông báo lỗi giải thích / boot của tôi đã đầy. cố gắng dọn sạch các tập tin hình ảnh cũ dường như luôn thất bại vì lỗi đầy đĩa hoặc lỗi phụ thuộc. Ai đó có thể giải thích tôi đang đi sai ở đâu.

$ 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

Tôi đã sử dụng

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

để có được

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

Sau đó chọn hình ảnh đầu tiên để loại bỏ

$ 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).

Vui lòng chỉnh sửa câu hỏi của bạn và đầu ra của sudo apt-get autoremovels /boot.
muru

Hãy thử câu trả lời của Phrog. Sử dụng uname -rlệnh để tìm ra phiên bản kernel hiện tại của bạn và thử loại bỏ kernel khác.
muru

Câu trả lời:


64

Trong trường hợp như vậy tôi sẽ sử dụng dpkgcông cụ để buộc loại bỏ một số gói kernel. Điều này không được đề xuất cho sử dụng phổ biến và hơi nguy hiểm , nhưng trong trường hợp như vậy với các phụ thuộc không được đáp ứng có thể giúp đỡ.

Trước hết, xác định vị trí kernel trong đó hệ thống được khởi động. Một trong đó hiện đang được tải. Mở một thiết bị đầu cuối (CTRL + ALT + T) và ban hành lệnh sau

uname -r

Nó sẽ hiển thị cho bạn kernel đã tải, bạn KHÔNG nên cố gắng loại bỏ kernel này.

Sau đó ban hành lệnh

ls /boot 

nó sẽ trả về tất cả các hình ảnh được cài đặt. Chọn một hoặc hai và cố gắng loại bỏ chúng. Cố gắng buộc loại bỏ / thanh lọc chúng. Ví dụ

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

Bạn có thể làm tương tự cho các hình ảnh khác, để giải phóng không gian.

Sau đó, bạn có thể thử cài đặt các gói còn thiếu hoặc

sudo apt-get install -f 

để cố gắng giải quyết các phụ thuộc.

Cuối cùng, ban hành lệnh "dọn dẹp hạt nhân cũ"

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

Lệnh trên sẽ loại bỏ TẤT CẢ các hạt nhân ngoại trừ hạt nhân hiện đang được tải.

Vì bạn có một phân vùng khởi động / riêng biệt, hãy nhớ rằng bạn sẽ cần theo dõi không gian của nó và dọn dẹp thường xuyên (tần suất phụ thuộc vào không gian của / boot)


1
Xin chào khi tôi cố gắng xóa chúng, tôi gặp lỗi sudo dpkg --force-all -P abi-3.13.0-32-generic dpkg: đã cài đặt
Philip Howard

9
Điều này làm việc cho tôi, với một sửa đổi: sau khi gỡ bỏ hình ảnh hạt nhân với dpkg, tôi đã phải chạy sudo apt-get -f autoremoveđể có được apt-getngừng phàn nàn về sự phụ thuộc chưa được đáp ứng. Mặt khác, sudo apt-get -f installrõ ràng là tiếp tục cố gắng cài đặt lại tất cả các hình ảnh hạt nhân mà tôi đã loại bỏ dpkg, mà rõ ràng là chỉ cần lấp đầy /bootlại.
mdunsmuir

4
Sau khi thanh trừng lực lượng và apt-get -f autoremovenhận xét trong @mdunsmuir ở trên, nó vẫn muốn cài đặt tất cả các hạt nhân cũ trong bất kỳ hoạt động dọn dẹp nào ở trên. Có cách nào để chỉ bảo nó bỏ qua các phụ thuộc không liên quan và loại bỏ một kernel cũ hoàn chỉnh không?
NKijak

3
Tôi muốn thêm rằng tôi cũng phải gỡ cài đặt các tính năng bổ sung sudo dpkg --force-all -P linux-image-extra-3.13.0-32-generic. Nếu không, các tính năng bổ sung này vẫn phụ thuộc vào hình ảnh thực tế và -fcờ sẽ khiến hình ảnh được cài đặt lại và sau đó hết dung lượng đĩa.
Ghostkeeper

1
@LonnieBest Tôi đồng ý. Ngược lại, Arch Linux chỉ giữ một dự phòng. Fedora dường như không có vấn đề này.
Franklin Yu

5

Đây là những gì làm việc cho tôi trên Ubuntu 16.04.

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

Phương pháp này làm việc cho tôi.
Bok

2

Liệt kê tất cả các hạt nhân:

dpkg --list 'linux-image*'

Hiển thị kernel hiện tại:

uname -r

Liệt kê tất cả các hạt nhân NGOẠI TRỪ hiện tại:

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

Hãy chắc chắn rằng kernel hiện tại của bạn không có trong danh sách đó.

Loại bỏ tất cả các nhân EXCEPT hiện tại:

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

Xóa các thứ khác:

sudo apt-get autoremove

Nếu nó vẫn cung cấp cho bạn lỗi không gian đĩa khởi động để cài đặt / gỡ cài đặt tệp thì xóa trực tiếp một trong những hình ảnh cũ khỏi thư mục / boot, ls -lh /boot/*-3.13.0-119*; rm /boot/*-3.13.0-119*; LƯU Ý: Vui lòng xem lại hình ảnh hạt nhân hiện tại một lần nữa trước khi xóa bất kỳ hình ảnh.
Hemant Thorat

Vẫn phàn nàn rằng nó có những người phụ thuộc chưa được đáp ứng
Matiss Jurgelis
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.