Похожий на Одновременный доступ по FTP.
Как обрабатывается одновременный доступ к файлам для NFS? Предположим, что один клиент обновляет / перезаписывает файл на сервере NFS, а процесс на сервере одновременно читает этот же файл непосредственно из файловой системы. Есть ли какая-то атомарная обработка чтения / записи файлов в NFS / Linux или мне нужно работать с файлами tmp для обеспечения согласованности данных?
Я беспокоюсь, что процесс чтения файла приведет к повреждению данных.
Определенные демоны (rpc.statd и rpc.lockd) помогают с блокировкой на уровне ОС, но в целом вы не хотите полагаться на нее, и, как пишет Джосип, многие приложения Unix реализуют свою собственную блокировку на уровне приложения.
Если у вас возникнет конкуренция за запись в файлы, стандартной практикой в первую очередь не является обслуживание таких файлов через NFS.
Эти конфликты обычно разрешаются блокировками. Это необходимо при применении, чтобы гарантировать надлежащую блокировку. Тем не менее, необходимо отметить, что большинство приложений имеют тенденцию блокировать файлы, особенно во время записи.
NFS реализует так называемую согласованность, близкую к открытой, которая представляет собой модель слабой согласованности кеша. См. Раздел 9.3.1 в NFS 4 RFC.
Другими словами, когда клиент, который модифицировал файл, закрывает файл, клиент сбрасывает записанные данные на сервер. Если какой-то другой клиент откроет файл после этого, он увидит новое содержимое. Или, если другой «клиент» - это локальный процесс на сервере, он увидит его сразу, без необходимости повторно открываться.
Если вам нужен более детальный контроль над кешированием, вам нужно использовать блокировки байтового диапазона. Опять же, см. Раздел 9.3.2 в NFS 4 RFC. В этом случае клиент NFS сбрасывает данные при снятии блокировки записи и повторно проверяет свой кэш при получении блокировки.