낮은 하위 마운트 위치에 오버레이를 마운트하는 방법은 무엇입니까?

낮은 하위 마운트 위치에 오버레이를 마운트하는 방법은 무엇입니까?

chroot 환경을 위해 Overlayfs를 설정하려고 합니다. 환경은 여러 개의 읽기 전용 squashfs 파일 시스템(아래)과 쓰기 가능한 디렉터리(위)로 구성됩니다.

까다로운 부분은 단 하나의 squashfs 파일 시스템에만 chroot의 루트 디렉토리가 있고 다른 파일 시스템에는 루트로 돌아가는 전체 조상 체인이 포함되어 있지 않다는 것입니다. 그래서 나는 다음을 시도한다:

mount -o ro,loop base.squash /media/foo/myimage
mount -o ro,loop home.squash /media/foo/myimage/home/
mount -t overlay overlay -o lowerdir=/media/foo/myimage,upperdir=/var/lib/myimage,workdir=/var/chache/myimage /media/bar

/media/bar이로 인해 다음 과 같은 (놀라운) 결과가 나왔습니다 .오직 base.squash그리고 /var/lib/myimage. home.squash무시됨 공백으로 둡니다 /media/bar/home.

추가 하위 레이어로 추가하는 방법 에 대해 문서를 살펴봤지만 home.squash모두 모든 레이어가 루트의 조상 디렉터리에 대한 완전한 체인을 포함할 것이라고 가정하는 것 같습니다 /.

내용을 변경하지 않고 squashfs 이미지를 어떻게 마운트해야 합니까?

답변1

이 문제에 대한 해결책을 찾았습니다.파일 시스템 병합중첩된 여러 마운트의 계층 구조를 overlayfs가 작동하는 단일 마운트 지점으로 다시 매핑합니다. 예를 들어

mount -o ro,loop file1 /mnt/dir/part1
mount -o ro,loop file2 /mnt/dir/part2
mount.mergerfs /mnt/dir /mnt/view
mount -t overlayfs lowerdir=/mnt/view,... 

답변2

이것은 놀라운 발견이며 해결책을 찾고 싶습니다. 바인드 마운팅의 몇 가지 변형을 시도했지만 원하는 결과를 얻지 못했습니다.

그러나 분명히 작동해야 하는 중첩 재정의와 관련된 또 다른 문제를 보았지만 Linux 커널 4.2에는 해당 버전에서 작동하지 못하게 하는 회귀 문제가 있습니다. 운 좋게도 저는 4.15이므로 이 방법을 시도해 보았습니다.

mount -o ro,loop base.squash /media/foo/myimage
mount -o ro,loop home.squash /media/foo/myhome
mount -t overlay overlay -o lowerdir=/media/foo/myimage,upperdir=/var/lib/myimage,workdir=/var/chache/myimage /media/bar
mount -t overlay overlay -o lowerdir=/media/foo/myhome,upperdir=/var/lib/myhome,workdir=/var/chache/myhome /media/bar/home

이렇게 하면 원하는 효과가 있는 것 같습니다.

"upperdir" 및 "workdir" 부분은 어딘가에 작동한다고 명시되어 있지만 읽기 전용 재정의를 생성하므로 지정하지 않으려고 했습니다. 그러나 그것은 작동하지 않았습니다. 적어도 나에게는 그렇지 않습니다.

관련 정보