읽기 및 쓰기 액세스를 위해 루트 파일 시스템이 포함된 기존 디스크 이미지를 마운트 upperdir
지점 에 통합 마운트할 수 있습니까 ?overlayfs
/tmp/
기존 스크립트(원래 Ubuntu 12.04에서 작성되었으며 14.04로 포팅됨)를 사용하여 일부 오래된 디스크 이미지를 Ubuntu 16.04 시스템의 디렉터리에 통합 마운트하려고 합니다.
overlayfs
이미지 위에 쓰기 가능한 디스크 이미지를 생성하고 공동으로 마운트하는 데 사용된 이전 자동화 스크립트는 다음과 같습니다.ext2/3
squashfs
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