- Есть ли надежный способ проверить наличие файла?В приведенном выше сценарии lstat для файла возвращает успех, а приложение завершается ошибкой только после попытки перемещения файла.
Вот и все нормальное поведение NFS.
- Как я могу вручную синхронизировать содержимое каталога на клиенте с сервером?
Это невозможно сделать вручную, поскольку NFS притворяется нормальной файловой системой, совместимой с POSIX.
Я однажды пытался закодировать код close () / open (), пытаясь как-то смягчить эффекты кэширования на стороне клиента NFS.В моем случае мне нужно было прочитать информацию, записанную в файл на другом сервере.Но даже повторный трюк имел эффект, близкий к нулю.И я не могу добавить fdatasync () к стороне записи, так как это замедляет работу всего приложения.
Мой опыт работы с NFS на сегодняшний день таков, что вы ничего не можете сделать.В критических путях кода я просто закодировал, чтобы повторить файловые операции, которые возвращают ESTALE.
- Некоторые общие советы о том, как написать надежный код управления файлами в случае NFS?
Модифицируйте все, что вы хотите, но если ваши клиенты хотят надежности, им не следует использовать NFS.
Например, моя компания рекламирует использование надлежащей распределенной файловой системы (я намеренно опускаю бренд) если клиент хочет надежности.Наше основное программное обеспечение не гарантированно работает на NFS, и мы не поддерживаем такие конфигурации.Но в нашем случае нам действительно нужны гарантии того, что как только данные будут записаны в FS, они станут доступны на всех других узлах.
Может быть достигнута согласованность в NFS, но за счет производительности, что делает NFS едва лигодные к употреблению.(Проверьте параметры монтирования.) NFS кеширует как сумасшедший, чтобы скрыть тот факт, что это файловая система сервера.Чтобы сделать все операции согласованными, клиент NFS должен был бы синхронно переходить на сервер NFS для каждой маленькой операции, минуя локальный кэш.И это никогда не будет быстрым.
Но так как мы говорим о Linux здесь, можно посоветовать клиентам программного обеспечения для оценки доступных кластерных файловых систем.Например, RedHat теперь официально поддерживает GFS .Я слышал о людях, использующих CodaFS, но не имею точной информации об этом.