Overlayfs와 함께 바인드 마운트 사용

Overlayfs와 함께 바인드 마운트 사용

OverlayFS와 함께 바인드 마운트를 사용하여 가상 마운트를 생성하려고 합니다. 최적의 상황은 다음과 같습니다.

차트

루트 폴더는 새 하위 폴더에 바인드 마운트되어 하위 디렉터리로 사용됩니다. 오버레이 차이를 저장할 새로운 상위 디렉토리, work_dir구성 요소를 위한 디렉토리 workdir, 마지막으로 mnt오버레이 설치를 위한 디렉토리를 만듭니다.

내가 겪고 있는 문제는 일단 설정되면 번들 마운트 항목이 오버레이에 표시되지 않는다는 것입니다.

재귀 마운트와 공유/비공유 마운트 사용을 포함하여 마운트의 다양한 속성을 살펴보았습니다. 또는 루트의 개별 폴더를 lowerdir 아래의 개별 폴더에 바인딩하려고 시도했지만 여전히 파일이 없습니다. 마운트에 대한 설정이 누락되어 있습니까? 아니면 이것이 불가능합니까?

답변1

바인드 마운트는 overlayfs 마운트 지점 내에서 생성될 수 있습니다. mount(8) 명령이 이 옵션을 제공하지 않기 때문에 C 코드를 통해서만 이 작업을 수행할 수 있습니다.

<fd> = openat(AT_FDCWD, <merge-dir>, O_RDONLY|O_CLOEXEC|O_PATH)
mount(<source-dir>, "/proc/self/fd/<fd>", "", MS_BIND|MS_REC, NULL)
close(<fd>)

<병합 디렉토리>호스트 시스템에 상대적으로 설치될 디렉토리입니다.가장 낮은/낮은당신의 경우에는

<소스 디렉터리>마운트할 디렉토리이고,<루트 디렉터리>당신의 경우에는. 이는 호스트 시스템과도 관련이 있습니다.

<FD>이는 openat에서 반환된 파일 설명자 int이며 /proc/self/fd/string과 연결되어야 합니다.

이 프로세스는 Overlayfs를 장착한 직후 또는 설치 후 언제든지 완료할 수 있습니다.

--mount type=bind 옵션을 사용하여 실행하면 다이어그램에 설명된 대로 정확하게 진행되는 것처럼 보이는 "docker run"의 syscall을 보고 이 사실을 발견했습니다. 오버레이 마운트는 하위 마운트를 암시적으로 포함하지 않으므로(MS_REC의 경우에도)오픈(2)마운트할 디렉터리에 해당하는 파일 설명자를 여는 데 사용할 수 있습니다. /proc/self/fd/에 있는 파일 설명자 장치 파일은 바인드 마운트 대상으로 사용될 수 있으며 설명자가 닫힌 후에도 열린 상태로 유지됩니다.

관련 정보