NFS 마운트에서 inotify 이벤트가 다른 이유는 무엇입니까?


10

얼마 전에 나는 파일이 NFS 마운트와 로컬 파일 시스템에 저장 될 때 inotify에 의해보고 된 이벤트가 다르다는 것을 알았습니다.

기본 VFS가 파일 작업에 대한 통일 된 관점을 제공하지 않아야합니까?

다음은 데비안 7.1에서 파일을 저장 한 VIM의 흔적입니다 (Linux 3.2).

NFS 마운트에서 :

wd=1 mask = 32 (IN_OPEN)
wd=1 mask = 16 (IN_CLOSE_NOWRITE)
wd=1 mask = 2048 (IN_MOVE_SELF)
wd=1 mask = 4 (IN_ATTRIB)
wd=1 mask = 1024 (IN_DELETE_SELF)
wd=1 mask = 32768 )

로컬 파일 시스템에서

wd=1 mask = 32 (IN_OPEN)
wd=1 mask = 16 (IN_CLOSE_NOWRITE)
wd=1 mask = 2 (IN_MODIFY)
wd=1 mask = 32 (IN_OPEN)
wd=1 mask = 8 (IN_CLOSE_WRITE)
wd=1 mask = 4 (IN_ATTRIB)

EMACS로 파일을 저장하면 다른 행동이 나타납니다

NFS 마운트에서 :

wd=1 mask = 32 (IN_OPEN)
wd=1 mask = 16 (IN_CLOSE_NOWRITE)
wd=1 mask = 2048 (IN_MOVE_SELF)

로컬 파일 시스템에서 :

wd=1 mask = 32 (IN_OPEN)
wd=1 mask = 16 (IN_CLOSE_NOWRITE)
wd=1 mask = 2 (IN_MODIFY)
wd=1 mask = 32 (IN_OPEN)
wd=1 mask = 2 (IN_MODIFY)
wd=1 mask = 8 (IN_CLOSE_WRITE)

이 테스트는 inotify-touch.c로 실행 되었습니다.

답변:


4

NFS 지원을 수정 하시겠습니까?

인터넷을 살펴보면 inotify가 NFS를 지원하지만 매우 제한된 방식으로 보일 수 있습니다.

전시회 # 1

이유는이 StackOverflow Q & A에서 제목이 inotify with NFS 입니다.

허용 된 답변 에서 발췌

inotify는 커널의 지원이 필요합니다. 응용 프로그램은 디렉토리를 추적 할 때 변경 사항이 발생하면 커널에게 알려줍니다. 변경 사항이 발생하면 해당 변경 사항을 디스크에 쓰는 것 외에도 커널은 감시 프로세스에 알립니다.

원격 NFS 시스템에서는 변경 사항이 커널에 표시되지 않습니다. 그것은 완전히 원격으로 발생합니다. NFS는 inotify 이전의 것으로 NFS에서 이와 동등한 네트워크 수준의 지원은 없습니다.

전시회 # 2

inotify FAQ 를 보면 조금 더 연구

Q : sysfs (procfs, nfs ...)를 볼 수 있습니까?

간단히 말해 : 예, 그러나 몇 가지 제한 사항이 있습니다. 이러한 제한은 커널 버전마다 다르며 더 작아지는 경향이 있습니다. 특정 파일 시스템에 대한 정보를 읽으십시오.

지원됩니까?

궁극적으로 당신이 겪고있는 것은 NFS가 로컬 마운트 파일 시스템과 동일한 기능을 가진 애플에 사과를 제공하지 않는다는 것입니다.

예를 들어 A로부터 스레드 리눅스 NFS :

  • CIFS에는 알림 기능이 내장되어 있습니다 (oplocks)
  • NFS는 통지를위한 "리스"를 제공합니다

여기서 중요한 점은 CIFS 및 NFS와 같은 대체 파일 시스템은 직접적으로 inotify를 지원하는 경우 매우 기본입니다.

NFS v4 상태

NFS v4 상태에 대한 IBM 기사에서 발췌

NFS 버전 4는 클라이언트가 상태를 설정 또는 재설정하는 프로토콜을 제공하고 후속 서버 상태 저장 작업의 소유권을 이전에 설정 한 상태와 연결합니다. 부재 클라이언트 문제를 해결하려면 NFS 버전 4 클라이언트는 서버 지정 임대 시간 내에 정기적으로 상태를 새로 고쳐야합니다. 임대 시간이 초과되면 서버는 클라이언트의 리소스를 해제하여 다른 응용 프로그램에서 사용할 수있게합니다.

  • 클라이언트는 getattr 조작을 실행하여 서버 지정 임대 시간 제한 속성을 얻습니다. getattr은 상태 저장 작업이 아니므로 사전 상태를 설정할 필요가 없습니다. getattr 조작이 setclientid 또는 setclientid_confirm 조작보다 앞에 올 수 있습니다.
  • 임대 기간 설정 및 조정에 대해서는 NFS 서버의 임대 시간 사이트 속성을 참조하십시오. *

3
OP는 NFS에서 이벤트를보고있는 것으로 보이며 로컬 파일 시스템에서 보여지는 것과는 다릅니다. 연결된 질문과 답변은 inotifyNFS 에 이벤트 가 없음을 나타냅니다 .
iruvar
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.