
요즘 싱글 코어 PC를 사용하는 분은 거의 없을 것이다. 개인 개발 목적으로 Ubuntu나 CentOS 계열 리눅스를 설치해 사용하는 분도 많다. 리눅스를 설치할 때 자연스럽게 파티션을 나누곤 하는데, 왜 나누는지와 어떤 이점이 있는지는 한 번 생각해 볼 필요가 있다.
나도 개인적으로 오라클 클라우드에 CentOS VM을 가지고 있다. 무료 인스턴스이다 보니 저장 공간이 빠듯하고 루트 파일시스템이 거의 차서 언제 장애가 날지 걱정되는 상태다. 처음 이 직업을 선택했을 때는 프로세스 폭주로 하루에도 몇 번씩 서버를 재부팅하곤 했다.
시스템이 멈추는 이유
오늘날 CPU는 대부분 멀티코어와 멀티스레드를 지원하고 하드웨어와 운영체제의 자원 관리 기술도 크게 발전했다. 하지만 멀티코어라고 해서 프로세스 폭주나 시스템 정지가 저절로 방지되는 것은 아니다. 무한 루프, 메모리 누수, 과도한 프로세스 생성, 디스크 I/O 포화는 지금도 서버 장애를 일으킬 수 있다.
리눅스는 각 프로세스에 가상 메모리 공간을 제공하며 메모리가 부족하면 설정에 따라 스왑 영역을 사용할 수 있다. 프로세스마다 하드디스크에 자신의 복제본을 만든 뒤 실행하는 것은 아니다. 루트 파일시스템이 가득 찼다고 해서 모든 경우에 새 프로세스 생성이 즉시 중단되는 것도 아니다. 다만 로그, 임시 파일, PID 파일, 소켓, 데이터베이스 파일 등을 기록하지 못해 서비스가 시작되지 않거나 오작동할 수 있다. 메모리와 스왑까지 부족하면 프로세스 생성이 실패하거나 OOM Killer가 프로세스를 종료할 수 있다.
프로세스 폭주를 막으려면 파티션뿐 아니라 systemd의 자원 제한, cgroup, 사용자별 프로세스 제한, 로그 순환, 디스크 사용량 경보 등을 함께 사용해야 한다.
파티션을 나누는 이점
파티션이나 논리 볼륨을 나누는 가장 큰 이유는 한 영역의 문제가 다른 영역으로 번지는 것을 막는 데 있다. 예를 들어 로그가 폭증해 /var가 가득 차더라도 루트 영역에 여유가 남아 있으면 관리자가 로그인해 문제를 해결할 가능성이 커진다.
파일시스템마다 다른 마운트 옵션을 적용할 수도 있다. /tmp에 실행 파일을 막는 옵션을 주거나, 데이터 영역만 별도로 백업하고, 서비스 데이터에 맞는 파일시스템과 용량 정책을 선택할 수 있다. 장애 복구, 스냅샷, 할당량 관리가 쉬워지는 장점도 있다.
반대로 용량을 고정해 잘못 나누면 한 파티션에는 공간이 남는데 다른 파티션은 가득 차는 문제가 생긴다. 혼자 사용하는 개발용 PC에서는 지나치게 세분화한 파티션이 오히려 관리 부담이 될 수 있다.
가상머신과 클라우드의 저장 공간
VirtualBox의 동적 할당 가상 디스크는 게스트가 데이터를 기록할수록 호스트의 가상 디스크 파일이 설정된 최대 크기까지 커지는 방식이다. 게스트 운영체제가 보는 디스크의 최대 크기나 그 안의 파티션과 파일시스템이 자동으로 확장된다는 뜻은 아니다. 가상 디스크의 최대 크기를 늘린 뒤에도 게스트에서 파티션과 파일시스템을 별도로 확장해야 한다.
여러 운영체제가 하드웨어를 공유하게 만드는 기술은 일반적으로 하이퍼바이저라고 부른다. 가상머신 환경에서도 파티션을 무조건 피해야 하는 것은 아니다. 워크로드, 장애 격리 필요성, 백업 방식에 따라 파티션이나 LVM 논리 볼륨을 설계해야 한다.
클라우드 블록 스토리지는 서비스를 종료하지 않고 용량을 늘릴 수 있는 경우가 많다. 그래도 볼륨 확장 뒤 파티션과 파일시스템 확장 작업이 필요할 수 있다. 어떤 파일시스템은 온라인 확장을 지원하지만 축소는 어렵거나 불가능하다.
지금은 어떻게 나누는 것이 좋을까
전형적인 WEB/WAS 서버에서 로그와 서비스 데이터가 많이 쌓인다면 /var 또는 /var/log, /var/lib를 별도 논리 볼륨으로 분리하는 것이 도움이 될 수 있다. 반면 현대 리눅스에서는 /usr를 별도 파티션으로 나누는 구성이 항상 필요한 것은 아니며 부팅과 업데이트를 복잡하게 만들 수도 있다.
개인 개발 PC라면 EFI 시스템 파티션과 루트 파일시스템을 중심으로 단순하게 구성하고, 필요하면 별도 홈 영역이나 LVM을 사용하는 정도가 실용적이다. 팀 서버라면 로그 폭증, 데이터 증가, 백업과 복구, 보안 마운트 옵션을 기준으로 나누는 편이 좋다.
결론적으로 파티션은 많을수록 좋은 것도, 하나일수록 좋은 것도 아니다. 고정 파티션을 습관적으로 나누기보다 LVM, 스냅샷, 클라우드 볼륨, 모니터링을 함께 고려해 용량을 유연하게 관리하는 것이 중요하다. 수많은 사용자가 동시에 접속한 클라우드 시스템에서 디스크를 늘릴 때마다 서비스를 종료할 수는 없다. 결국 현대적인 저장 공간 설계의 핵심은 중단 없이 확장하면서도 장애의 범위를 적절히 격리하는 데 있다.
COMMENTS
댓글 0
이 글에 대한 의견이나 질문을 남겨 주세요.
등록된 댓글이 없습니다.