CentOS LVM (Logical Volume Manager) 무중단 파티션 리사이징 (공간 회수 및 할당)
과거 당사의 빅데이터 관리 포털인 빅데이터 모니터링 플랫폼를 고객사 인프라망에 설치하면서 흔하게 겪는 “장애 발생 전조 현상”이 하나 있었습니다. 바로 Linux 루트(/) 파티션의 100% 디스크 풀(Full) 현상입니다.
거대한 수집 에이전트와 로컬 큐(Queue) 엔진, 모니터링 데몬들이 쏟아내는 파일 기반 오프힙 메모리 캐시나 임시 로그들은 순식간에 수십 GB 단위로 디스크를 갉아먹습니다. 하지만 OS 자동 설치 스크립트나 구시대적 서버 세팅 관행에 의해, 리눅스 인프라 담당자들이 시스템 전체 용량 1TB 중 쓸데없는 사용자 홈 디렉터리(/home)에 900GB를 잡고, 정작 S/W가 깔리는 루트 파티션(/)에는 달랑 50GB만 할당해 둔 상태로 서버를 넘겨주는 일이 너무 많았습니다.
이럴 때 LVM(Logical Volume Manager)으로 볼륨 그룹이 구성되어 있다면 무척 다행입니다. 서버 OS를 밀고 파티션을 다시 잡을 필요 없이, 운영 중인 쉘 환경에서 유휴 /home 공간을 축소(Reduce)하여 급격하게 차오르는 / 공간에 재할당(Extend)하는 응급조치 가이드를 정리했습니다.
방법 1: lvreduce 사용 (기존 데이터 보존 시도)
가장 이상적인 방법은 파일시스템 포맷 없이 마운트만 해제한 채 빈 용량만을 자르고 할당하는 것입니다. -r (resizefs) 옵션을 함께 주어 파일시스템 파티션 테이블 리사이징을 커널 레벨에서 동시에 처리합니다.
$ umount /home
# 2. /home의 전체 볼륨 크기를 10GB로 과감하게 축소 (-r 옵션 필수)
$ lvreduce -r -L 10G /dev/VolGroup/lv_home
# 3. 방금 전 축소되어 LVM 상에 남아도는 공간(FREE) 100% 전부를 루트(/)로 할당
$ lvresize -r -l+100%FREE /dev/VolGroup/lv_root
# 4. 자르기가 완료된 /home을 다시 마운트하고 용량 검증
$ mount /home
$ df -h(주의: CentOS 6.x 시절의 ext4 파일시스템은 축소가 곧잘 되었으나, 최근 CentOS 7 / RHEL 시스템 기본인 xfs 포맷은 파일시스템 자체의 원리에 의해 “축소”를 공식적으로 지원하지 않습니다. xfs 환경이라면 에러가 나면서 튕길 수 있습니다.)
방법 2: 볼륨 삭제 후 재할당 (가장 확실하고 권장하는 방법)
만약 xfs 기반이어서 에러가 떨어지거나 안전성 문제로 확장이 안 될 경우, 홈 디렉터리의 용량이 얼마 안 된다면 백업(Backup) 후 볼륨 자체를 날렸다가 다시 조립하는 것이 가장 속도도 빠르고 확실한 대안입니다.
# 1. 기존 홈 데이터 임시 폴더로 안전하게 백업
$ mkdir /home.bak
$ mv /home/* /home.bak/
# 2. 마운트 해제 및 과감하게 논리 볼륨(lv_home) 파괴
$ umount /home
$ lvremove /dev/VolGroup/lv_home
# 3. 파괴되어 나온 디스크 용량 전체(100%FREE)를 그대로 쥐어짜서 루트(/) 파티션 확장
$ lvextend -r -l+100%FREE /dev/VolGroup/lv_root
# 4. 방치된 백업 폴더를 아예 /home 위치로 잡기
$ mv /home.bak /home
# 5. 기존 볼륨 구성을 찾으려는 부팅 시 에러(Kernel Panic) 방지를 위해 fstab에서 lv_home 라인 지우기
$ vi /etc/fstab
# (/dev/mapper/VolGroup-lv_home /home ... 어쩌구 되어 있는 라인 주석 처리 혹은 삭제)이와 같이 LVM의 디스크 쪼개기 마술 구조를 이해하고 있다면, “여유 공간이 모자라 프로세스가 죽어버리는” 급박한 서비스 다운타임을 유연한 대처 한 방으로 멋지게 빗겨나갈 수 있습니다. 인프라 데브옵스와 빅데이터 S/W 엔지니어링은 결국 하나로 통합니다.