Markdown Preview
Linux에서 OverlayFS를 활용한 고급 파일 시스템 관리 마스터하기
Frontmatter
OverlayFS는 Linux 커널의 유니온 파일 시스템으로, 여러 파일 시스템을 통합된 뷰로 마운트할 수 있게 해줍니다. 기본 사용법으로는 디렉토리 구조 생성, OverlayFS 마운트, 통합 뷰 확인 등이 있으며, 여러 lower 레이어를 지원하고 읽기 전용 마운트도 가능합니다. 성능 테스트와 unionfs-fuse와의 비교를 통해 OverlayFS의 장점이 강조되며, 커널 레벨 구현으로 빠른 성능과 안정성을 제공합니다.
OverlayFS 실습 및 시연 가이드
OverlayFS란?
OverlayFS는 Linux 커널에 내장된 유니온 파일 시스템입니다. 여러 파일 시스템을 하나의 통합된 뷰로 마운트할 수 있게 해주며, Docker와 같은 컨테이너 기술에서 레이어드 파일 시스템을 구현하는 데 사용됩니다.
기존의
unionfs-fuse와 달리 커널 레벨에서 동작하기 때문에 성능이 훨씬 뛰어나고, 별도의 설치 없이 대부분의 최신 Linux 배포판에서 바로 사용할 수 있습니다. 🚀설치 확인
Ubuntu에서 확인
OverlayFS는 Linux 커널 3.18 이상에서 기본 지원됩니다.
# 커널 버전 확인
uname -r
# overlay 모듈 확인
lsmod | grep overlay
# 모듈이 로드되어 있지 않다면 로드
sudo modprobe overlay기본 사용법
1. 테스트 디렉토리 구조 생성
먼저 실습을 위한 디렉토리를 만들어봅시다.
# 작업 디렉토리 생성
mkdir -p ~/overlay-demo
cd ~/overlay-demo
# OverlayFS에 필요한 디렉토리 생성
mkdir lower upper work merged
# lower 디렉토리에 파일 생성 (읽기 전용 레이어)
echo "This is from lower layer" > lower/file1.txt
echo "Lower shared file" > lower/shared.txt
# upper 디렉토리에 파일 생성 (읽기/쓰기 레이어)
echo "This is from upper layer" > upper/file2.txt
echo "Upper shared file" > upper/shared.txt2. OverlayFS 마운트
이제 두 레이어를 하나의 통합 뷰로 마운트해봅시다.
# OverlayFS 마운트
sudo mount -t overlay overlay \
-o lowerdir=lower,upperdir=upper,workdir=work \
merged/
# 마운트 확인
mount | grep overlay각 디렉토리 역할:
lowerdir: 읽기 전용 레이어 (base layer)
upperdir: 읽기/쓰기 레이어 (변경 사항이 저장됨)
workdir: OverlayFS 내부 작업용 디렉토리 (반드시 빈 디렉토리여야 함)
merged: 통합된 뷰가 보이는 마운트 포인트
3. 통합 뷰 확인
# merged 디렉토리 내용 확인
ls -la merged/
# 파일 내용 확인
cat merged/file1.txt # lower에서 옴
cat merged/file2.txt # upper에서 옴
cat merged/shared.txt # upper의 내용이 표시됨 (upper 우선)실습 시나리오
시나리오 1: 파일 우선순위 확인
같은 이름의 파일이 lower와 upper 레이어에 모두 있을 때, upper 레이어의 파일이 우선 표시됩니다.
# shared.txt의 내용 확인 (upper가 우선)
cat merged/shared.txt
# 출력: Upper shared file시나리오 2: 쓰기 레이어에 파일 생성
# merged 디렉토리에 새 파일 생성
echo "New file in merged" > merged/newfile.txt
# upper에만 파일이 생성되었는지 확인
ls -la upper/
cat upper/newfile.txt시나리오 3: lower 레이어의 파일 수정 (Copy-on-Write)
# lower의 파일을 수정하려고 시도
echo "Modified content" > merged/file1.txt
# lower는 변경되지 않고, upper에 파일이 복사됨 (Copy-on-Write)
cat lower/file1.txt # 원본 유지: "This is from lower layer"
cat upper/file1.txt # 수정된 내용: "Modified content"시나리오 4: 파일 삭제 시 whiteout 확인
# merged에서 lower의 파일 삭제
rm merged/file1.txt
# upper에 whiteout 파일이 생성됨
ls -la upper/
# character device로 whiteout 표시됨
# c--------- 0 0 0, 0 file1.txt고급 사용법
여러 lower 레이어 마운트
OverlayFS는 여러 개의 lower 레이어를 지원합니다.
# 추가 레이어 생성
mkdir lower2
echo "Layer2 content" > lower2/file3.txt
# 마운트 해제
sudo umount merged/
# work 디렉토리 초기화 (중요!)
rm -rf work/*
# 여러 lower 레이어로 다시 마운트 (콜론으로 구분, 왼쪽이 상위)
sudo mount -t overlay overlay \
-o lowerdir=lower2:lower,upperdir=upper,workdir=work \
merged/
# 확인
ls -la merged/읽기 전용 마운트 (upperdir 없이)
# upper와 work 없이 읽기 전용으로 마운트
sudo mount -t overlay overlay \
-o lowerdir=lower2:lower \
merged/마운트 옵션 활용
# index 옵션 (하드링크 지원 향상)
sudo mount -t overlay overlay \
-o lowerdir=lower,upperdir=upper,workdir=work,index=on \
merged/
# metacopy 옵션 (메타데이터만 복사, 성능 향상)
sudo mount -t overlay overlay \
-o lowerdir=lower,upperdir=upper,workdir=work,metacopy=on \
merged/실전 활용 예제
Docker와 유사한 레이어 구조 시뮬레이션
# Base 레이어 (OS 기본 파일)
mkdir -p demo/base
echo "Base OS files" > demo/base/system.conf
# Application 레이어
mkdir -p demo/app
echo "Application files" > demo/app/app.conf
# Configuration 레이어
mkdir -p demo/config
echo "User configuration" > demo/config/user.conf
# Runtime 레이어 (쓰기 가능)
mkdir -p demo/runtime demo/work demo/container
# 통합 마운트 (왼쪽이 상위 레이어)
sudo mount -t overlay overlay \
-o lowerdir=demo/config:demo/app:demo/base,upperdir=demo/runtime,workdir=demo/work \
demo/container/
# 컨테이너 뷰 확인
ls -la demo/container/
cat demo/container/system.conf
cat demo/container/app.conf
cat demo/container/user.conf마운트 해제
# OverlayFS 마운트 해제
sudo umount merged/
# 정리
rm -rf ~/overlay-demo트러블슈팅
일반적인 문제와 해결방법
"wrong fs type" 또는 "overlay: missing 'workdir'" 오류
# workdir이 upperdir과 같은 파일시스템에 있어야 함
# workdir은 반드시 비어있어야 함
rm -rf work/*
mkdir -p work"workdir is in-use" 오류
# 기존 마운트 해제 후 work 디렉토리 초기화
sudo umount merged/
rm -rf work/*Permission denied 오류
# root 권한 필요
sudo mount -t overlay ...
# 또는 /etc/fstab에 user 옵션 추가overlay 모듈이 없을 때
# 모듈 로드
sudo modprobe overlay
# 부팅 시 자동 로드 설정
echo "overlay" | sudo tee -a /etc/modules-load.d/overlay.conf성능 테스트
읽기 성능 측정
# 큰 파일 생성
dd if=/dev/zero of=lower/testfile bs=1M count=100
# 읽기 성능 테스트
time cat merged/testfile > /dev/null쓰기 성능 측정
# 쓰기 성능 테스트
time dd if=/dev/zero of=merged/writefile bs=1M count=100
# upper에 저장된 파일 확인
ls -lh upper/writefileunionfs-fuse vs OverlayFS 비교
특성 | unionfs-fuse | OverlayFS |
구현 방식 | FUSE (사용자 공간) | 커널 모듈 (커널 공간) |
성능 | 상대적으로 느림 (사용자↔커널 컨텍스트 스위칭) | 매우 빠름 (커널 내부 처리) |
설치 | 별도 패키지 설치 필요 | 커널 3.18+ 기본 내장 |
안정성 | 사용자 공간에서 동작, 상대적으로 덜 안정적 | 커널에서 직접 관리, 매우 안정적 |
Docker 지원 | 지원하지 않음 | 기본 스토리지 드라이버 |
권한 관리 | FUSE 권한으로 일반 사용자도 마운트 가능 | root 권한 필요 (또는 fstab 설정) |
사용 사례 | 간단한 파일 통합, 테스트 환경 | 프로덕션 환경, 컨테이너, 고성능 필요 시 |
정리
OverlayFS는 다음과 같은 특징을 가집니다:
- 커널 레벨 구현: FUSE 기반보다 훨씬 빠른 성능
- Copy-on-Write: lower 레이어의 파일 수정 시 upper 레이어로 복사
- 다중 lower 레이어: 여러 읽기 전용 레이어 지원
- 컨테이너 기술의 기반: Docker, Podman 등에서 기본 스토리지 드라이버로 사용
핵심 체크리스트 ✅
커널 버전 3.18 이상 확인
overlay 모듈 로드 확인
lower, upper, work, merged 디렉토리 구조 이해
work 디렉토리는 항상 비어있어야 함
upper와 work는 같은 파일시스템에 위치해야 함