이전 커널을 제거할 수 없지만(종속성 문제) /boot에 공간이 부족합니다.

이전 커널을 제거할 수 없지만(종속성 문제) /boot에 공간이 부족합니다.

저는 Ubuntu 14.04.4 LTS를 실행 중이고 apt-get을 사용하여 새 패키지를 설치하려고 합니다. 불행히도 시도할 때마다 다음과 같은 메시지가 나타납니다.

The following packages have unmet dependencies:
 linux-image-extra-3.16.0-70-generic : Depends: linux-image-3.16.0-70-generic but it is not going to be installed
 linux-image-generic-lts-utopic : Depends: linux-image-3.16.0-70-generic but it is not going to be installed
 linux-signed-image-3.16.0-70-generic : Depends: linux-image-3.16.0-70-generic (= 3.16.0-70.90~14.04.1) but it is not going to be installed

구글링 좀 하다가 알아낸건데이는 부팅 파티션의 공간 부족으로 인해 발생할 수 있습니다.(물론 100%로 df표시됩니다 /boot). 그러나 허용된 답변에서 명령을 실행하려고 할 때마다 apt-get위와 같은 오류가 발생합니다.

을 사용하지 않은 다른 솔루션을 찾다가 apt-get발견했습니다.이 게시물sudo dpkg --purge linux-image-4.2.0-15-generic, 오래되고 사용되지 않는 커널 과 같은 것을 사용하는 것이 좋습니다 .

dpkg -l | tail -n +6 | grep -E 'linux-image-[0-9]+' | grep -Fv $(uname -r)(앞서 언급한 게시물에서) 상태에 여러 개의 오래된 커널이 있음을 보여줍니다 pi(원하는 제거, 상태는 다음에 따라 설치됨).이것)

uname -r내가 실행 중인 커널이 3.16.0-62-generic이라는 메시지가 표시되므로 이러한 이전 커널을 제거해도 안전할 것이라고 생각했습니다. 그러나 다음과 같은 sudo dpkg --purge linux-image-3.16.0-49-generic결과를 얻으려고 하면 다음과 같은 결과가 발생합니다.

dpkg: error processing package linux-image-3.16.0-49-generic (--purge):
 dependency problems - not removing
Errors were encountered while processing:
 linux-image-3.16.0-49-generic

가르그! 나는 어찌할 바를 모르고 (dpkg나 apt-get에 대해 잘 알지 못함) 도움이 필요합니다.

질문:

  1. 를 사용하여 이전 커널을 제거할 수 없는 이유는 무엇입니까 dpkg?

  2. 해당 질문을 직접적으로 해결할 수 없다면 궁극적으로 다음 사항을 알고 싶습니다.새 패키지를 다시 설치할 수 있는 상태가 되려면 어떻게 해야 합니까?


내가 시도한 다른 것들:

  • sudo apt-get autoremove: 충족되지 않은 종속성에 대한 원래 오류가 발생합니다.
  • sudo apt-get -f autoremove: 결과:
linux-image-3.16.0-70-generic (3.16.0-70.90~14.04.1) 압축 풀기...
dpkg: 아카이브 /var/cache/apt/archives/linux-image-3.16.0-70-generic_3.16.0-70.90~14.04.1_amd64.deb 처리 중 오류가 발생했습니다(--unpack):
 './boot/vmlinuz-3.16.0-70-generic'에 대해 추출된 데이터를 '/boot/vmlinuz-3.16.0-70-generic.dpkg-new'에 복사할 수 없습니다. 쓰기에 실패했습니다(장치에 남은 공간이 없습니다).
오류 메시지가 디스크 가득 참 오류를 나타내기 때문에 승인 보고서가 작성되지 않았습니다.
                                                                              dpkg-deb: 오류: 하위 프로세스 붙여넣기가 신호에 의해 종료되었습니다(깨진 파이프).
/etc/kernel/postrm.d 검사하기.
실행 부분: /etc/kernel/postrm.d/initramfs-tools 3.16.0-70-generic /boot/vmlinuz-3.16.0-70-generic 실행
실행 부분: /etc/kernel/postrm.d/zz-update-grub 3.16.0-70-generic /boot/vmlinuz-3.16.0-70-generic 실행
처리하는 동안 오류가 발생했습니다:
 /var/cache/apt/archives/linux-image-3.16.0-70-generic_3.16.0-70.90~14.04.1_amd64.deb
E: 하위 프로세스 /usr/bin/dpkg가 오류 코드(1)를 반환했습니다.

메모: 이 질문을 다음에서 이전했습니다."유닉스 & 리눅스 스택 교환"

답변1

uname -r현재 실행 중인 커널을 표시하는 데 사용됩니다 . 이 버전 번호가 있는 항목은 삭제하지 마세요.

커널이 속한 패키지를 찾을 수 있습니다 /boot.

for i in /boot/vmlinuz* ; do 
    dpkg -S $i| egrep -v $(uname -r)
done

다음을 사용하여 이러한 패키지를 제거할 수 있습니다.sudo apt-get purge 패키지 이름 ....

버전 번호가 동일한 다른 패키지를 검색하면 삭제할 커널과 관련된 더 많은 패키지를 찾을 수 있습니다.

버전 번호를 추출하려면 다음 안내를 따르세요.

for i in /boot/vmlinuz* ; do 
    dpkg -S $i | egrep -v $(uname -r)
done |cut -d- -f3-4  

버전 번호가 동일한 다른 패키지를 찾으려면 다음 안내를 따르세요.

for j in $(
    for i in /boot/vmlinuz* ; do 
        dpkg -S $i| egrep -v $(uname -r)
    done |cut -d- -f3-4 ) ; 
do 
     dpkg -l "*$j*" | egrep '^ii|^rc'
done  

현재 커널을 제외한 모든 커널과 삭제된 커널과 버전이 일치하는 모든 패키지를 자동으로 삭제하려면(위험, 윌 로빈슨):

간단히 추가하세요

| awk '{print $2}' | xargs sudo apt-get --dry-run purge

이전 코드 조각으로. 원하는 대로 작동한다고 확신하면 를 제거하세요 --dry-run.

공간이 너무 꽉 차서 패키지를 삭제할 수 없는 경우 가장 오래된 파일을 제거하여 /boot공간을 확보할 수 있습니다 ./boot/boot/initrd.img*

관련 정보