Overlayfs란?
overlayfs는 파일시스템의 한 종류로 union mount의 한 구현 방식으로 따라서, 여러 디렉터리를 하나의 디렉터리처럼 사용할 수 있다. 2010년에 개발된 파일 시스템이며, 2014년에 리눅스 커널(커널 v3.18 부터)에 통합되어 별도로 설치하지 않아도 사용할 수 있다.
해당 파일 시스템을 사용하면 원본 파일 시스템을 변경하지 않고, 임시적인 변경이 가능하다. 즉, 스냅샷과 롤백 기능으로 사용 가능하다. 또한, 컨테이너 환경에서 동일하게 사용되는 파일이 있을 경우 각 컨테이너에서 특정 디렉터리를 레이어로 설정해서 여러 컨테이너가 특정 디렉터리를 효율적으로 사용할 수 있게 된다.
결론적으로 우리가 흔히 사용하는 도커와 같은 컨테이너화 기술에서 효율적인 관리를 할 수 있어 널리 사용되는 파일시스템이다.
Overlayfs 구성 요소
overlayfs은 여러 디렉터리를 하나의 디렉터리로 병합하는데, 이때 각각의 레이어의 우선순위가 부여된다. 먼저, overlayfs를 구성하는 디렉터리는 4가지로 분류되며 다음과 같은 특징을 가진다.
lower dir
upper 디렉터리보다 아래쪽에 위치한 1개 이상의 레이어이다. 마운트가 되면 lower 디렉터리들은 Read Only가 된다. 여러개의 레이어를 지정할 수 있으며, 마운트 시 앞에 쓰여진 디렉터리가 상위 레이어가 된다.
upper dir
가장 위쪽에 위치한 최상위 레이어이다. 마운트 된 merge 디렉터리에서 작업을 하면 upper 디렉터리에 COW(Copy On Write)를 하고, 삭제하면 upper 디렉터리에 whiteout으로 파일을 마스킹하여 삭제로 인식한다. 마운트 이후 발생하는 파일 수정과 삭제는 upper 디렉터리에서 기록된다.
merge dir
모든 레이어(upper + lower)가 보이는 통합 뷰이다. 하위 레이어에서 동일한 이름의 파일이 존재하면, 우선순위가 높은 레이어의 파일이 우선된다.
work dir
통합 뷰의 원자성을 보장하기 위해 존재하는 중간 계층이다. 파일을 상위 레이어에 복사하거나 수정할 때 임시 파일을 저장하여 중간 상태를 관리하여 파일 시스템 작업의 원자성을 유지하고 충돌을 방지한다.
Overlayfs 특징
위 그림에서는 2개의 lower 디렉터리와 upper 디렉터리가 마운트되어 merged 디렉터리에서 모든 파일을 확인할 수 있다. 이때 파일 이름이 중복되는 d 파일과 e 파일은 더 높은 레이어의 파일로 인식된다.
직접 마운트하여 실습해보자.
sudo mount -t overlay overlay –o lowerdir=./lower1:./lower2, upperdir=./upper, workdir=./worker ./merged
왼쪽과 같이 파일을 구성하고 overlayfs를 마운트하면 오른쪽 그림과 같이 표현할 수 있다.
마운트가 되면 merged 디렉터리에 모든 레이어의 파일이 있는 것을 확인할 수 있다.
파일 생성
merged 디렉터리에 새로운 파일이 생성되면, 이는 upper 디렉터리에 COW 하는 것을 확인할 수 있다.
파일 삭제
merged 디렉터리에서 lower2.txt 파일을 삭제하면, 실제 lower2 디렉터리 안에 존재하는 lower2.txt에는 영향이 가지 않는다. 그리고 upper 디렉터리에는 lower2.txt 라는 캐릭터 디바이스 파일(whiteout 파일)이 생성되는데, upper 디렉터리가 최상위 레이어 이므로 해당 파일은 마스킹 처리되어 merged 디렉터리에서는 삭제된 것이다.
파일 수정
merged 디렉터리의 lower1.txt를 수정하면, upper 디렉터리에 COW되어 데이터 수정이 이뤄진다.
Ref