Назад | Перейти на главную страницу

Кеш NFS: содержимое файла не обновляется на клиенте при изменении на сервере

Вот моя установка: одна машина с 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

... если вы не хотите добавлять какие-либо параметры монтирования, снижающие производительность.