Вот моя установка: одна машина с NFS-сервером (v4), несколько клиентских NFS-машин.
Когда клиентская машина записывает файлы в точку монтирования NFS, другие клиенты мгновенно видят новый контент: нет проблем.
Но когда серверная машина изменяет содержимое файла, это новое содержимое не отображается на клиенте, пока я не сделаю ls
каталога от клиента.
Я абсолютно озадачен этим несоответствием ... любая помощь будет принята с благодарностью!
Информация:
Добавление в качестве ответа на основе вашего комментария.
Решение - добавить lookupcache=none
к вашим параметрам монтирования nfs.
Что происходит, так это то, что в первый раз, когда ваш клиент читает файл, он выполняет поиск по NFS, чтобы получить идентификатор файла NFS. Затем он кэширует идентификатор файла NFS, и когда вы возвращаетесь, чтобы открыть файл, он использует кеш. Обычно это не проблема, поскольку при обновлении файла его fileid остается неизменным. Но по какой-то причине старый файл удаляется, и создается новый (или переименовывается, или что-то там, где это не тот файл).
Обычно это не проблема, поскольку когда ваш клиент пытается открыть идентификатор файла, которого там нет, он получит сообщение об ошибке от сервера и выполнит еще один поиск, чтобы получить новый идентификатор файла. Но по какой-то причине сервер NFS позволяет клиенту открыть этот старый идентификатор файла. Возможно, у другого клиента файл открыт и он еще не удален, я не знаю.
В любом случае способ решить эту проблему - сказать клиенту всегда выполнять nfslookup перед открытием файла с помощью параметра монтирования nfs. lookupcache=none
. Обратной стороной этого является то, что это может быть дорого, если вы часто открываете файлы, поскольку это увеличивает трафик на сервер NFS.
Измените параметр монтирования на hard,intr
. я думаю, что по умолчанию в вашей системе может быть мягкое это поможет.
Вы также можете вручную обновить кеш NFS с помощью
sudo mount /nfs-mount -o remount
... если вы не хотите добавлять какие-либо параметры монтирования, снижающие производительность.