읽기-쓰기 루트 파일 시스템 디스크 이미지를 OverlayFS upperdir로 사용할 수 있습니까?

읽기-쓰기 루트 파일 시스템 디스크 이미지를 OverlayFS upperdir로 사용할 수 있습니까?

읽기 및 쓰기 액세스를 위해 루트 파일 시스템이 포함된 기존 디스크 이미지를 마운트 upperdir지점 에 통합 마운트할 수 있습니까 ?overlayfs

/tmp/기존 스크립트(원래 Ubuntu 12.04에서 작성되었으며 14.04로 포팅됨)를 사용하여 일부 오래된 디스크 이미지를 Ubuntu 16.04 시스템의 디렉터리에 통합 마운트하려고 합니다.

overlayfs이미지 위에 쓰기 가능한 디스크 이미지를 생성하고 공동으로 마운트하는 데 사용된 이전 자동화 스크립트는 다음과 같습니다.ext2/3squashfs

cd /tmp
mkdir lower upper union
losetup /dev/loop1 /tmp/image.sfs
losetup /dev/loop2 /tmp/image.ext2
mount -t squashfs -o ro /dev/loop1 /tmp/lower
mount -t ext2 -o rw /dev/loop2 /tmp/upper
mount -t overlayfs -o rw,lowerdir=/tmp/lower,upperdir=/tmp/upper overlayfs /tmp/union

이 방법은 3.x 커널(아마도 3.18 이전)에서 마지막으로 사용되었으며 이 방법은 더 이상 작동하지 않는 것 같습니다. 이제 재정의에는 workdir다음과 같은 옵션이 필요합니다.

mount -t overlay -o rw,lowerdir=/tmp/lower,upperdir=/tmp/upper,workdir=/tmp/work overlay /tmp/union

묻다:4.x 커널에서 쓰기 가능한 상태로 기존 이미지를 마운트하고 사용하도록 자동화 스크립트를 조정할 수 있습니까? 디렉토리 root와 같은 항목을 포함하도록 다시 작성하지 않아도 되나요 ? work어떤 경우에는 다른 곳에서 사용이 중단될 수 있습니다.

문서에 따르면 원자성 쓰기를 허용 workdir하려면 동일한 파일 시스템의 빈 디렉터리여야 합니다 upperdir. 제가 보기에는 루트 파일 시스템 이미지를 읽기/쓰기로 통합 마운트하는 것이 불가능한 것 같습니다. 이는 workdir이미지에 존재해야 하며(데이터 디렉터리와 별도로) 루트 파일 시스템 이미지에서는 가능하지 않습니다.

가상 머신에 Ubuntu 14.04를 한꺼번에 로드하는 것을 고려했지만 이는 장기적인 솔루션이 아닙니다.


지금까지 최고의 시도:

동일한 데이터를 디스크에 반복적으로 쓰지 않기 위해 제가 생각해낸 유일한 해결책은 lowerdir두 이미지를 모두 값으로 마운트하고 마운트 위에 upperdir디렉터리를 workdir마운트하는 것 입니다. tmpfs그런 다음 자동 쓰기가 완료되고 오버레이 페더레이션이 마운트 해제된 후 rsync해당 위치의 변경 사항을 tmpfs마운트된 이미지에 복사할 수 있습니다. 예:ext2/3

mount -t overlay -o rw,lowerdir=/tmp/upper:/tmp/lower,upperdir=/tmp/tmpfs/root,workdir=/tmp/tmpfs/work overlay /tmp/union

...perform automated reads/writes...

umount /tmp/union

...rsync contents from /tmp/tmpfs/root to /tmp/upper...

그러나 사용 가능한 RAM에 따라 심각하게 제한되며 모든 자동화 스크립트에 추가하는 것은 보기 흉한 해킹입니다.

답변1

만들다추가 레벨이미지 파일에 중첩:

mkdir   /tmp/upper/upper
mkdir   /tmp/upper/work
mount -t overlay -o rw,lowerdir=/tmp/lower,upperdir=/tmp/upper/upper,workdir=/tmp/upper/work overlay /tmp/union

관련 정보