리눅스 커널에 통합된 OverlayFS는 여러 파일 시스템을 하나의 통합된 뷰로 결합하는 기술입니다. 읽기 전용 레이어와 읽기/쓰기 레이어를 쌓아 올려, 원본 파일 시스템을 변경하지 않고도 파일 시스템을 수정하고 관리할 수 있도록 해줍니다. 이 리뷰에서는 OverlayFS의 작동 방식, 주요 기능, 장단점, 사용 경험, 그리고 유사 기술과의 비교를 통해 OverlayFS가 과연 레이어 기반 파일 시스템의 강력한 솔루션인지 자세히 살펴보겠습니다.
OverlayFS의 핵심 원리 이해하기
OverlayFS는 ‘레이어’라는 개념을 핵심으로 합니다. 여러 레이어를 쌓아 올려 하나의 통합된 파일 시스템 뷰를 제공합니다. 일반적으로, 가장 아래 레이어는 ‘lowerdir’이라고 불리며 읽기 전용입니다. 그 위에 ‘upperdir’이라는 읽기/쓰기 레이어가 위치합니다. 사용자가 파일 시스템에 변경을 가하면, 해당 변경 사항은 upperdir에 기록됩니다. lowerdir은 변경되지 않은 상태로 유지됩니다.
파일을 읽을 때 OverlayFS는 upperdir에서 해당 파일을 먼저 찾습니다. upperdir에 파일이 없으면 lowerdir에서 찾습니다. 파일을 수정하거나 삭제하면 ‘copy-on-write’ (COW)라는 메커니즘이 작동합니다. 수정된 파일은 lowerdir에서 upperdir로 복사된 후 수정됩니다. 삭제된 파일은 upperdir에 ‘whiteout’ 파일로 표시되어 lowerdir에 존재하는 파일이 보이지 않도록 합니다.
주요 특징 및 기능 살펴보기
- 레이어 기반 구조 여러 레이어를 쌓아 올려 유연한 파일 시스템 관리를 가능하게 합니다.
- Copy-on-write (COW) 원본 파일 시스템을 변경하지 않고 수정 사항을 관리합니다.
- Whiteout 파일 삭제 시 lowerdir에 있는 파일을 숨기는 메커니즘을 제공합니다.
- 디렉토리 합병 (Directory Merging) 여러 lowerdir의 디렉토리를 하나의 통합된 디렉토리로 보여줍니다.
- 빠른 성능 lowerdir의 데이터를 직접 사용하므로 성능 저하가 적습니다.
- 간단한 설정 mount 명령어를 사용하여 쉽게 설정할 수 있습니다.
OverlayFS의 장점과 단점 비교 분석
장점
- 원본 데이터 보호 읽기 전용 레이어를 사용하여 원본 데이터를 보호합니다.
- 간편한 변경 관리 변경 사항을 별도의 레이어에 저장하여 쉽게 되돌릴 수 있습니다.
- 공간 효율성 COW 덕분에 변경된 파일만 복사하므로 공간을 효율적으로 사용합니다.
- 빠른 배포 읽기 전용 레이어를 재사용하여 여러 시스템에 빠르게 배포할 수 있습니다.
- 컨테이너 기술과의 통합 Docker와 같은 컨테이너 기술에서 널리 사용됩니다.
단점
- 복잡한 파일 시스템 구조 여러 레이어를 이해해야 하므로 복잡하게 느껴질 수 있습니다.
- 성능 문제 COW 작업 시 성능 저하가 발생할 수 있습니다. 특히 대용량 파일 수정 시 더욱 두드러집니다.
- Metadata 관리 upperdir에 metadata가 저장되므로 upperdir의 크기가 커질 수 있습니다.
- 디버깅 어려움 문제 발생 시 여러 레이어를 확인해야 하므로 디버깅이 어려울 수 있습니다.
- 특정 파일 시스템과의 호환성 일부 파일 시스템과의 호환성 문제가 발생할 수 있습니다.
나의 OverlayFS 사용 경험 및 성능 분석
저는 Docker 컨테이너 환경에서 OverlayFS를 사용해 왔습니다. Docker 이미지 레이어를 관리하는 데 매우 유용했습니다. 이미지 레이어를 재사용하여 새로운 컨테이너를 빠르게 배포할 수 있었고, 디스크 공간을 절약할 수 있었습니다. 또한, 개발 환경에서 OverlayFS를 사용하여 원본 코드를 변경하지 않고 실험적인 변경 사항을 적용해 볼 수 있었습니다. 변경 사항이 만족스럽지 않으면 간단히 레이어를 제거하여 원래 상태로 되돌릴 수 있었습니다.
하지만 대용량 파일을 수정할 때는 성능 저하가 발생했습니다. COW 작업으로 인해 디스크 I/O가 증가했고, CPU 사용량도 높아졌습니다. 이러한 문제를 해결하기 위해 SSD를 사용하고, COW 작업을 최소화하는 방식으로 애플리케이션을 최적화했습니다.
간단한 성능 테스트를 수행했습니다. 1GB 크기의 파일을 OverlayFS 환경에서 수정하고 저장하는 데 걸리는 시간을 측정했습니다. 동일한 작업을 ext4 파일 시스템에서 수행하고 결과를 비교했습니다. OverlayFS 환경에서는 ext4에 비해 약 10~20% 정도의 성능 저하가 발생했습니다. 하지만 작은 파일 수정이나 읽기 작업에서는 성능 차이가 거의 없었습니다.
다른 레이어 기반 파일 시스템과의 비교
OverlayFS 외에도 AUFS, Btrfs Subvolume, LVM Snapshot 등 다양한 레이어 기반 파일 시스템이 존재합니다. 각 기술은 장단점이 있으며, 사용 사례에 따라 적합한 기술이 다릅니다.
- AUFS (Another Union File System) OverlayFS의 이전 버전으로, 더 많은 기능을 제공하지만 성능이 떨어집니다.
- Btrfs Subvolume Btrfs 파일 시스템의 기능으로, 스냅샷을 생성하고 롤백하는 데 유용합니다.
- LVM Snapshot LVM (Logical Volume Manager)의 기능으로, 볼륨의 스냅샷을 생성하여 백업 및 복구에 사용됩니다.
AUFS는 OverlayFS보다 더 많은 기능을 제공하지만, 커널에 통합되지 않아 유지 관리가 어렵습니다. Btrfs Subvolume은 Btrfs 파일 시스템에 종속적이며, LVM Snapshot은 블록 레벨에서 작동하므로 파일 시스템 레벨의 변경 사항을 추적하기 어렵습니다.
OverlayFS는 커널에 통합되어 있고, 성능이 뛰어나며, Docker와 같은 컨테이너 기술과의 통합이 용이하다는 장점이 있습니다. 따라서 컨테이너 환경이나 읽기 전용 파일 시스템을 관리하는 데 적합합니다.