2013-01-31 2 views
3

파일이 대체되어 (동일 이름) 전체가 고쳐지지 않고 수정되지 않았다고 가정합니다 (즉, 임시 파일을 만든 다음 파일 이름을 바꿉니다).mmap 로컬 v/s nfs 파일 : 디스크에서 기본 파일을 바꾼 경우 어떻게됩니까?

커널이 여전히 디스크의 이전 파일 (inode)에 대한 핸들을 가지고 있기 때문에 변경 사항이 로컬 mmap에 영향을 미치지 않는다고 생각합니다.

그러나 NFS는 상태가 없으므로 mmap은 (혼란스러워하고 mmap의 (긴) 수명 동안 이전/새 파일 내용을 혼합합니까?

필자는 read/readv가 NFS 마운트 파일을 처리하는 유일한 안전한 방법이라고 생각합니다.

답변

6

파일에 대한 공개 참조가있는 경우 해당 참조는 파일 자체가 삭제되거나 이름이 변경된 경우에도 동일한 파일을 계속 참조하며 이름이 새로운 파일을 삭제 한 후에 참조는 파일 설명자 또는 메모리 매핑 일 수 있습니다. 이것은 POSIX의 일부이며 사용중인 파일 시스템의 유형에 관계없이 사실입니다 (또는 있어야합니다!).

즉, NFS 파일 시스템에서 파일을 열고 메모리에 매핑하면 맵핑을 해제하지 않는 한 해당 메모리 매핑을 계속 사용할 수 있습니다. 다른 프로세스 (또는 동일한 프로세스) 파일을 삭제하고 동일한 이름을 가진 새 파일로 대체합니다.

NFS 프로토콜은 상태 비 저장이므로 구현시이 케이스가 올바르게 처리되도록 특별한 조치를 취해야합니다. 어떻게 끝났는지 살펴본 이후로 매우 오랜 시간이 걸렸지 만, 솔라리스에서 마지막으로했을 때 링크 수를 0으로 줄이면 파일을 삭제하는 대신 특수 숨김 이름 (.nfsXXXXX)으로 파일 이름을 바꾸어 수행했습니다. 아직 그들에 대한 공개적인 언급이 있었다. 어쨌든, 어떤 트릭이든 구현에 의해 사용된다면, 파일 시스템의 사용자는 그것을 염려 할 필요가 없다.