OverlayFS 파일 시스템

OverlayFS는 리눅스 커널에 내장된 파일 시스템 중 하나로, 여러 파일 시스템을 겹쳐서 하나의 파일 시스템처럼 사용할 수 있게 해준다. 주로 컨테이너 기술(예: Docker)에서 사용되며, 파일 시스템 계층을 결합하여 읽기와 쓰기 작업을 효율적으로 처리할 수 있다. 이 글에서는 OverlayFS의 기본 개념과 작동 방식, 예제 코드를 통해 OverlayFS를 설정하고 사용하는 방법을 알아본다.

OverlayFS?

OverlayFS는 두 개의 디렉토리(혹은 파일 시스템)를 겹쳐서 하나의 파일 시스템으로 만드는 오버레이 파일 시스템 이다.

OverlayFS에서는 두 가지 주요 디렉토리가 있다.

  1. Lower Layer: 읽기 전용 파일 시스템
  2. Upper Layer: 읽기 및 쓰기 가능한 파일 시스템

OverlayFS는 이 두 디렉토리를 겹쳐서 하나의 파일 시스템으로 보여준다. 파일을 읽는 경우에는 Lower LayerUpper Layer에서 동시에 정보를 가져오지만, 파일을 수정하는 경우에는 Upper Layer에서만 동작한다. 이러한 방식은 컨테이너와 같은 환경에서 효율적인 파일 시스템 관리를 가능하게 한다.

OverlayFS의 주요 개념

  • Lower Layer: 읽기 전용이며, 원본 파일 시스템
  • Upper Layer: 읽기와 쓰기가 가능하며, 사용자가 수정한 내용이 저장되는 계층
  • Merged Layer: Lower Layer와 Upper Layer가 합쳐진 가상의 파일 시스템으로, OverlayFS에서 최종적으로 보여지는 파일 시스템

OverlayFS의 동작 방식

OverlayFS는 두 개의 계층(Lower Layer와 Upper Layer)을 결합하여 하나의 통합된 파일 시스템(Merged Layer)을 제공한다. 아래는 OverlayFS에서 읽기/쓰기 동작이 어떻게 이뤄지는지 간단히 기술한다.

  1. 읽기 작업: OverlayFS는 Upper Layer에서 먼저 파일을 찾고, 존재하지 않는다면 Lower Layer에서 해당 파일을 찾는다.
  2. 쓰기 작업: OverlayFS는 파일이 수정되면, Upper Layer에 해당 파일의 복사본을 만들어 저장한다. 이 과정은 Copy-on-Write(COW)라고 불리며, Lower Layer는 그대로 유지된다.

OverlayFS의 구조

OverlayFS의 구조는 아래 그림과 같이 표현할 수 있습니다.

Lower Layer (Read-Only)
  ├── bin/
  ├── lib/
  ├── usr/
  └── var/
  
Upper Layer (Read-Write)
  ├── bin/        # 빈 디렉토리
  ├── lib/        # 빈 디렉토리
  ├── usr/        # 빈 디렉토리
  └── var/
      └── log.txt # Upper Layer에만 존재하는 파일

Merged Layer (최종)
  ├── bin/
  ├── lib/
  ├── usr/
  └── var/
      └── log.txt # Upper Layer의 파일이 우선 적용됨

Lower Layer위에 Upper Layer가 스택킹(Stacking) 즉, 겹쳐지면서 실제로 Upper Layer에 존재하는 log.txt 가 겹쳐진 Merged Layer에서 사용자에게 노출되며, 수정할 수 있게 된다.

OverlayFS 설정하기

OverlayFS를 설정하려면, Lower LayerUpper Layer 두 디렉토리를 준비하고 이 디렉토리를 OverlayFS를 통해 합쳐지도록 구성한다.

1. 디렉토리 준비

먼저, Lower Layer, Upper Layer, Merged Layer에 해당하는 세 개의 디렉토리를 생성합니다.

sudo mkdir -p /overlayfs/lower
sudo mkdir -p /overlayfs/upper
sudo mkdir -p /overlayfs/work
sudo mkdir -p /overlayfs/merged

여기서 각 디렉토리의 역할은 다음과 같다.

  • /overlayfs/lower: 읽기 전용 파일 시스템을 위한 Lower Layer
  • /overlayfs/upper: 쓰기 가능한 파일 시스템을 위한 Upper Layer
  • /overlayfs/work: OverlayFS가 필요로 하는 작업 디렉토리
  • /overlayfs/merged: 최종적으로 결합된 파일 시스템이 표시되는 Merged Layer

2. Lower Layer와 Upper Layer에 파일 추가

Lower LayerUpper Layer에 예시 파일을 추가하여 어떻게 파일 시스템이 병합되는지 확인해본다.

# Lower Layer에 파일 추가
echo "This is the lower layer file" | sudo tee /overlayfs/lower/example.txt

# Upper Layer에 파일 추가
echo "This is the upper layer file" | sudo tee /overlayfs/upper/override.txt

3. OverlayFS 마운트

mount 명령어를 사용하여 OverlayFS를 마운트한다. 이때, Lower LayerUpper Layer를 결합하여 /overlayfs/merged 디렉토리에 최종 파일 시스템을 마운트한다.

sudo mount -t overlay overlay -o lowerdir=/overlayfs/lower,upperdir=/overlayfs/upper,workdir=/overlayfs/work /overlayfs/merged

이제 /overlayfs/merged 디렉토리에서 결합된 파일 시스템을 확인할 수 있다.

4. OverlayFS 테스트

/overlayfs/merged 디렉토리로 이동하여 Lower Layer와 Upper Layer의 파일들이 어떻게 병합되는지 확인한다.

ls /overlayfs/merged

출력 결과:

Bash
example.txt  override.txt

example.txt는 Lower Layer에서, override.txt는 Upper Layer에서 온 파일이다.

5. 파일 추가 및 수정 테스트

Upper Layer에 파일을 추가하고, Lower Layer의 파일을 수정해 본다.

Upper Layer에 파일 추가

Upper Layer에 새로운 파일을 추가해보면, 이 파일이 Merged Layer에 나타난다.

echo "This is a new file in the upper layer" | sudo tee /overlayfs/merged/new_file.txt

ls /overlayfs/merged를 실행하면 new_file.txtMerged Layer에 나타난다.

Lower Layer의 파일 수정

아래와 같이 Lower Layer의 파일을 Merged Layer에서 수정한다.

echo "Modified in merged layer" | sudo tee /overlayfs/merged/example.txt

Lower Layerexample.txt 파일을 수정했지만, 실제로는 Upper Layer에 복사본이 생성되고 이 복사본이 수정된다. 이는 Lower Layer가 읽기 전용으로 유지되기 때문에 발생하는 현상이다. 이를 Copy-on-Write(COW)라고 한다.

OverlayFS 마운트 해제

OverlayFS 마운트를 해제하려면 umount 명령어를 사용한다.

sudo umount /overlayfs/merged

OverlayFS는 여러 계층을 결합하여 파일 시스템을 효율적으로 관리하고, 읽기 및 쓰기 작업을 최적화할 수 있는 리눅스의 강력한 기능 중 하나이다. 주로 컨테이너 기술이나 라이브 시스템 환경에서 널리 사용되며, Copy-on-Write 방식으로 데이터가 변경되지 않은 원본 계층을 그대로 유지하면서도 개별적인 파일 시스템 작업을 수행할 수 있다.

참고 사이트

답글 남기기