Как принудительно обновить кэш 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. Особенно в разделе "Согласованность данных и метаданных".