'apt'는 몇 개의 오래된 커널을 유지할지를 어떻게 결정합니까?


23

핵심 서비스 (NTP, DNS 등)를 위해 몇 대의 서버를 관리하고 있으며 서버 중 하나가 다른 커널 대신 2 개의 최신 커널을 유지하는 것처럼 보입니다.

nul@quark:~$ sudo apt-get autoremove --purge
Reading package lists... Done
Building dependency tree       
Reading state information... Done
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
nul@quark:~$ dpkg -l |grep linux-image
ii  linux-image-3.13.0-51-generic       3.13.0-51.84                     amd64        Linux kernel image for version 3.13.0 on 64 bit x86 SMP
ii  linux-image-3.13.0-52-generic       3.13.0-52.85                     amd64        Linux kernel image for version 3.13.0 on 64 bit x86 SMP
ii  linux-image-3.16.0-37-generic       3.16.0-37.49~14.04.1             amd64        Linux kernel image for version 3.16.0 on 64 bit x86 SMP
ii  linux-image-extra-3.13.0-51-generic 3.13.0-51.84                     amd64        Linux kernel extra modules for version 3.13.0 on 64 bit x86 SMP
ii  linux-image-extra-3.13.0-52-generic 3.13.0-52.85                     amd64        Linux kernel extra modules for version 3.13.0 on 64 bit x86 SMP
ii  linux-image-extra-3.16.0-37-generic 3.16.0-37.49~14.04.1             amd64        Linux kernel extra modules for version 3.16.0 on 64 bit x86 SMP
ii  linux-image-generic                 3.13.0.52.59                     amd64        Generic Linux kernel image
ii  linux-image-generic-lts-utopic      3.16.0.37.29                     amd64        Generic Linux kernel image

...

nul@dwarf:~$ sudo apt-get autoremove --purge
Reading package lists... Done
Building dependency tree       
Reading state information... Done
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
nul@dwarf:~$ dpkg -l |grep linux-image
ii  linux-image-3.13.0-52-generic       3.13.0-52.85                     amd64        Linux kernel image for version 3.13.0 on 64 bit x86 SMP
ii  linux-image-3.16.0-37-generic       3.16.0-37.49~14.04.1             amd64        Linux kernel image for version 3.16.0 on 64 bit x86 SMP
ii  linux-image-extra-3.13.0-52-generic 3.13.0-52.85                     amd64        Linux kernel extra modules for version 3.13.0 on 64 bit x86 SMP
ii  linux-image-extra-3.16.0-37-generic 3.16.0-37.49~14.04.1             amd64        Linux kernel extra modules for version 3.16.0 on 64 bit x86 SMP
ii  linux-image-generic                 3.13.0.52.59                     amd64        Generic Linux kernel image
ii  linux-image-generic-lts-utopic      3.16.0.37.29                     amd64        Generic Linux kernel image

모든 서버는 동일하게 유지 관리되며 내가 무엇을 할 수 있는지 모르고 어딘가에 매개 변수가 있어야하지만 찾을 수 없습니다!

나의 호기심을 먹이십시오! 고맙습니다

답변:


32

자동 제거 apt-get할 커널과 유지할 커널을 알려주는 파일이 자동으로 생성됩니다 . 어떤 커널인지는 어떤 커널 에서 생성되는지
알려주는 파일입니다 . apt-get/etc/apt/apt.conf.d/01autoremove-kernels/etc/kernel/postinst.d/apt-auto-removal

일반적으로 커널 업데이트를 수신 할 때 커널 버전 변경 (예 : 3.13to 3.16) /etc/apt/apt.conf.d/01autoremove-kernels3.16*커널 을 유지하도록 업데이트 된 다음 3.13생성 스크립트에서 지정하지 않으면 모든 커널 을 제거하도록 설정 됩니다.

로부터 apt-auto-removal스크립트 :

# 저자 : Steve Langasek 
#
# 다음과 같은 커널 패키지를 비 자동 제거로 표시하십시오.
#-현재 부팅 된 버전
#-우리가 요청한 커널 버전
#-최신 커널 버전 (그럽에서 복사 한 규칙을 사용하여 결정됨)
# 부팅 할 커널을 결정하기위한 패키지)
#-부팅 된 커널 버전이 다음 인 경우 두 번째 최신 커널 버전
# 이미 최신이며이 스크립트는 동일한 버전으로 호출됩니다.
# 새로 설치 한 경우 폴백을 계속 사용할 수 있도록합니다.
#이 ABI의 커널이 부팅되지 않습니다
# 일반적으로 정확히 두 개의 커널이 저장되지만
# 3 개의 커널이 저장됩니다. 측면에서 잘못하는 것이 좋습니다
# 너무 적게 저장하는 것보다 너무 많은 커널을 저장합니다.
#
# 우리는이 목록을 생성하여 표시 대신 /etc/apt/apt.conf.d에 저장
postinst 스크립트에서 실행되기 때문에 데이터베이스의 패키지 # 개
# 종료시 db를 덮어 씁니다.

그러나 일부 코딩이이 문제를 방지하기 위해 버전을 변경했기 때문에 자동 제거로 표시되지 않는 경우가 있습니다.

autoremove스크립트를 기반으로 필요한 커널을 제외하고 이전 커널을 표시하려면 터미널 창에서 다음 명령을 실행하십시오.

sudo apt-mark auto ^linux-image-

그런 다음 apt-get autoremove명령 을 실행할 때 오래되고 더 이상 필요하지 않은 명령 만 제거 할 수 있습니다. 아래에 예를 넣었습니다.

첫 번째 것은 시스템의 모든 커널에서 현재 실행중인 커널을 뺀 것입니다.

root @ terrance-Linux : / home / share # dpkg -l 'linux- *'| sed '/ ^ ii /! d; /' "$ (uname -r | sed"s /\(.*\)-\([^ 0-9] \ + \) / \ 1 / ")" '/ d; s / ^ [^] * [^] * \ ([^] * \). * / \ 1 /; / [0-9] /! d '
리눅스 헤더 -3.16.0-34
리눅스 헤더 -3.16.0-34- 일반
리눅스 헤더 -3.16.0-36
리눅스 헤더 -3.16.0-36- 일반
리눅스 헤더 -3.16.0-37
리눅스 헤더 -3.16.0-37- 일반
linux-headers-4.0.0-040000
linux-headers-4.0.0-040000- 일반
linux-image-3.16.0-34- 일반
linux-image-3.16.0-36- 일반
linux-image-3.16.0-37- 일반
linux-image-4.0.0-040000- 일반
linux-image-extra-3.16.0-34- 일반
linux-image-extra-3.16.0-36- 일반
linux-image-extra-3.16.0-37- 일반

이것은 현재 실행중인 커널을 보여줍니다.

terrance @ terrance-Linux : ~ $ uname -r
4.0.1-040001- 일반
terrance @ terrance-Linux : ~ $ sudo apt-get 자동 제거
[sudo] terrance의 비밀번호 : 
패키지 목록을 읽는 중 ... 완료
의존성 트리 구축       
상태 정보를 읽는 중 ... 완료
0 업그레이드, 0 새로 설치, 0 제거 및 0 업그레이드되지 않음
terrance @ terrance-Linux : ~ $ sudo apt-mark auto ^ linux-image-
linux-image-extra-3.16.0-33-generic은 설치되지 않았으므로 표시 할 수 없습니다.
linux-image-extra-3.13.0-27-generic은 설치되지 않았으므로 표시 할 수 없습니다.
linux-image-3.13.0-44-lowlatency는 설치되지 않았으므로 표시 할 수 없습니다.
linux-image-3.13.0-27-generic은 설치되지 않은 것으로 표시 할 수 없습니다.
linux-image-3.16.0-31-lowlatency는 설치되지 않았으므로 표시 할 수 없습니다.
linux-image-3.16.0-36-generic은 자동으로 설치되도록 설정되었습니다.
linux-image-lowlatency-lts-utopic은 설치되지 않았으므로 표시 할 수 없습니다.
linux-image-extra-3.13.0-36-generic은 설치되지 않았으므로 표시 할 수 없습니다.
linux-image-3.13.0-36-generic은 설치되지 않았으므로 표시 할 수 없습니다.
linux-image-4.0.0-040000-generic은 자동으로 설치되도록 설정되었습니다.
linux-image-extra-3.13.0-45-generic은 설치되지 않았으므로 표시 할 수 없습니다.
linux-image-3.16.0-25-generic은 설치되지 않은 것으로 표시 할 수 없습니다.

참고 : 위의 목록이 너무 길어서 목록이 잘리지 않았습니다.

terrance @ terrance-Linux : ~ $ sudo apt-get 자동 제거
패키지 목록을 읽는 중 ... 완료
의존성 트리 구축       
상태 정보를 읽는 중 ... 완료
다음 패키지가 제거됩니다.
  linux-image-3.16.0-34-generic linux-image-3.16.0-36- 일반
  linux-image-4.0.0-040000-generic linux-image-extra-3.16.0-34- 일반
  linux-image-extra-3.16.0-36- 일반
0 업그레이드, 0 새로 설치, 5 제거 및 0 업그레이드되지 않음
이 작업 후에 613MB의 디스크 공간이 확보됩니다.
계속 하시겠습니까? [Y / n]

따라서 해당 명령을 실행 한 후 현재 커널 (4.0.1-040001-generic)을 제외한 모든 이전 커널 (4.0.1-040001-generic)과 최신 커널 (3.16.0-37-generic)을 모두 자동으로 제거 할 수 있습니다.

잘하면 이것이 도움이됩니다.


우분투는 기본적으로 자동 제거를하지 않습니까? 우리는 옵션을 가지고 있지만 "원치 않는"커널이 무엇인지 결정하는 것은 여전히 ​​불가능한 것으로 간주되었습니다 (다른 운영 체제에서 "원치 않는"는 "사용되지 않은"과 동일 함).
Rinzwind

승인. 나는 그 비트에 대한 귀하의 게시물을 잘못 읽었습니다 ;-)
Rinzwind

1
@Terrance 나는 패스하려고 sudo apt-mark auto ^linux-image-다음에 sudo apt-get autoremove --purge하지만 아무 소용; 그러나 약간 dist-upgrade수정 된 2 개의 커널 (3.13.0-52 및 3.16.0.37)과 다음 autoremove은 3.13.0-51을 제거했습니다.
ionreflex

1
@ionreflex 다행이다. 모든 답변이 완벽하지는 않으며 모든 사람에게 적합하지 않을 수도 있습니다. 그러나 나는 당신과 같은 사람들이 약간의 문제 해결을하고 그것들을 제거하는 방법을 알아낼 수 있다는 것이 좋습니다. 나는 dist-upgrade당신이 도망친 것을 쫓아 낸 /etc/kernel/postinst.d/apt-auto-removal다음 /etc/apt/apt.conf.d/01autoremove-kernels유지할 것을 알려주는 것을 생각하고 있습니다.
Terrance

1
@Terrance 내가 dist-upgrade전에 한 일을 확신 하지만, 오늘 아침에 커널이 업그레이드되었다는 사실이 트릭을 수행했을 수도 있습니다. 어쨌든, 응원하고 답장을 보내 주셔서 감사합니다.
ionreflex
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.