이 질문은 제가 겪고 있는 기술적인 문제와는 아무런 관련이 없습니다. 디자인 결정을 이해하는 것입니다.
나에게 질문은 "Linux의 마운트 지점이 기존 디렉터리여야 하는 이유는 무엇입니까?"입니다. 두 부분이 있습니다.
- 마운트 지점이 디렉터리여야 하는 이유는 무엇입니까?
- 마운트 지점이 기존 파일이어야 하는 이유는 무엇입니까?
두 시나리오 모두 나에게는 의미가 없습니다.
이제 어떤 이유로 마운트 지점이 존재해야 한다고 가정하면 분명히 VFS는 FS 자체가 지원하지 않는 작업을 수행합니다. 그렇다면 마운트 지점이 디렉터리인지 확인하는 이유는 무엇입니까? 내가 생각할 수 있는 유일한 반론은 "그렇습니다. 하지만 응용 프로그램이 이미 특정 경로가 디렉토리를 가리키는 것으로 결정했다면 어떻게 될까요?"입니다. 이에 대해 저는 "글쎄, 어쨌든 해당 경로만 갖고 있다면, 설치되지 않은 경우에도 디렉토리를 가리킬 수도 있고 더 이상 존재하지 않을 수도 있으며 설치와 상관없이 계속 액세스할 수 있습니다."
질문의 두 번째 부분은 나에게 훨씬 덜 이해가 됩니다. 다시 말하지만, VFS는 FS가 지원하지 않는 작업을 수행하고 있습니다. 그렇다면 FS가 말하는 것에 왜 관심이 있습니까? 또는 우리가 관심을 갖기로 결정했다면 왜 아무것도 강요하지 않고 무언가가 존재하도록 강요해야 할까요? 물론, 아무것도 없다면 누군가가 나중에 뭔가를 만들려고 한다면 어떤 일이 일어날지에 대한 질문을 해결해야 합니다. 그러나 그것은 매우 간단한 일인 것 같습니다. 반면에 무언가가 존재하도록 강제하면 마운트가 있을 때 항상 더 높은 수준의 FS 하위 트리가 숨겨집니다. 이로 인해 이전에 겪었던 것과 반대되는 문제를 포함하여 여러 가지 다른 문제가 발생하는 것 같습니다. 누군가가 콘텐츠를 삭제하려고 하면 어떻게 되나요? 그러나 이는 "프로세스가 현재 이 하위 트리를 탐색 중이거나 프로세스의 비밀번호가 이 하위 트리에 있으면 어떻게 될까요?"와 같은 질문으로 이어지기도 합니다. 및 "상위 FS의 공간을 비워야 하고 삭제할 파일이 해당 하위 트리에 있으면 어떻게 되나요?"
나는 이 디자인 결정이 내려진 지점을 반드시 찾고 있는 것은 아닙니다(물론 그것이 훨씬 과거로 거슬러 올라간다고 상상하기 때문에 아는 것이 흥미로울지라도). 나는 이 디자인 결정의 이유를 찾고 있습니다.
답변1
Unix에서는 디렉토리도 파일이고 그 내용은 하위 파일 목록입니다.
동시에 빈 디렉토리 /dev/sdb1
에 마운트하려고 한다고 가정합니다 ./mnt/usb
/mnt
기존 마운트 지점 없이 마운트가 허용되는 경우 마운트 후:
- 넌 방문 할 수있다
/mnt/usb
- 그러나 목록에
/mnt
이름이 지정된 항목이 없습니다usb
.
이로 인해 불일치가 발생할 수 있습니다.
/mnt
따라서 목록을 동기화하려면 마운트 지점이 기존 파일이어야 합니다 . 기존 파일은 디렉토리일 필요도 없으며 일반 파일일 수도 있습니다.