apt-get autoremove가 왜 이전 커널을 제거하지 않습니까?


53

부팅 파티션이 SSD에 있으므로 약 8 개 이상의 설치된 커널 버전을위한 공간이 없으므로 부팅 파티션에 이전 버전이 가득 차서 일부 커널 업데이트가 설치되지 않습니다. 이전 버전을 제거하는 방법 (프로세스를 자동화하는 방법조차도)에 대한 많은 질문이 있지만 내 질문은 간단합니다. 자동으로 감지하고 제거 하지 않는 이유는 무엇apt-get autoremove 입니까? 내 말은, apt-get어쨌든 그것들을 설치 한 것이므로 그들에 대해 알고 있기 때문에 왜 이전 버전을 모두 남기도록 선택합니까?



1
Autoremove는 않습니다 대부분의 경우 기존 커널을 제거합니다. 시스템이 기본적으로 자동 제거를 자동으로 실행하지 않기 때문에 커널이 누적됩니다. 무인 업그레이드의 설정이며 변경할 수 있습니다. 공간이 부족하여 이전에 대기 한 적절한 조치 (예 : 새 커널 설치)가 실패하면 자동 제거 기능을 사용하여 이전 커널을 제거 할 수 없습니다. 참조 bugs.launchpad.net/bugs/1357093 무인 업그레이드에 패치 됩니다 자동으로 이전 커널을 제거하기 시작합니다.
user535733

답변:


36

이유에 대한 답은 파일을 참조하십시오. /etc/apt/apt.conf.d/01autoremove-kernels

여기에 이미지 설명을 입력하십시오

보시다시피, apt는 다른 (스크립트) 파일에서 알 수 있듯이 커널을 자동 제거하지 말라고 지시합니다 /etc/kernel/postinst.d/apt-auto-removal. 그리고 여기 있습니다 :

여기에 이미지 설명을 입력하십시오

선택한 커널 2 개 (예 : 첫 번째 커널과 현재 커널)를 수동으로 설치하는 경우 apt-autoremove는 수동으로 설치하지 않은 이전 버전 만 제거하므로 항상 2 개의 옵션과 최신 커널을 선택하십시오.

최신 정보:

에서 /etc/kernel/postinst.d/apt-auto-removal이 부분이 있습니다 :

if [ "$latest_version" != "$installed_version" ] \
   || [ "$latest_version" != "$running_version" ] \
   || [ "$installed_version" != "$running_version" ]
then
        # We have at least two kernels that we have reason to think the
        # user wants, so don't save the second-newest version.
        previous_version=
fi

따라서 01autoremove-kernels파일 의 출력을 비교하면 uname -r현재 실행중인 커널과 가장 최근의 커널은 해당 스크립트에 의해 제거되지 않습니다. 행이있는 또 다른 파일 /etc/apt/apt.conf.d/01autoremove이 있습니다.

    APT
    {
      NeverAutoRemove
      {
            "^firmware-linux.*";
            "^linux-firmware$";
      };
  VersionedKernelPackages
  {
        # linux kernels
        "linux-image";
        "linux-headers";
        "linux-image-extra";
        "linux-signed-image";
        # kfreebsd kernels
        "kfreebsd-image";
        "kfreebsd-headers";
        # hurd kernels
        "gnumach-image";
        # (out-of-tree) modules
        ".*-modules";
        ".*-kernel";
        "linux-backports-modules-.*";
        # tools
        "linux-tools";
  };

그래서 당신은 이것들을 주석 처리 할 수 ​​있으며 apt-autoremove, 커널을 자동으로 제거 할 수는 있지만 기억하십시오.


1
매우 흥미로운! 내 제품 /etc/apt/apt.conf.d/01autoremove-kernels에는 여러 줄이 있지만 그 중 두 가지 버전 만 있습니다 : 3.13.0. {39,43}. 그러나 dpkg -l linux-*3.13.0. {39,40,41,43}의 네 가지 버전을 보여 주므로 /etc/apt/apt.conf.d/01autoremove-kernels중간 버전을 유지하는 것 외에 다른 것이 있습니까?
BlueBomber 2014

1
TL : DR : 01autoremove당신이 원하는 파일이며, 01autoremove-kernels아마도 보호 일 것입니다. 따라서 apt는 현재 설치된 커널과 가장 최근에 설치된 최신 커널을 제거하지 않습니다.
Sergiy Kolodyazhnyy

1
내가 잘못 읽지 않는 한 01autoremove, 그것은 같은 의존성 패키지의 자동 제거를 막는 것 linux-image-extra입니다. 변경해도 자동 제거 여부에 영향을 미치지 않습니다 linux-image-3.16.0-31-generic. 자동 제거하려는 패키지 이름과 일치하는 패턴이 없습니다.
Peter Cordes

1
@PeterCordes에서 행을 제거하거나 주석 처리하지 마십시오 /etc/apt/apt.conf.d/01autoremove. 이전 버전의 커널 패키지를 자동으로 제거하는 데 도움이되지 않지만 원치 않는 영향을 줄 수 있습니다. 파일은 자동 제거를 방지하지 않지만 섹션의 linux-image-extra정규식과 일치하는 패키지입니다 NeverAutoRemove.
jarno

2
@BlueBomber, apt-get autoremove목록에없는 커널을 제거하지 않는 이유 는 /etc/apt/apt.conf.d/01autoremove-kernels해당 커널이 수동으로 설치된 것으로 표시되어 있기 때문입니다. 내 대답을 참조하십시오 .
jarno

8

나를 위해 최신 (X) 우분투 (15.10)를 설치하는 데 도움이되었습니다. 이전 릴리스에서는 최소한 Software Updater를 사용하여 설치 한 경우 커널 패키지를 수동으로 설치 한 것으로 표시되어 sudo apt-get autoremove --purge삭제할 수 없습니다. 이 문제와 관련된 버그 보고서가 있습니다 : 버그 # 1175637 , 버그 # 1439769

이전 릴리스 에서는 차이가 있는지 확인 하기 위해 커널 패키지가 자동으로 설치되고 그 이후에 sudo apt-mark auto $(apt-mark showmanual | grep -E "^linux-([[:alpha:]]+-)+[[:digit:].]+-[^-]+(|-.+)$")실행되도록 표시 할 수있었습니다 sudo apt-get autoremove --purge. 이 명령은 여전히 /etc/apt/apt.conf.d/01autoremove-kernels에 표시된 커널 패키지를 제거하지 말아야하지만, 실행하는 가장 안전 apt-get autoremove--dry-run첫 번째 옵션.


아, autoremove 명령은 너무 많은 커널을 제거하는 경향이 있습니다. 버그 # 1440608
jarno

1
그것은 apt-mark나를 위해 속임수를 썼다, 내가 10 번 투표 할 수 있었으면 좋겠다 : P
Mike Gleason jr Couturier
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.