CentOS 7에서 오래된 커널 패키지를 정리하여 /boot 용량을 확보하는 방법

안녕하세요. 지구 IDC 기술팀입니다.

CentOS 7에서 커널 업데이트가 여러 차례 누적되면 /boot 파티션에 이전 커널의 vmlinuz, initramfs, System.map 파일이 남아 용량이 부족해질 수 있습니다. 이 상태에서는 새 커널 설치나 initramfs 생성이 실패하고, 이후 업데이트 과정이 중단될 수 있습니다.

오래된 커널은 /boot에서 파일만 직접 삭제하지 말고 RPM 패키지 단위로 정리해야 합니다. 이 문서에서는 현재 실행 중인 커널과 부팅 기본 커널을 확인하고, package-cleanup으로 최소 2개의 커널을 남겨 안전하게 정리한 뒤 용량을 재확인하는 방법을 설명합니다.

적용 환경과 지원 상태

운영체제 CentOS Linux 7
패키지 관리자 yum / RPM
정리 도구 package-cleanup (yum-utils 패키지)
커널 보관 설정 /etc/yum.confinstallonly_limit
공식 지원 상태 2024년 6월 30일 지원 종료

1. /boot 사용량 확인

먼저 /boot가 별도 파티션으로 마운트되어 있는지와 실제 사용률을 확인합니다.

findmnt /boot
df -hT /boot
df -ih /boot

df -hT에서 사용률이 높거나 남은 공간이 수십 MB 이하라면 커널 패키지 정리가 필요할 수 있습니다. df -ih는 inode 부족 여부를 확인하는 명령으로, 일반적인 /boot 용량 문제는 블록 사용률이 높게 표시되는 경우가 많습니다.

/boot 안에서 어떤 파일이 공간을 사용하는지 확인합니다.

sudo du -h /boot/* 2>/dev/null | sort -h
sudo ls -lh /boot

여러 버전의 vmlinuz-*, initramfs-*.img, System.map-*, config-* 파일이 반복되어 있다면 이전 커널 패키지가 누적된 상태일 가능성이 큽니다.

2. 현재 커널과 설치된 커널 확인

삭제 작업 전에 현재 실행 중인 커널 버전을 반드시 기록합니다.

uname -r

RPM 데이터베이스에 설치된 표준 커널 패키지를 확인합니다.

rpm -q kernel
rpm -q kernel --qf '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n'

표준 kernel 외에 디버그 커널이나 별도 저장소 커널이 설치되어 있는지도 확인합니다.

rpm -qa 'kernel*' | sort -V

uname -r 결과와 동일한 버전은 현재 메모리에서 실행 중인 커널입니다. 이 버전은 정리 대상에 포함시키지 않아야 합니다.

GRUB이 다음 부팅에서 사용할 기본 커널 경로도 확인합니다.

sudo grubby --default-kernel
sudo grubby --info=ALL | grep -E '^(index|kernel|title)='

3. 정리 전 준비와 최신 커널 부팅 확인

현재 상태를 복구에 활용할 수 있도록 커널 패키지 목록과 Yum 설정을 백업합니다.

sudo rpm -qa 'kernel*' | sort -V | sudo tee /root/kernel-packages-before-cleanup.txt
sudo cp -a /etc/yum.conf /etc/yum.conf.before-kernel-cleanup

설치된 가장 최신 커널과 현재 실행 중인 커널이 다르다면, 가능하면 최신 커널로 재부팅하고 정상 작동을 확인한 후 이전 버전을 정리합니다. 먼저 기본 부팅 커널이 최신 설치 버전을 가리키는지 확인하십시오.

uname -r
rpm -q kernel
sudo grubby --default-kernel

기본 커널을 변경해야 한다면 아래의 KERNEL_VERSION_TO_KEEP를 실제로 유지할 최신 커널 버전으로 바꿉니다.

sudo grubby --set-default /boot/vmlinuz-KERNEL_VERSION_TO_KEEP
sudo grubby --default-kernel

4. package-cleanup으로 오래된 커널 정리

4-1. yum-utils 설치 여부 확인

package-cleanup은 CentOS 7의 yum-utils 패키지에 포함되어 있습니다.

rpm -q yum-utils
command -v package-cleanup

설치되어 있지 않고 사용 가능한 저장소가 정상이라면 다음 명령으로 설치합니다.

sudo yum install -y yum-utils

4-2. 제거 예정 패키지 미리 확인

아래 명령은 2개의 커널을 유지한다는 조건으로 제거 후보를 계산하고, 실제 작업은 승인하지 않도록 합니다.

sudo package-cleanup --oldkernels --count=2 --assumeno

출력된 제거 목록에 uname -r로 확인한 현재 커널이나 유지하려는 예비 커널이 포함되어 있지 않은지 확인합니다. --count=2는 시스템에 커널 패키지 2개를 남기도록 지정합니다.

4-3. 오래된 커널 패키지 제거

제거 목록이 올바르면 자동 승인 옵션 없이 실행하고, 트랜잭션 요약을 다시 확인한 뒤 승인합니다.

sudo package-cleanup --oldkernels --count=2

정상적으로 완료되면 오래된 kernel 패키지와 연결된 /boot 파일, 모듈 디렉터리, GRUB 항목이 패키지 스크립트를 통해 함께 정리됩니다.

5. 특정 커널을 수동으로 제거하는 방법

package-cleanup을 설치할 수 없거나 특정 커널 하나만 제거해야 한다면, 먼저 정확한 패키지 이름을 조회합니다.

uname -r
rpm -q kernel --qf '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n'

제거할 커널이 현재 실행 중인 버전과 다르고, 최신 정상 커널과 예비 커널을 제외한 오래된 버전인지 확인합니다. 아래의 OLD_KERNEL_PACKAGEkernel-버전-릴리스.아키텍처 형식의 실제 패키지명으로 변경합니다.

sudo yum remove OLD_KERNEL_PACKAGE

Yum이 제거할 추가 패키지를 표시하면 승인하기 전에 반드시 검토합니다. 커널과 무관한 중요한 패키지나 유지해야 할 모듈 패키지가 함께 제거될 예정이라면 작업을 취소하고 의존성을 먼저 확인하십시오.

6. 정리 결과와 부팅 상태 확인

정리 후 설치된 커널 수와 현재 실행 중인 커널을 다시 확인합니다.

uname -r
rpm -q kernel
sudo grubby --default-kernel

현재 실행 중인 커널 패키지와 기본 부팅 커널 파일이 모두 남아 있어야 합니다. 이어서 /boot 여유 공간을 확인합니다.

df -hT /boot
sudo ls -lh /boot

커널 패키지 파일의 소유 관계도 확인할 수 있습니다. 아래의 KERNEL_VERSION_TO_CHECK를 실제 버전으로 변경합니다.

rpm -qf /boot/vmlinuz-KERNEL_VERSION_TO_CHECK
rpm -qf /boot/initramfs-KERNEL_VERSION_TO_CHECK.img

작업 후 재부팅이 가능한 유지보수 시간에는 서버를 재부팅하고 최신 커널로 정상 부팅되는지, 네트워크와 주요 서비스가 정상인지 확인하는 것이 좋습니다.

sudo reboot

재접속 후 다음 명령으로 부팅 커널과 실패한 서비스를 확인합니다.

uname -r
sudo systemctl --failed
df -hT /boot

7. 커널 누적 재발 방지

Yum의 installonly_limit는 커널처럼 여러 버전을 동시에 설치하는 패키지의 보관 수를 제한합니다. 현재 값을 확인합니다.

grep -nE '^[[:space:]]*installonly_limit[[:space:]]*=' /etc/yum.conf

CentOS 7 계열에서 일반적으로 사용하는 기본값은 3이며, 최소 허용값은 2입니다. /boot가 작다면 /etc/yum.conf[main] 섹션에 다음과 같이 설정하여 최신 커널과 예비 커널 1개를 유지할 수 있습니다.

[main]
installonly_limit=2

기존 [main] 섹션이 이미 있다면 새 섹션을 중복해서 만들지 말고 해당 섹션 안의 값을 수정합니다. 충분한 /boot 공간이 있고 장애 대응을 위해 커널을 하나 더 유지하려면 installonly_limit=3을 사용할 수 있습니다.

정기 점검에서는 다음 항목을 함께 확인합니다.

  • df -h /boot로 여유 공간 확인
  • rpm -q kernel로 설치된 커널 수 확인
  • 커널 업데이트 후 최신 버전으로 실제 재부팅되었는지 확인
  • 최신 커널의 네트워크, 스토리지 드라이버와 주요 서비스 정상 작동 확인
  • 지원되는 운영체제로의 마이그레이션 일정 관리

8. 자주 발생하는 문제와 해결 방법

오래된 커널 정리 중 발생하는 문제
증상 가능한 원인 확인 방법 해결 방법
package-cleanup: command not found yum-utils 미설치 rpm -q yum-utils 정상 저장소에서 yum install yum-utils를 실행하거나 특정 커널을 yum remove로 제거합니다.
No old kernels to remove 설치 커널이 보관 수 이하이거나 현재 오래된 커널로 부팅 중 uname -r, rpm -q kernel, grubby --default-kernel 최신 설치 커널로 재부팅하여 정상 작동을 확인한 뒤 다시 정리합니다.
yum install 또는 yum remove에서 저장소 오류 발생 CentOS 7 지원 종료 후 미러 URL 만료, DNS 또는 프록시 문제 yum repolist all, 저장소 파일과 오류 URL 확인 신뢰할 수 있는 아카이브 저장소 구성을 검토하고 장기적으로 지원되는 운영체제로 이전합니다. 저장소 파일을 임의의 비공식 미러로 변경하지 마십시오.
정리 후에도 /boot 사용률이 높음 디버그·서드파티 커널, rescue 이미지 또는 RPM 소유가 없는 잔여 파일 du -h /boot/*, rpm -qa 'kernel*', rpm -qf 파일경로 파일 소유 패키지를 확인해 패키지 단위로 제거합니다. 소유 패키지가 없는 파일은 생성 경위와 부팅 필요 여부를 확인한 후 별도 백업하고 처리합니다.
최신 커널 패키지는 설치됐지만 이전 커널로 계속 부팅됨 GRUB 기본 항목이 이전 버전을 가리키거나 새 커널 설치가 불완전함 grubby --default-kernel, grubby --info=ALL, ls -lh /boot 최신 커널 파일과 initramfs가 존재하는지 확인한 뒤 grubby --set-default로 정상 항목을 지정하고 유지보수 시간에 재부팅합니다.
Yum 트랜잭션 검사에서 의존성 오류 발생 커널 모듈 또는 서드파티 드라이버 패키지가 특정 커널에 의존 제거 예정 목록과 의존 패키지 이름 확인 작업을 취소하고 해당 드라이버의 지원 커널과 패키지 관계를 확인합니다. --nodeps로 강제 제거하지 마십시오.

9. 커널 복구 방법

커널 패키지 제거는 삭제된 파일을 단순히 되돌리는 작업이 아니므로, 필요한 버전을 다시 설치해야 합니다. 아직 서버를 재부팅하지 않았고 현재 실행 중인 커널의 /boot 파일이 누락되었다면 먼저 재부팅을 중단하고 해당 커널 패키지를 복구하십시오.

신뢰할 수 있는 저장소 또는 로컬 캐시에 동일 버전 패키지가 있다면 현재 실행 커널을 다시 설치할 수 있습니다.

sudo yum reinstall kernel-$(uname -r)

설치 후 커널 이미지와 initramfs, 기본 부팅 항목을 확인합니다.

ls -lh /boot/vmlinuz-$(uname -r)
ls -lh /boot/initramfs-$(uname -r).img
sudo grubby --default-kernel

부팅에 실패한 서버는 공급자 콘솔이나 복구 ISO로 접속하여 루트 파일시스템을 마운트하고, 정상 커널 패키지와 GRUB 설정을 복구해야 합니다. BIOS와 UEFI는 GRUB 구성 파일 경로가 다를 수 있으므로, 확인 없이 grub2-mkconfig를 임의 경로에 실행하지 마십시오.

공식 참고자료

자주 묻는 질문

현재 실행 중인 커널도 package-cleanup이 삭제하나요?

package-cleanup은 실행 중인 커널을 보호하도록 처리하지만, 삭제 전에는 항상 uname -r와 제거 예정 목록을 직접 비교해야 합니다. 현재 오래된 커널로 부팅 중이면 그 버전이 남아 설치 커널 수가 예상보다 많게 보일 수 있으므로, 최신 정상 커널로 재부팅한 뒤 다시 정리하십시오.

커널은 몇 개를 남기는 것이 안전한가요?

최소 2개를 권장합니다. 현재 사용하는 최신 커널과 문제가 발생했을 때 선택할 수 있는 이전 정상 커널 1개를 유지하는 구성입니다. /boot 공간이 충분한 서버는 3개를 유지해도 됩니다.

커널 파일만 직접 삭제하면 더 빠르지 않나요?

권장하지 않습니다. 직접 삭제하면 RPM 데이터베이스, 커널 모듈, initramfs와 GRUB 항목이 서로 불일치할 수 있습니다. 반드시 package-cleanup 또는 yum remove를 사용해 패키지 단위로 제거하십시오.

설정한 installonly_limit 값이 기존 커널도 즉시 삭제하나요?

아닙니다. 이 설정은 이후 Yum이 installonly 패키지를 설치할 때 보관 수를 관리하는 기준입니다. 이미 누적된 커널은 package-cleanup --oldkernels --count=2로 별도 정리해야 합니다.

/boot가 100%인데 새 커널 설치부터 해야 하나요?

먼저 현재 실행 커널과 설치 커널을 확인하고, 정상 부팅이 확인된 오래된 불필요 커널을 하나 제거해 공간을 확보해야 합니다. 공간이 없는 상태에서 새 커널 설치나 initramfs 재생성을 반복하면 트랜잭션이 불완전해질 수 있습니다.

마무리

CentOS 7에서 /boot 용량을 확보할 때는 현재 실행 중인 커널, 다음 부팅 기본 커널, 설치된 커널 목록을 먼저 확인하고 package-cleanup --oldkernels --count=2로 최소 2개를 유지하며 정리하는 것이 핵심입니다.

정리 후에는 df -h /boot, rpm -q kernel, grubby --default-kernel 결과를 확인하고 유지보수 시간에 재부팅 검증까지 진행하십시오. /boot 파일을 직접 삭제하는 방식은 피하고, 장기적으로는 지원이 종료된 CentOS 7을 지원되는 운영체제로 이전하시기 바랍니다.

오늘 준비한 내용은 여기까지입니다. 다음에도 서버 운영에 도움이 되는 기술정보로 인사드리겠습니다.

  • 0 用户发现这个很有用
此文章对您是否有帮助?
« Back

Powered by WHMCompleteSolution