Por que os eventos inotify são diferentes em uma montagem NFS?

10

Há algum tempo, notei que os eventos relatados por inotify são diferentes quando o arquivo é salvo em uma montagem NFS em comparação a um sistema de arquivos local.

O VFS subjacente não deveria fornecer uma visão uniforme das operações de arquivos?

O seguinte é o rastreio do VIM salvando um arquivo no Debian 7.1 (Linux 3.2)

Em uma montagem 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 )

Em um sistema de arquivos local

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)

Salvar um arquivo com o EMACS também revela um diferente comportamento

Em uma montagem NFS:

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

Em um sistema de arquivos local:

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)

Estes testes foram executados com inotify-touch.c

    
por eradman 03.07.2013 / 23:02

1 resposta

4

inotify suporte a NFS?

Olhando em volta da rede, parece que o inotify pode suportar o NFS, mas de uma forma muito limitada.

exposição # 1

O motivo é explicado neste StackOverflow Q & A intitulado: inotify with NFS .

trecho da resposta aceita

inotify requires support from the kernel to work. When an application tracks a directory, it asks the kernel to inform it when those changes occur. When the change occurs, in addition to writing those changes to disk, the kernel also notifies the watching process.

On a remote NFS machine, the change is not visible to the kernel; it happens entirely remotely. NFS predates inotify and there is no network level support for it in NFS, or anything equivalent.

exposição # 2

Pesquisando um pouco mais, se você observar as Perguntas frequentes sobre inotify

Q: Can I watch sysfs (procfs, nfs...)?

Simply spoken: yes, but with some limitations. These limitations vary between kernel versions and tend to get smaller. Please read information about particular filesystems.

Então, é suportado?

Acho que o que você está experimentando é que o NFS não fornece um equivalente de maçãs a maçãs de todos os mesmos recursos que os sistemas de arquivos montados localmente.

Por exemplo, de um thread do nfs linux :

  • O CIFS possui recursos de notificação incorporados (oplocks)
  • O NFS fornece "concessões" para notificação

O ponto aqui é que sistemas de arquivos alternativos, como CIFS e NFS, oferecem suporte muito básico, se houver, diretamente para inotificar.

Estado do NFS v4

excerto de Artigo da IBM sobre o estado do NFS v4

NFS version 4 provides a protocol for the client to establish or reestablish state, and associates ownership of subsequent server stateful operations to previously established states. To resolve the absent client problem, the NFS version 4 client must routinely refresh the state within the server-specified lease time. Upon lease time-out, the server may release resources for the client and make them available to other applications.

  • A client obtains the server-specified lease time-out attribute by issuing a getattr operation. getattr is not a stateful operation, thus it does not require prior state to be established. A getattr operation may precede a setclientid or setclientid_confirm operation.
  • Refer to the NFS server's leasetime site attribute for setting and tuning lease time periods. *
    
por 03.07.2013 / 23:20