OverlayFS는 어떻게 사용합니까?


53

답변이메일 메시지 는 "OverlayFS"라는 것이 Ubuntu 11.10에서 사용 가능하며 Ubuntu 12.04에서 auf를 강제로 대체 함을 나타냅니다.

어떻게 사용합니까? 문서는 어디에 있습니까?


1
너와 나 둘다 형제 나는 지금까지 이것을 보았습니다 mount -t overlayfs -o rw,uppderdir=x,lowerdir=y overlayfs /mount/point. 그 외에는 단서가 없습니다. 라이브 시스템에서 문제를 해결하고 있지만 아직 작동하지 못했습니다. "upperdir"과 "lowerdir"의 의미를 정확히 알 수 있기를 바랍니다. 나는 아무것도 찾지 못했다.
척 R

답변:


63

편집 :이 답변을 작성한 후 오버레이 매개 변수에서 일부 변경된 사항, 즉 필수 매개 변수 추가이 새로운 매개 변수에 대한 자세한 설명은 아래 의 totti 답변을workdir 참조하십시오 .

나는 마침내 그것을 찾았습니다. 커널 소스에서 참조를 찾았지만 어떤 이유로 kernel.org의 자식 트리에는 나타나지 않습니다. 그러나! 우분투 커널 소스를 다음과 같이 당기면 다음 apt-get source linux-image-3.0.0-16-generic에서 찾을 수 있습니다 linux-3.0.0/Documentation/overlayfs.txt. linux-doc 패키지에서도 사용할 수 있습니다 /usr/share/doc/linux-doc/filesystems/overlayfs.txt.gz.

실제 도움말 문서는 "마운트 방법"대신 "작동 방식"에 가깝기 때문에 간략한 설명이 있습니다 (커널 문서에는 하나의 예가 있습니다).

mount -t overlayfs -o [mount options] overlayfs [mountpoint for merged system]

[마운트 옵션]은 다음과 같습니다.

  • lowerdir = somedir : lowerdir은 새 파일 시스템을 배치 할 디렉토리입니다. 중복 된 파일이있는 경우 upperdir의 버전으로 덮어 씁니다 (실제로 은닉 됨).
  • upperdir = somedir : upperdir은 lowerdir을 오버레이하려는 디렉토리입니다. lowerdir 및 upperdir에 중복 파일 이름이 있으면 upperdir의 버전이 우선합니다.
  • 표준 마운트 옵션. 내가 코드에서 본 유일한 것은 ro / rw이지만 실험 해 볼 수 있습니다.

처음에 저를 혼란스럽게했던 한 가지 점은 아마도 오버레이를 마운트하면 실제로 파일 시스템을 마운트하지 않는다는 것입니다. overlayfs 마운트를 사용하여 squashfs 파일 시스템을 마운트하려고 시도했지만 작동 방식이 아닙니다. 먼저 (내 경우에는 squashfs) 파일 시스템을 임의의 디렉토리에 마운트 한 다음 overlayfs를 사용하여 마운트 지점 (디렉토리)과 다른 디렉토리를 3 차 디렉토리 (overlayfs 마운트 지점)에 병합하십시오 (편집 :이 "tertiary"디렉토리 실제로 upperdir = 디렉토리가 될 수 있습니다). 3 차 디렉토리는 병합 된 파일 시스템 (또는 디렉토리 트리-융통성 있음)을 볼 수있는 곳입니다.

예 1, 루트 파일 시스템을 오버레이

기본 우분투 시스템이 filesystem.squashfs로 존재하는 우분투 하이브리드 부트 디스크에서 작업하고 있으며 ubuntu.overlay kubuntu.overlay xubuntu.overlay 및 lubuntu.overlay라는 파일이 있습니다. .overlay 파일은 filesystem.squashfs의 내용이 정리 된 (공간 절약을 위해) 해당 시스템의 기본 설치입니다. 그런 다음 오버레이 스크립트와 위의 옵션을 사용하여 부팅 매개 변수에서 올바른 배포판의 .overlay 파일을 오버레이하도록 init 스크립트를 수정했으며 매력처럼 작동합니다!

다음은 init 스크립트에서 사용한 줄입니다 (모든 변수가 번역 된 후).

mkdir -p /overlay
mount -t squashfs /cdrom/casper/ubuntu.overlay /overlay
mount -t overlayfs -o lowerdir=/filesystem.squashfs,upperdir=/overlay overlayfs /

위의 filesystem.squashfs 는 파일이 아닌 casper에 의해 생성 된 디렉토리 입니다.

이 세 문장은 /overlay디렉토리를 만들고 디렉토리에 squashfs 파일 시스템을 마운트 한 /overlay다음 OverlayFS를 사용하여 /overlayover 의 내용을 본질적으로 병합합니다 /.

예 2, 두 디렉토리의 투명한 병합

각 릴리스마다 라이브 USB를 재 구축하는 과정에서 OverlayFS를 사용하여 많은 시간을 절약했습니다. 가장 기본적인 설치 인 우분투 코어 이미지의 내용을 포함하는 ubuntu-base라는 디렉토리로 시작합니다. 그런 다음 ubuntu, kubuntu, lubuntu 및 xubuntu라는 디렉토리를 만듭니다.

그런 다음 OverlayFS를 사용하여 우분투베이스의 파일을 개별 디렉토리에 표시합니다. 나는 이와 같은 것을 사용할 것이다 :

mount -t overlayfs -o lowerdir=ubuntu-base,upperdir=kubuntu overlayfs kubuntu

이것은 우분투베이스의 파일을 kubuntu 폴더에 표시합니다. 그런 다음 chrootkubuntu 폴더에 다음과 같은 작업을 수행 할 수 apt-get install kubuntu-desktop있습니다. 이 OverlayFS 마운트 중에 변경된 내용은 상위 디렉토리 (이 경우 kubuntu 폴더)에 남아 있습니다. 그런 다음 OverlayFS를 마운트 해제하면 ubuntu-base에 실제로 존재하지만 파일이 변경되지 않는 한 kubuntu 폴더에 "미러링 된"파일이 사라집니다. 이렇게하면 파일이 실제로 각 위치에있는 것처럼 사용할 수 있지만 우분투베이스에 파일 사본을 여러 개 가질 필요가 없습니다.


3
"그러나 어떤 이유로 kernel.org의 git 트리에 나타나지 않습니다" -이것은 aufs가 아닌 (그리고 그렇지 않을 수도있는) overlayfs가 업스트림 커널에 있지 않기 때문입니다. 이러한 통합 파일 시스템은 Ubuntu Kernel Team에 의해 통합됩니다.
MestreLion

2
OverlayFS는 분명히 커널 3.10에 들어가고 있습니다.
David C. Bishop

8
마지막으로 3.18 lwn.net/Articles/617099
Rmano에서

4
@Rmano : 내 컴퓨터에서는 다음과 함께 작동 overlay하지 않습니다.overlayfs
Janus Troelsen

1
@ austinmarton에게 감사드립니다. 이것도 얼마 전에 발견되었으며 totti는 내 대답을 업데이트하기 전에 아래에서 다뤘습니다.
척 R

20

에서 https://www.kernel.org/doc/Documentation/filesystems/overlayfs.txt :

상하

오버레이 파일 시스템은 '상위'파일 시스템과 '하위'파일 시스템이라는 두 가지 파일 시스템을 결합합니다. 두 파일 시스템에 이름이 있으면 '상위'파일 시스템의 객체가 표시되고 '하위'파일 시스템의 객체는 숨겨 지거나 디렉토리의 경우 '상위'객체와 병합됩니다.

두 디렉토리 트리가 동일한 파일 시스템에있을 수 있고 파일 시스템의 루트를 제공 할 필요가 없기 때문에 'filesystem'보다는 상위 및 하위 'directory tree'를 참조하는 것이 더 정확합니다. 상단 또는 하단.

하위 파일 시스템은 Linux에서 지원하는 모든 파일 시스템 일 수 있으며 쓰기 가능할 필요는 없습니다. 하위 파일 시스템은 다른 오버레이 파일 일 수도 있습니다. 상위 파일 시스템은 일반적으로 쓰기 가능하며 신뢰할 수있는 확장 속성 작성을 지원해야하며 readdir 응답에 유효한 d_type을 제공해야하므로 NFS는 적합하지 않습니다.

두 개의 읽기 전용 파일 시스템의 읽기 전용 오버레이는 모든 파일 시스템 유형을 사용할 수 있습니다.

디렉토리

오버레이는 주로 디렉토리를 포함합니다. 주어진 이름이 상위 및 하위 파일 시스템 모두에 나타나고 둘 중 하나의 비 디렉토리를 참조하면 하위 오브젝트가 숨겨집니다. 이름은 상위 오브젝트 만 나타냅니다.

상위 및 하위 오브젝트가 모두 디렉토리 인 경우 병합 된 디렉토리가 형성됩니다.

마운트시 마운트 옵션 "lowerdir"및 "upperdir"로 제공된 두 디렉토리는 병합 된 디렉토리로 결합됩니다.

mount -t overlay overlay -olowerdir=/lower,upperdir=/upper,workdir=/work /merged

"workdir"은 upperdir과 동일한 파일 시스템에있는 빈 디렉토리 여야합니다.

그런 다음 병합 된 디렉토리에서 조회가 요청 될 때마다 각 실제 디렉토리에서 조회가 수행되고 결합 된 결과는 오버레이 파일 시스템에 속하는 dentry에 캐시됩니다. 실제 조회 둘 다 디렉토리를 찾으면 둘 다 저장되고 병합 된 디렉토리가 작성되고, 그렇지 않으면 하나만 저장됩니다.

디렉토리의 이름 목록 만 병합됩니다. 메타 데이터 및 확장 된 속성과 같은 기타 컨텐츠는 상위 디렉토리에 대해서만보고됩니다. 하위 디렉토리의 이러한 속성은 숨겨져 있습니다.


4
workdir에 대한 설명을 주셔서 감사합니다. 그것은 상당히 최근의 변화였으며 어떤 이유로 든 'workdir'이 실제로 무엇을했는지에 대한 문서를 찾을 수 없었습니다. 내가 마지막으로 보았을 때 커널 도움말에 없었습니다. overlayfs IMO에 혼란의 층을 추가하고, 최신 버전이 없어도 사용할 수 있기를 바랍니다.
Chuck R

7

읽기 전용 루트 fs를 설정하는 overlayfs 용 스크립트를 포함하도록이 artikels를 확장했습니다.

도움이 되길 바랍니다.


1
다른 사람들이 한 작업 덕분에 Dustin과 나는 'overlayroot'라는 bantal 패키지를 quantal에 추가했습니다.이 패키지는 cloud-initramfs-tools 소스 패키지의 일부입니다.
smoser

2

최소 실행 가능 예

# Create the filesystems.
dd if=/dev/zero of=lower.ext4 bs=1024 count=102400
mkfs -t ext4 lower.ext4
cp lower.ext4 upper.ext4
mkdir lower upper overlay
sudo mount lower.ext4 lower
sudo mount upper.ext4 upper
sudo chown "$USER:$USER" lower upper
printf lower-content > lower/lower-file
# Upper and work must be on the same filesystem.
mkdir upper/upper upper/work
printf upper-content > upper/upper/upper-file
# Work must be empty. E.g. this would be bad:
#printf work-content > upper/work/work-file
# Make the lower readonly to show that that is possible:
# writes actually end up on the upper filesystem.
sudo mount -o remount,ro lower.ext4 lower

# Create the overlay mount.
sudo mount \
  -t overlay \
  -o lowerdir=lower,upperdir=upper/upper,workdir=upper/work \
  none \
  overlay \
;

# Interact with the mount.
printf 'overlay-content' > overlay/overlay-file
ls lower upper/upper upper/work overlay

# Write to underlying directories while mounted
# gives undefined behaviour.
#printf lower-content-2 > lower/lower-file-2
#printf upper-content-2 > upper/upper-file-2

# Unmount the overlay and observe state.
sudo umount overlay
ls lower upper/upper upper/work

# Cleanup.
sudo umount upper lower

GitHub의 업스트림 .

ls마운트 가있는 첫 번째 출력 :

lower:
lost+found  lower-file

overlay:
lost+found  lower-file  overlay-file  upper-file

upper/upper:
overlay-file  upper-file

upper/work:
work

ls마운트가없는 초의 출력 :

lower:
lost+found  lower-file

upper/upper:
overlay-file  upper-file

upper/work:
work

해석:

  • 낮음 : 오버레이에 쓴 후 변경되지 않았습니다.
  • 상단 : 오버레이 수정을 받았습니다
  • 오버레이 : 상단 및 하단의 파일을 표시합니다
  • 작업 : work/우리가 신경 쓰지 않아야 할 임의의 내용 ( 디렉토리)을 포함합니다.

적응 된 : 오버레이 FS 사용 예

여러 개의 하위 레이어가있는보다 복잡한 예는 다음과 같습니다. 오버레이가 여러 레이어로 다시로드 됨

Ubuntu 18.04, Linux 커널 4.15.0에서 테스트되었습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.