물론 시스템은 하나의 디렉토리에 두 가지가 설치되는 것을 방지합니다.
그러나 최상위 디렉터리에 FUSE 프로그램을 탑재하고 하위 디렉터리에 다른 FUSE 프로그램을 탑재하면 어떻게 될까요?
하위 디렉터리에서 작업을 호출하면 정확히 무슨 일이 발생하나요?
내 가정은 처음에는 상위 FUSE에서 마운트와 관련된 작업을 거친 다음 하위 FUSE에서 호출하는 실제 작업으로 이동한다는 것입니다.
그렇죠?
편집: 실수로 한 디렉토리에 두 가지를 설치할 수 없었던 것으로 나타났습니다. 그렇다면 두 개의 다른 FUSE 프로그램이 동일한 디렉토리에 마운트되면 어떤 FUSE 프로그램이 우선순위를 갖습니까?
답변1
물론 시스템은 하나의 디렉토리에 두 가지가 설치되는 것을 방지합니다.
불필요한. 필요에 따라 동일한 디렉터리를 여러 번 마운트할 수 있습니다.
mkdir /tmp/foo /tmp/bar /tmp/baz
mount --bind /tmp/foo /tmp/baz
mount --bind /tmp/bar /tmp/baz # <-- no error
그러나 최상위 디렉터리에 FUSE 프로그램을 탑재하고 하위 디렉터리에 다른 FUSE 프로그램을 탑재하면 어떻게 될까요?
FUSE 프로그램에 의해 마운트가 제어되지 않는 경우에도 동일한 상황이 발생합니다. 새 마운트 "아래"에 있는 디렉토리 트리의 상단 부분은 더 이상 액세스할 수 없습니다(이전에 열린 파일 핸들을 통한 경우 제외).
내 가정은 처음에는 상위 FUSE에서 마운트와 관련된 작업을 거친 다음 하위 FUSE에서 호출하는 실제 작업으로 이동한다는 것입니다.
그렇죠. Linux 커널에는 "dentry" 캐시가 있으므로 디렉터리가 이미 커널 캐시에 있는 경우 "최상위" FUSE 프로그램은 마운트 작업이나 하위 FUSE에서 발생하는 작업에서 이벤트를 반드시 가져올 필요는 없습니다.
답변2
모든 파일 시스템은 어느 위치에나 마운트될 수 있습니다. 이 마운트 지점 내의 파일에 대한 모든 액세스는 주변 파일 시스템이 아닌 해당 위치에 마운트된 파일 시스템에만 표시됩니다. 이는 다른 설치와 다르지 않으며 (반드시) 루트 파일 시스템 내에 위치합니다.
외부 파일 시스템이 아는 한, 마운트 지점은 단지 디렉터리일 뿐입니다. 관점에서 볼 때 해당 디렉터리 내에 없는 파일에 대한 요청을 처리하는 방법을 모르므로 가정이 올바르지 않습니다. FUSE는 이 점에서 다른 파일 시스템과 다르지 않습니다.
먼저 루트에서 마운트 지점에 도달합니다.~ 할 것이다외부 파일 시스템을 탐색해야 합니다. 이것이 이 콘텐츠에 접근할 수 있는 유일한 지점이며, 그들은 나머지 경로가 무엇인지 전혀 모릅니다.