목차

RHEL /boot 용량 부족해결을 위한 오래된 커널 제거

장기간 업데이트를 받은 시스템은 오래된 커널이 많이 남아있는경우가 있는데 오래된 커널을 삭제하는 방법을 소개한다.
리눅스(RHEL) 시스템은 커널 업데이트 시 만약의 사태(부팅 실패 등)를 대비해 이전 버전의 커널을 몇 개 남겨두도록 설정되어 있습니다.
RHEL 9의 기본 설정은 최신 커널을 포함해 총 3개의 커널을 유지하는 것인데, 최신 커널 버전들이 커지면서 /boot 공간이 부족해져 새로운 커널을 설치할 공간이 나오지 않는 것입니다.

(67/69): libvirt-daemon-driver-storage-scsi-11.10.0-12.3.el9_8.x86_64.rpm       169 kB/s |  45 kB     00:00
(68/69): python3-perf-5.14.0-687.13.1.el9_8.x86_64.rpm                           12 MB/s | 2.5 MB     00:00
(69/69): kernel-headers-5.14.0-687.13.1.el9_8.x86_64.rpm                        7.5 MB/s | 2.7 MB     00:00
-----------------------------------------------------------------------------------------------------------
Total                                                                            14 MB/s | 151 MB     00:10
Running transaction check
Transaction check succeeded.
Running transaction test
The downloaded packages were saved in cache until the next successful transaction.
You can remove cached packages by executing 'dnf clean packages'.
Error: Transaction test error:
  installing package kernel-core-5.14.0-687.13.1.el9_8.x86_64 needs 4MB more space on the /boot filesystem

Error Summary
-------------
Disk Requirements:
   At least 4MB more space needed on the /boot filesystem.

[root@kvm33 ~]# df -hP
Filesystem                   Size  Used Avail Use% Mounted on
devtmpfs                     252G     0  252G   0% /dev
tmpfs                        252G     0  252G   0% /dev/shm
tmpfs                        101G  9.8M  101G   1% /run
efivarfs                     128K   46K   78K  37% /sys/firmware/efi/efivars
/dev/mapper/rhel_kvm33-root  107G   14G   93G  13% /
/dev/sda2                    960M  918M   43M  96% /boot
/dev/mapper/vg_nvme-lv_nvme  3.8T  1.3T  2.6T  33% /data
/dev/sda1                    599M  7.7M  592M   2% /boot/efi
tmpfs                         51G   36K   51G   1% /run/user/0
[root@kvm33 ~]#

위의 사례를 보면 /boot 영역의 사용량이 96%에 달해 dnf update가 실패한 모습입니다.
이런경우 오래된 커널을 삭제해 공간을 확보해줘야 합니다.

방법은 2가지가 있는데

  1. 수동으로 패키지를 삭제하는 방법
  2. 자동으로 패키지를 삭제하는 방법

이 있다. 당연한 얘기지만 자동삭제가 편하고 깔끔하다.

수동 제거 방법

먼저 설치된 커널 패키지를 확인한다.

# rpm -q kernel
kernel-3.10.0-957.el7.x86_64
kernel-3.10.0-1062.7.1.el7.x86_64

조회된 커널 패키지 중 삭제하고자 하는 예전 패키지를 수동으로 제거한다.

# rpm -e kernel-3.10.0-957.el7

주의할 점은 절대 현재 사용중인 커널 패키지를 삭제하면 안된다는것이다.

수동 삭제의 단점은 동일한 버전에 포함된 kernel-devel패키지같은것도 수동으로 지워야 한다는것이다.
관련 의존성 패키지는 삭제되지 않는다.

자동 제거 방법

yum-utils 또는 dnf-utils 패키지의 package-cleanup 명령어를 이용하는 방법이다. package-cleanup 명령어가 없는경우 yum-utils패키지를 먼저 설치한다.

RHEL 8 버전

# yum install yum-utils

# package-cleanup --oldkernels --count=1

–count= 인수는 남겨둘 커널갯수이다. 1인경우 현재 사용중인 커널만 남겨둔다. 기본값은 2 이다.

RHEL 9 버전

# dnf remove --oldinstallonly --setopt=installonly_limit=2 kernel

재발 방지를 위한 설정(선택사항)

앞으로 커널 업데이트 시 공간 부족 문제가 다시 발생하지 않도록, 시스템에 유지할 커널의 개수를 기본 3개에서 2개로 줄이는 설정입니다.

# vim /etc/dnf/dnf.conf

[main]
gpgcheck=1
installonly_limit=2
clean_requirements_on_remove=True
best=True
skip_if_unavailable=False

이제 앞으로는 DNF가 알아서 최신 커널 2개만 유지하므로 /boot 공간이 가득 차는 일을 예방할 수 있습니다.

참조링크