Как принудительно обновить кэш NFS при проверке вновь созданного файла?

Когда файл создается при совместном монтировании Linux NFS, клиентом является Linux или Mac. Наличие или отсутствие файла является ключом к тому, что делать дальше, но проверка не всегда возвращает правильный результат:

Например, я делаю это в Perl, это все еще не работает хорошо, особенно с компьютерами Mac

write_key_file();  # write a file that must be checked before proceeding

Следующие проверки не всегда могут вернуть true, если файл существует

Проблема - эта команда в perl не вернула правильный статус в системе NFS:

if( -e $file){}

Подслушано решение, которое не сработало:

 sleep(5);   # wait 5 seconds
 system("ls -ltr"); # force to cache?
 if(-e $file){}

Я не собираюсь проверять каждый файл, как это, но есть несколько ключевых мест, где важно получить правильный статус файла.

Есть ли у нас более эффективные способы принудительного обновления кэша NFS для определенного файла в определенном каталоге? Благодарю.

Я не уверен, что это проблема XY, но есть несколько слабых мест, которые могут быть все решения.

A - настройка клиентов NFS

Если на этом этапе есть решение, было бы здорово!

B - код выхода или код возврата функции записи

$exit_code = write_key_file();

Проблема с этим, не все записи находятся в рамках блока кода. это только решит часть проблемы.

C - отключить кэш NFS для конкретного файла или каталог для проверки файлов

Мне нужно убедиться, возможно ли это и как? если нет и почему?

и я открыт для всех возможных решений, никаких решений или других возможностей.

1 ответ

Решение

Это решение относится к категории B: код выхода или код возврата функции записи.

...только open() а также fopen() Нужно гарантировать, что они получат согласованные дескрипторы для конкретного файла для чтения и записи. stat и друзья не обязаны получать новые атрибуты. Таким образом, для обеспечения когерентности кэша, близкого к открытому, только open() а также fopen() считаются "открытым событием", когда свежие атрибуты должны быть немедленно получены с сервера [1].


Следующие решения относятся к категории A: настройка клиентов NFS
то есть, если вы НЕ ожидаете, что кэшированные записи файла / директории будут обслужены клиенту, отключите кэширование.

Настройте общий кеш

Если файл в монтировании NFS (чье существование проверяется) создается другим приложением на том же клиенте (возможно, с использованием другой точки монтирования для того же экспорта NFS), рассмотрите возможность использования единого общего кэша NFS на клиенте.

Использовать sharecache возможность настройки монтирования NFS на клиенте.

Эта опция определяет, как кеш данных клиента и кеш атрибутов совместно используются при монтировании одного и того же экспорта более одного раза одновременно. Использование одного и того же кэша снижает требования к памяти на клиенте и предоставляет идентичное содержимое файла приложениям, когда один и тот же удаленный файл доступен через разные точки монтирования.


Настройка NFS-монтирования без кеширования

Отключить кеширование атрибутов.

Смонтируйте общий ресурс NFS на клиенте с помощью noac вариант.

Также можно отключить атрибуты кэшированных каталогов.

использование acdirmin=0,acdirmax=0 установить таймауты кеша на 0 (эффективно отключив кеширование).


Настройка NFS-монтирования для игнорирования поисковых кешей

использование lookupcache=positive ИЛИ ЖЕ lookupcache=none

(Доступные Варианты: all, positive а также none)

При попытке получить доступ к записи каталога через монтирование NFS,
если запрошенная запись каталога существует на сервере, результат называется positive,
если запрошенная запись каталога не существует на сервере, результат называется negative,

Если lookupcache опция не указана, или если all указан, клиент предполагает, что оба типа записей кэша каталога действительны, пока не истечет срок действия кэшированных атрибутов их родительского каталога.

Если pos или же positive Если клиент указывает, что положительные записи действительны до тех пор, пока не истечет срок действия кэшированных атрибутов их родительского каталога, он всегда повторно проверяет отрицательные значения, прежде чем приложение сможет их использовать.

Если none указан, клиент повторно проверяет оба типа записей кэша каталогов, прежде чем приложение сможет их использовать. Это позволяет быстро обнаруживать файлы, которые были созданы или удалены другими клиентами, но может повлиять на производительность приложений и серверов.


Рекомендации:
1. Непротиворечивость кеша в Linux NFS-клиенте
2. NFS - обнаружение удаленно созданных файлов программно?
3. NFS-кеш: содержимое файла не обновляется на клиенте при изменении на сервере
4. Справочная страница NFS. Особенно в разделе "Согласованность данных и метаданных".

Другие вопросы по тегам