문서의 이전 판입니다!
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가지가 있는데
- 수동으로 패키지를 삭제하는 방법
- 자동으로 패키지를 삭제하는 방법
이 있다. 당연한 얘기지만 자동삭제가 편하고 깔끔하다.
수동 제거 방법
먼저 설치된 커널 패키지를 확인한다.
# 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 공간이 가득 차는 일을 예방할 수 있습니다.