У меня есть бездисковый хост «A», на котором установлен каталог NFS на сервере «B». Процесс на A записывает в два файла F1 и F2 в этом каталоге, а процесс на B отслеживает изменения в этих файлах. Предположим, что B опрашивает изменения быстрее, чем ожидается, что A их внесет. Процесс A ищет заголовок файлов, записывает данные и сбрасывает их. Процесс B ищет заголовок файлов и читает.
Здесь любой гарантии о том, как порядок изменений, выполненных A, будет обнаружен в B?
В частности, если A поочередно записывает в один файл, а затем в другой, разумно ли ожидать, что B заметит чередующиеся изменения в F1 и F2? Или B мог бы обнаружить серию изменений на F1, а затем серию на F2?
Я знаю, что в вопросе заложено множество предположений. Например, я практически уверен, что даже работая только с одним файлом, если A выполняет 100 операций с файлом, B может увидеть меньшее количество изменений, дающих тот же результат, из-за того, что NFS кэширует некоторые действия над A перед они передаются в B. И, конечно же, возникнут проблемы с одновременным доступом к файлам, даже если NFS не задействован, а процесс чтения и записи выполнялся на одном компьютере. настоящий файловая система.
Причина, по которой я даже задаю вопрос здесь, заключается в том, что в большинстве случаев установка, описанная выше делает обнаруживать изменения в B в том же порядке, что и в A, но иногда некоторые события проходят в транспонированном порядке. Итак, стоит ли пытаться заставить эту работу работать? Есть ли способ настроить NFS, чтобы он работал, возможно, настройки кеша или что-то в этом роде? Или подобного мелкозернистого поведения слишком много ожидать от NFS?
Я бы не стал полагаться на постоянный заказ по сети. Сама NFS обычно гарантирует только то, что после один клиент закрывается файл, другой клиент открытие он должен увидеть эти изменения. (И это ничего не говорит о наблюдаемом поведении файловой системы сервера.)
Но какие у вас версии клиента, сервера и протокола NFS? Например, NFS-клиент ядра Linux изменил (по умолчанию) поведение кэширования атрибутов около версии 2.6.18, и вы можете монтировать с помощью -o sync
для отсутствия кеширования записи (данных или атрибутов). NFSv4 также обеспечивает больший контроль над поведением кеширования, чем NFSv3.
это
Предположим, что B запрашивает изменения
и
В частности, если A поочередно записывает в один файл, а затем в другой, разумно ли ожидать, что B заметит чередующиеся изменения в F1 и F2? Или B мог бы обнаружить серию изменений на F1, а затем серию на F2?
значит, что неважно какие гарантирует, что файловая система создает здесь состояние гонки.
То есть: вы не можете рассчитывать на порядок, в котором процесс B обнаруживает изменения.
Посмотрим, что будет, если
Вы могли бы захотеть увидеть ответ на другой вопрос, который ссылается на описание Transactional NTFS. Это действительно круто и может помочь в вашей ситуации.