CentOS 7에서 커널 경쟁으로 인해 이상한 증상이 나타날 수 있습니다. 그렇다면 오래된 커널을 어떻게 안전하게 제거합니까? 어떤 커널이 최신인지 어떻게 알 수 있나요?
다음은 문제의 서버에서 이 문제를 조사하는 동안 얻은 터미널 출력입니다. 패키지 정리를 시도했지만 동일한 2개의 코어가 남았습니다.
이 튜토리얼의 지침다음 두 명령의 출력이 일치해야 하지만 재부팅 후에도 일치하지 않는 것을 볼 수 있다고 가정합니다.
[root@localhost ~]# rpm -qa kernel |sort -V |tail -n 1
kernel-3.10.0-229.el7.x86_64
[root@localhost ~]# uname -r
3.10.0-229.14.1.el7.x86_64
나머지 명령은 두 개의 코어가 있는지 확인하고 이전 코어를 제거하려는 시도를 설명합니다.
[root@localhost ~]# cd /usr/src/kernels
[root@localhost kernels]# ls -al
total 16
drwxr-xr-x. 4 root root 4096 Oct 2 12:55 .
drwxr-xr-x. 4 root root 4096 Oct 2 13:15 ..
drwxr-xr-x. 22 root root 4096 Oct 2 12:55 3.10.0-229.14.1.el7.x86_64
drwxr-xr-x. 22 root root 4096 Oct 2 12:35 3.10.0-229.el7.x86_64
[root@localhost kernels]# rpm -q kernel
kernel-3.10.0-229.el7.x86_64
kernel-3.10.0-229.14.1.el7.x86_64
[root@localhost kernels]# package-cleanup --oldkernels=1
Loaded plugins: fastestmirror
Usage:
package-cleanup: helps find problems in the rpmdb of system and correct them
usage: package-cleanup --problems or --leaves or --orphans or --oldkernels
Command line error: --oldkernels option does not take a value
[root@localhost kernels]# package-cleanup --oldkernels
Loaded plugins: fastestmirror
No old kernels to remove
[root@localhost kernels]# rpm -q kernel
kernel-3.10.0-229.el7.x86_64
kernel-3.10.0-229.14.1.el7.x86_64
[root@localhost kernels]#
또한 이를 켜고 /etc/yum.conf
설정했지만 이로 인해 후속 명령에서 1이 허용 가능한 값 범위를 벗어났다는 installonly_limit=1
오류가 발생했습니다 . yum update
installonly_limit
이게 3.10.0-229.14.1.el7.x86_64
최신인 것 같은데 어떻게 알 수 있나요? 또한 부팅 옵션은 선택할 수 있는 여러 코어를 제공하는 것으로 보입니다. 시스템이 옵션 목록의 첫 번째 커널에서 자동으로 부팅되면 혼란이 발생할 가능성이 더욱 심각해집니다.
누군가 이것이 어떻게 작동하는지 설명할 수 있습니까? 구체적으로, 이상한 증상의 원인이 될 수 있는 커널 버전을 제거하기 위해 이전 커널을 안전하게 제거하려면 어떻게 해야 합니까? 시스템이 어떻게 재부팅되든 최신 커널만 실행되도록 하고 싶습니다.
답변1
package-cleanup --oldkernels --count=1
최신 커널을 제외한 모든 커널을 제거합니다.
답변2
RHEL 및 CentOS >= 8(및 DNF가 있는 Fedora).
RHEL 8+는 새로운 패키지 관리자(DNF/yum 4, 참조)를 사용합니다.냠 2DNF) 그 중 권장 사항은 다음과 같습니다.
dnf remove $(dnf repoquery --installonly --latest-limit=-2)
--latest-limit=-2
마지막 두 버전(현재 버전과 이전 버전)을 유지하는 것을 의미합니다.
--latest-limit=-1
현재 항목을 제외한 모든 항목이 삭제됩니다.
yum remove --oldinstallonly
커널(?) 뿐만 아니라 기존 설치 전용 패키지도 제거 가능합니다 .
(이 명령에는 dnf가 필요합니다.>= 4.2.17-4
버그 #1774670)
이전 RHEL 및 CentOS(<=7)
이 명령은 package-cleanup
yum <4를 사용하여 이전 커널을 제거하는 데 사용됩니다. --count=1
최신 정보만 유지하는 데 사용됩니다 . 프로그램은 현재 사용되는 커널을 제거하지 않으므로("실행 중인 커널이므로 커널 3.10.0-327.el7을 제거하지 마십시오") 재부팅하고 재부팅할 때까지 /boot에 두 개의 커널이 남을 수 있습니다. 명령을 실행하십시오.
그래서 명령은
package-cleanup --oldkernels --count=1
맨페이지에는 세 가지 옵션이 문서되어 있습니다.
--oldkernels
Remove old kernel and kernel-devel packages.
--count <COUNT>
Number of duplicate/kernel packages to keep on the system (default 2)
--keepdevel
Do not remove kernel-devel packages when removing kernels
답변3
Centos 8 이상(Yum 버전 4)의 경우 다음 명령을 사용할 수 있습니다.
yum remove --oldinstallonly
그러면 이전 버전의 커널이 모두 제거됩니다. 최신 릴리스 버전의 커널을 원할 때 사용하십시오.
답변4
~에 따르면이것:
rpm -q kernel
설치된 커널을 표시하려면 실행하세요 .
yum remove kernel <shown kernel from output above>
그런 다음 커널 제거를 실행하십시오 .
컴퓨터를 다시 시작하세요
편집: 이것은 실제로 @Ron의 질문에 적용되지만 elrepo 커널이 올바르게 실행되고 있는지 확인하십시오.