안녕하세요. 지구 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.conf의 installonly_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_PACKAGE를 kernel-버전-릴리스.아키텍처 형식의 실제 패키지명으로 변경합니다.
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를 임의 경로에 실행하지 마십시오.
공식 참고자료
- The CentOS Project — End dates are coming for CentOS Stream 8 and CentOS Linux 7: CentOS Linux 7 지원 종료일 확인, 조회일 2026년 7월 27일
- Red Hat Enterprise Linux 7 System Administrator’s Guide — Yum: Yum 패키지 관리와 설정 구조 확인, 조회일 2026년 7월 27일
- Red Hat Enterprise Linux 7 시스템 관리자 가이드 — YUM 및 YUM 리포지토리 구성:
installonly_limit기본값과 최소값 확인, 조회일 2026년 7월 27일 - yum-utils — package-cleanup 매뉴얼:
--oldkernels,--count,--keepdevel옵션 확인, 조회일 2026년 7월 27일
자주 묻는 질문
현재 실행 중인 커널도 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을 지원되는 운영체제로 이전하시기 바랍니다.
오늘 준비한 내용은 여기까지입니다. 다음에도 서버 운영에 도움이 되는 기술정보로 인사드리겠습니다.
中文
English
한국어