Добавление в качестве ответа на основе вашего комментария.
Решение состоит в том, чтобы добавить lookupcache=none
в ваши параметры монтирования nfs.
Что происходит, так это то, что в первый раз, когда ваш клиент читает файл, он выполняет поиск NFS, чтобы получить NID fileid. Затем он кэширует fileid NFS, и когда вы возвращаетесь, чтобы открыть файл, он использует кеш. Обычно это не проблема, так как при обновлении файла его fileid остается неизменным. Но по какой-то причине старый файл удаляется, а новый создается (или переименовывается, или что-то, где его не совпадает с файлом).
Теперь обычно это не проблема, либо когда ваш клиент пытается открыть fileid, которого там нет, он получит сообщение об ошибке от сервера и выполнит другой поиск, чтобы получить новый fileid. Но по какой-то причине NFS-сервер позволяет клиенту открыть этот старый fileid. Возможно, другой клиент имеет открытый файл, и поэтому он еще не удаляется, я не знаю.
В любом случае, способ решить эту проблему - сказать клиенту всегда делать nfslookup перед открытием файла с помощью опции монтирования nfs lookupcache=none
. Недостатком является то, что это может быть дорого, если вы часто открываете файлы, так как это добавляет больше трафика на сервер NFS.
ls -i
на клиенте перед редактированием файла на сервере, а затем снова после. Посмотрите, изменится ли число. Если они это делают, потому что сервер заменяет файл, а клиент не замечает этого, пока не выполнит повторную проверку каталога. Если это так, попробуйте установить параметр монтированияlookupcache=none
и посмотрите, не изменится ли поведение.