Skip to document
pieroot log
Markdown Preview

Linux에서 OverlayFS를 활용한 고급 파일 시스템 관리 마스터하기

Frontmatter

OverlayFS는 Linux 커널의 유니온 파일 시스템으로, 여러 파일 시스템을 통합된 뷰로 마운트할 수 있게 해줍니다. 기본 사용법으로는 디렉토리 구조 생성, OverlayFS 마운트, 통합 뷰 확인 등이 있으며, 여러 lower 레이어를 지원하고 읽기 전용 마운트도 가능합니다. 성능 테스트와 unionfs-fuse와의 비교를 통해 OverlayFS의 장점이 강조되며, 커널 레벨 구현으로 빠른 성능과 안정성을 제공합니다.

Linux에서 OverlayFS를 활용한 고급 파일 시스템 관리 마스터하기

OverlayFS 실습 및 시연 가이드

OverlayFS란?

OverlayFS는 Linux 커널에 내장된 유니온 파일 시스템입니다. 여러 파일 시스템을 하나의 통합된 뷰로 마운트할 수 있게 해주며, Docker와 같은 컨테이너 기술에서 레이어드 파일 시스템을 구현하는 데 사용됩니다.
기존의 unionfs-fuse와 달리 커널 레벨에서 동작하기 때문에 성능이 훨씬 뛰어나고, 별도의 설치 없이 대부분의 최신 Linux 배포판에서 바로 사용할 수 있습니다. 🚀

설치 확인

Ubuntu에서 확인

OverlayFS는 Linux 커널 3.18 이상에서 기본 지원됩니다.
bash
# 커널 버전 확인
uname -r

# overlay 모듈 확인
lsmod | grep overlay

# 모듈이 로드되어 있지 않다면 로드
sudo modprobe overlay

기본 사용법

1. 테스트 디렉토리 구조 생성

먼저 실습을 위한 디렉토리를 만들어봅시다.
bash
# 작업 디렉토리 생성
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.txt
notion image

2. OverlayFS 마운트

이제 두 레이어를 하나의 통합 뷰로 마운트해봅시다.
bash
# OverlayFS 마운트
sudo mount -t overlay overlay \
    -o lowerdir=lower,upperdir=upper,workdir=work \
    merged/

# 마운트 확인
mount | grep overlay
각 디렉토리 역할:
  • lowerdir: 읽기 전용 레이어 (base layer)
  • upperdir: 읽기/쓰기 레이어 (변경 사항이 저장됨)
  • workdir: OverlayFS 내부 작업용 디렉토리 (반드시 빈 디렉토리여야 함)
  • merged: 통합된 뷰가 보이는 마운트 포인트
notion image

3. 통합 뷰 확인

bash
# merged 디렉토리 내용 확인
ls -la merged/

# 파일 내용 확인
cat merged/file1.txt   # lower에서 옴
cat merged/file2.txt   # upper에서 옴
cat merged/shared.txt  # upper의 내용이 표시됨 (upper 우선)

실습 시나리오

시나리오 1: 파일 우선순위 확인

같은 이름의 파일이 lower와 upper 레이어에 모두 있을 때, upper 레이어의 파일이 우선 표시됩니다.
bash
# shared.txt의 내용 확인 (upper가 우선)
cat merged/shared.txt

# 출력: Upper shared file

시나리오 2: 쓰기 레이어에 파일 생성

bash
# merged 디렉토리에 새 파일 생성
echo "New file in merged" > merged/newfile.txt

# upper에만 파일이 생성되었는지 확인
ls -la upper/
cat upper/newfile.txt

시나리오 3: lower 레이어의 파일 수정 (Copy-on-Write)

bash
# 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"
notion image

시나리오 4: 파일 삭제 시 whiteout 확인

bash
# merged에서 lower의 파일 삭제
rm merged/file1.txt

# upper에 whiteout 파일이 생성됨
ls -la upper/

# character device로 whiteout 표시됨
# c--------- 0 0 0, 0 file1.txt
notion image

고급 사용법

여러 lower 레이어 마운트

OverlayFS는 여러 개의 lower 레이어를 지원합니다.
bash
# 추가 레이어 생성
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 없이)

bash
# upper와 work 없이 읽기 전용으로 마운트
sudo mount -t overlay overlay \
    -o lowerdir=lower2:lower \
    merged/

마운트 옵션 활용

bash
# 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와 유사한 레이어 구조 시뮬레이션

bash
# 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

마운트 해제

bash
# OverlayFS 마운트 해제
sudo umount merged/

# 정리
rm -rf ~/overlay-demo

트러블슈팅

일반적인 문제와 해결방법

"wrong fs type" 또는 "overlay: missing 'workdir'" 오류
bash
# workdir이 upperdir과 같은 파일시스템에 있어야 함
# workdir은 반드시 비어있어야 함
rm -rf work/*
mkdir -p work
"workdir is in-use" 오류
bash
# 기존 마운트 해제 후 work 디렉토리 초기화
sudo umount merged/
rm -rf work/*
Permission denied 오류
bash
# root 권한 필요
sudo mount -t overlay ...

# 또는 /etc/fstab에 user 옵션 추가
overlay 모듈이 없을 때
bash
# 모듈 로드
sudo modprobe overlay

# 부팅 시 자동 로드 설정
echo "overlay" | sudo tee -a /etc/modules-load.d/overlay.conf

성능 테스트

읽기 성능 측정

bash
# 큰 파일 생성
dd if=/dev/zero of=lower/testfile bs=1M count=100

# 읽기 성능 테스트
time cat merged/testfile > /dev/null

쓰기 성능 측정

bash
# 쓰기 성능 테스트
time dd if=/dev/zero of=merged/writefile bs=1M count=100

# upper에 저장된 파일 확인
ls -lh upper/writefile

unionfs-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는 같은 파일시스템에 위치해야 함

참고 자료