보통 하나의 디렉토리 파일 위치에서 파일 시스템을 마운트하면 최근 마운트 내용이 보이게 됩니다.
이렇게 여러 개의 파일 시스템을 하나처럼 병합하여 사용하는 기술을 유니온 마운트라 할 수 있습니다.
컨테이너 파일 시스템의 레이어드 구조
이 그림은 컨테이너 파일 시스템의 레이어드 구조를 나타냅니다. 이 구조는 다음과 같은 주요 개념과 특징을 가지고 있습니다:
Image Layering (이미지 레이어링):
각 레이어는 파일 시스템의 일부분을 담당합니다.
레이어 1, 레이어 2, 레이어 3은 'Read Only (R)'로 설정되어, 이들 레이어의 파일은 읽을 수만 있고 변경할 수 없습니다.
최상위 레이어인 'Container (RW)'는 읽기와 쓰기가 모두 가능한 'Read-Write' 레이어로, 여기에서 파일 변경 작업이 발생합니다.
Copy-on-Write (CoW):
하단 'Read Only' 레이어의 파일에 변경이 필요한 경우, 해당 파일은 최상위 'Container (RW)' 레이어로 복사되어 변경됩니다.
이 메커니즘은 공간 효율성을 높이고, 성능을 개선하며, 이미지의 불필요한 중복을 피합니다.
File System Support:
이러한 특징을 지원하는 파일 시스템에는 AUFS, OverlayFS, BTRFS 등이 있습니다.
이들 파일 시스템은 특히 컨테이너화된 환경에서 데이터 관리와 속도 향상을 위해 설계되었습니다.
이렇게 레이어드 파일 시스템 구조는 효율적인 리소스 사용을 가능하게 하며, 컨테이너 기반의 가상화 환경에서 중요한 역할을 합니다.
직접 서버에서 명령어로 확인해 보겠습니다.
1.sudo mount -t tmpfs tmpfs /home/ubuntu/
' ubuntu ' 디렉토리에 'tmpfs' 타입의 임시 파일 시스템을 마운트합니다. 'tmpfs'는 메모리에 저장되며, 데이터는 시스템이 재부팅될 때 사라집니다. 'sudo'는 관리자 권한으로 명령어를 실행하라는 것을 의미합니다.
2. mount | grep tmpfs
현재 마운트된 모든 파일 시스템 중에서 'tmpfs'로 마운트된 항목들만 필터링해서 보여줍니다. 여기서 /home/ubuntu/경로에 'tmpfs'가 마운트된 것을 확인할 수 있습니다.
3. ls -l
이 명령어는 현재 디렉토리의 파일과 디렉토리의 목록을 간략하게 보여줍니다. 마운트된 후에 'linux_campus' 디렉토리를 확인해보면 아무것도 보이지 않는데, 이는 'tmpfs' 마운트로 인해 원래 디렉토리가 숨겨져 있기 때문입니다.
4. ls -l ubuntu /
마운트된 ' ubuntu ' 디렉토리 내부를 확인합니다. 결과로는 아무것도 나타나지 않으며, 이는 'tmpfs'가 비어 있는 새로운 파일 시스템으로 마운트되었기 때문입니다.
5. sudo umount /home/ubuntu
마운트된 'tmpfs' 파일 시스템을 ' ubuntu ' 디렉토리에서 언마운트합니다.
6. ls -l ubuntu /
' ubuntu ' 디렉토리의 내용을 다시 확인합니다. 이번에는 'tmpfs'가 언마운트되었기 때문에 원래의 디렉토리와 파일들이 다시 나타납니다.
이러한 일련의 명령어를 통해 사용자는 특정 파일 위치에서 마운트할 경우 가장 최근에 마운트한 파일을 보여주는것을 확인할 수 있습니다.
OverlayFS와 BTRFS의 특징
OverlayFS
OverlayFS는 두 개의 다른 파일 시스템 레이어를 하나로 통합해 사용자에게 하나의 파일 시스템처럼 보이게 하는 기술입니다. 구조적 특징은 다음과 같습니다:
상단 레이어(Upperdir): 여기에 파일의 변경 사항이 저장됩니다. 쓰기 작업이 일어날 때마다 새로운 데이터가 이 레이어에 기록됩니다. ( 만약, 파일이 추가된다면 upperdir에 바로 추가됩니다. 이미지를 참고해서 설명하자면, file5가 새로 upperdir에 생성되게 됩니다.)
하단 레이어(Lowerdir): 읽기 전용 레이어로, 실제 파일의 원본 데이터를 포함합니다. 변경할 수 없으며, 기본 데이터로 사용됩니다. ( 여러 층의 이미지 레이어가 생성될수 있습니다.)
통합 레이어(Merged): 상단 레이어와 하단 레이어를 통합하여 사용자에게 하나의 파일 시스템처럼 보여주는 가상의 뷰입니다.
호환성: Red Hat Linux에서는 XFS 파일 시스템을 하단 레이어로 사용하는 것이 지원되지만, 다른 리눅스 배포판에서는 다양한 파일 시스템을 하단 레이어로 사용할 수 있습니다.
OverlayFS는 주로 컨테이너의 데이터 레이어를 관리하는 데 사용되며, 컨테이너가 수행하는 파일 시스템의 변경 사항을 효율적으로 다루기 위해 설계되었습니다.
BTRFS
BTRFS(B-Tree File System)는 Copy-on-Write (CoW)를 기반으로 하는 현대적인 파일 시스템으로, 복잡한 스토리지 요구 사항을 해결하기 위해 만들어졌습니다. 주요 기능은 다음과 같습니다:
스냅샷(Snapshots): 파일 시스템의 특정 시점을 기록하여 필요할 때 그 시점으로 되돌릴 수 있습니다. 이는 데이터 백업 및 복구에 매우 유용합니다. 스냅샷 기준으로 이미지 레이어를 생성하고, 먼저 쌓았던 스냅샷은 변경 불가능 하빈다. 그리고 최근 스냅샷은 컨테이너 레이어로서 RW 기능을 즉, 읽기와 저장기능을 가지고 있습니다.
RAID 지원: 여러 디스크에 걸쳐 데이터를 분산하여 저장하고, 디스크가 실패했을 때도 데이터를 복구할 수 있는 기능을 내장하고 있습니다.
Self-Healing: 데이터의 손상을 자동으로 감지하고 복구하는 기능을 지원합니다.
증분 백업(Incremental Backup): 스냅샷을 사용하여 데이터의 변경사항만을 기록합니다. 이는 저장 공간을 효율적으로 사용하고, 백업 시간을 단축합니다.
BTRFS는 데이터 무결성과 복구에 중점을 두어 설계된 파일 시스템으로, 서버와 스토리지 시스템에서 안정적인 데이터 관리를 가능하게 합니다. 또한, BTRFS는 파일 시스템의 유연성과 확장성을 향상시키기 위해 다양한 고급 기능을 제공합니다.
OverlayFS 사용하여 파일 시스템 마운트 하고, 파일을 생성 및 관리하는 과정(예)
1. 디렉토리 생성
명령어 : mkdir /tmp/{lower1,lower2,upper,merged,work}
/tmp 디렉토리 아래에 lower1, lower2, upper, merged, work라는 5개의 디렉토리를 생성합니다.
lower1, lower2는 하단 레이어로 사용될 디렉토리입니다.
upper는 변경사항(쓰기 작업)이 저장될 상단 레이어 디렉토리입니다.
merged는 상단과 하단 레이어가 합쳐져 보여질 마운트 포인트입니다.
work는 OverlayFS의 내부 작업을 위한 작업 디렉토리입니다.
2. 파일 생성
명령어 : echo "lower1 a" > /tmp/lower1/a.txt 명령어 : echo "lower1 b" > /tmp/lower1/b.txt 명령어 : echo "lower2 a" > /tmp/lower2/a.txt 명령어 : echo "lower2 c" > /tmp/lower2/c.txt
lower1 디렉토리에 a.txt, b.txt 파일을 생성하고, 각각 "lower1 a", "lower1 b" 문자열을 저장합니다.
lower2 디렉토리에 a.txt, c.txt 파일을 생성하고, 각각 "lower2 a", "lower2 c" 문자열을 저장합니다.
3. -1 OverlayFS 마운트 (읽기 전용 시도)
명령어 : sudo mount -t overlay overlay -o lowerdir=/tmp/lower1:/tmp/lower2 /tmp/merged
lower1과 lower2를 하단 레이어로 사용하여, merged 디렉토리에 OverlayFS를 마운트합니다. 여기서 upperdir와 workdir 옵션이 누락되어 있어 읽기 전용으로 마운트됩니다.
3. -2 OverlayFS 마운트 (읽기-쓰기)
명령어 :sudo mount -t overlay overlay -o lowerdir=/tmp/lower1:/tmp/lower2,upperdir=/tmp/upper,workdir=/tmp/work /tmp/merged
이번에는 lowerdir, upperdir, workdir를 모두 지정하여 merged에 마운트합니다. 이로써 merged 디렉토리가 읽기-쓰기 가능한 상태가 됩니다.
4. 파일 생성 및 확인
명령어 : echo"Hello World" > /tmp/merged/hello.txt
merged 디렉토리에 hello.txt 파일을 생성하고 "Hello World" 문자열을 저장합니다. 이 파일은 upper 디렉토리에 실제로 저장됩니다.
5. 최종 파일 상태 확인
ls -l /tmp/merged/ 명령을 통해 merged 디렉토리의 내용을 확인합니다. 여기서 a.txt, b.txt, c.txt, hello.txt 파일이 보입니다.
ls -l /tmp/upper 명령을 통해 upper 디렉토리의 내용을 확인합니다. hello.txt 파일만 존재하는 것을 확인할 수 있습니다. 이는 merged 디렉토리에 새로 생성되거나 변경된 파일들이 upper 디렉토리에 저장됨을 의미합니다.
이 과정은 OverlayFS를 사용하여 파일 시스템의 여러 레이어를 관리하고, 파일을 생성 및 수정하는 방법을 보여줍니다.
요약
유니온 마운트(Union Mount)는 여러 개의 파일 시스템을 하나처럼 병합하여 사용하는 기술로, 두 개 이상의 디렉토리 트리를 오버레이 방식으로 겹쳐서 하나의 디렉토리처럼 보이게 만듭니다. 이 때 각 레이어는 수정이 불가능한 읽기 전용(Read-Only)과 수정이 가능한 읽기-쓰기(Read-Write) 레이어로 구분되어 있을 수 있습니다. 이러한 구조는 파일의 가상 뷰를 제공하면서 실제 파일 시스템에는 변화를 주지 않는 방식으로 작동합니다.
OverlayFS는 유니온 마운트를 구현한 리눅스 파일 시스템의 한 예입니다. OverlayFS는 두 개의 디렉토리(하위 디렉토리와 상위 디렉토리)를 통합하여 단일 디렉토리처럼 사용할 수 있게 해주는데, 이는 유니온 마운트의 개념을 실제로 적용한 것입니다. OverlayFS의 주요 사용 사례 중 하나는 Docker 컨테이너에서 이미지와 컨테이너 레이어를 관리하는 것입니다.
BTRFS는 유니온 마운트 방식이 아니라 전혀 다른 접근을 사용하는 현대적인 파일 시스템입니다. BTRFS의 주요 기능 중 하나인 스냅샷은 유니온 마운트의 레이어 개념과는 다르게 작동합니다. 스냅샷은 특정 시점의 파일 시스템 상태를 기록하고, 필요한 경우 그 시점으로 롤백할 수 있는 기능을 제공합니다. BTRFS의 이러한 특징은 특히 데이터 무결성과 시스템 복원력을 중시하는 환경에서 중요합니다.
결론적으로, OverlayFS와 BTRFS는 각기 다른 목적과 사용 사례를 위해 설계된 파일 시스템으로, 유니온 마운트라는 개념을 실제 파일 시스템 관리에 적용하는 다양한 방식을 제공합니다. OverlayFS는 유니온 마운트의 직접적인 구현체로 볼 수 있으며, BTRFS는 유니온 마운트와는 별개로 다른 기능적 이점을 제공하는 파일 시스템입니다.