Назад | Перейти на главную страницу

/ etc / export & mount option

На моем сервере Linux у меня есть следующие параметры в / etc / exports

/home *(rw,sync,no_subtree_check,no_root_squash)

И я монтирую с Mac, используя

mount -t nfs -o resvport,rw,noatime,soft,intr,rsize=32768,wsize=32768,timeo=900,retrans=3,proto=tcp,vers=3,async 192.168.1.121:/home /Volumes/home

Как видите, сервер указывает sync но мой вариант монтирования использует async, так какой из них будет использоваться?

sync и async имеют разное значение для двух разных ситуаций.

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

Обратите внимание, что NFS предлагает согласованность "близко к открытию", что означает, что другие клиенты не могут тем не мение предполагать, что данные в файле, открытом другими, согласованы (или, откровенно говоря, согласованы вообще, если вы не используете nfslock чтобы добавить некоторую форму синхронизации между клиентами).

sync в контексте сервера (по умолчанию) заставляет сервер отвечать только о том, что данные были записаны, когда серверная часть хранилища фактически сообщает ему данные был написано. async в контексте сервера заставляет сервер просто отвечать, как если бы файл был записан на сервере, независимо от того, действительно ли он его записал. Это намного быстрее, но также очень опасно, поскольку при фиксации данных могут возникнуть проблемы!

В большинстве случаев, async на стороне клиента и sync на стороне сервера. Это предлагает довольно последовательное поведение в отношении того, как должен работать NFS.

В основном то, что сказал Майфе; эти параметры зависят от контекста. Важная часть находится на страницах руководства:

exports(5)
async   This option allows the NFS server to violate the NFS protocol and reply to
        requests before any changes made by that request have been committed to 
        stable storage  (e.g. disc drive).

и на клиенте (Mac):

mount_nfs(8)
async   Assume that unstable write requests have actually been committed to stable
        storage on the server, and thus will not require resending in the event
        that the server crashes.

Примечание: на Mac mount_nfs(8) заявляет, что async вариант будет учитываться, только если nfs.client.allow_async вариант в nfs.conf(5) также включен (также может быть установлен через sysctl(8))

Итак, вы можете запросить async на клиенте и запросы на запись будут предполагать, что они достигли другого сервера. Поскольку вы указали sync на сервере он будет выполнять запросы от клиента, когда данные будут фактически записаны на диск. (Конечно, ваши локальные файловые системы на сервере также могут быть смонтированы с помощью "синхронизации", хотя по умолчанию используется "асинхронный")

Несколько слов о параметрах монтирования на клиенте: * rsize и wsize по умолчанию установлены на 32768 для монтирования TCP. * proto = tcp - по умолчанию, вернется к udp, если не поддерживается сервером * vers = 3 - по умолчанию, вернется к 2, если не поддерживается сервером