충족되지 않은 종속성으로 인해 전체 / 부팅을 정리할 수 없습니다


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 autoremovels /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]+//')")

위의 명령은 현재로드 된 커널을 제외한 모든 커널을 제거합니다.

별도의 / boot 파티션이 있으므로 공간을 추적하고 자주 정리해야합니다 (빈도는 / boot의 공간에 따라 다름)


1
안녕하세요 그들을 제거하려고하면 오류 sudo dpkg --force-all -P abi-3.13.0-32-generic 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플래그로 인해 이미지가 다시 설치되어 디스크 공간이 부족해질 수 있습니다.
유령지기

1
@LonnieBest 동의합니다. 대조적으로, 아치 리눅스는 하나의 폴백을 유지합니다. Fedora에도이 문제가없는 것 같습니다.
Franklin Yu

5

이것이 우분투 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

여전히 불충분 한 의존성이 있다고 불평합니다
Matiss Jurgelis
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.