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