Occasionalmente il client NFS non legge i dati dalle esportazioni NFS in modo sincrono, ad esempio quando è stato scritto da un altro client NFS. Ad esempio, dopo che il client A NFS ha scritto un file con "echo hello> /NFS_mountpoint/file di test", il client B NFS non può leggere il file con "Nessun file del genere" oppure può leggere ma il contenuto del file potrebbe essere vecchio.
I client NFS memorizzano nella cache vari dati NFS. RFC 1813 per la specifica NFSv3 dice:
Clients can perform caching in varied manner.
e dice anche:
The NFS version 3 protocol does not define a policy for caching on the client or server. In particular, there is no support for strict cache consistency between a client and server, nor between different clients. Therefore this is designed behavior of Linux NFS client.
Pertanto questo è il comportamento progettato del client NFS di Linux. Disabilita/ignora la memorizzazione nella cache del client NFS configurando le opzioni di montaggio del client NFS o leggi/scrivi i dati con O_DIRECT /O_SYNC .
Per disabilitare tutte le cache per il client NFS, aggiungi "sync ” per l'opzione di montaggio, es.
# mount -t nfs -o vers=3,sync NFS_Server:/NFS_Export/ /NFS_MountpointNota :Questa opzione può comportare un degrado delle prestazioni. Testare attentamente questa opzione sul sistema di test prima di applicarla a un sistema di produzione.
Per disabilitare le voci della directory di memorizzazione nella cache dal client NFS, aggiungi "noac,lookupcache=none ” per l'opzione di montaggio, come nell'esempio seguente:
# mount -t nfs -o vers=3,noac,lookupcache=none NFS_Server:/NFS_Export/ /NFS_MountpointNota :Esistono differenze tra noac e actimeo=0. actimeo=0 può memorizzare nella cache le modifiche all'attribuzione, ma noac no. Pertanto noac è più sicuro di actimeo=0, tuttavia può avere un impatto sulle prestazioni. Va anche bene impostare entrambe le opzioni, per limitare ulteriormente questo.