web-dev-qa-db-ja.com

/ etc / exports&マウントオプション

私の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を使用しているので、どちらを使用しますか?

6
Ryan

syncasyncは、2つの異なる状況で異なる意味を持ちます。

クライアントコンテキストでsyncを使用すると、ファイルへのすべての書き込みがサーバーにコミットされます。 asyncを指定すると、ファイルへのすべての書き込みnotがすぐにサーバーに送信されます。通常は、ファイルが閉じている場合のみです。そのため、同じファイルを開いている別のホストは、最初のホストによって行われた変更を認識しません。

NFSは「オープンに近い」一貫性を提供することに注意してください。つまり、他のクライアントは不可能ですとにかく他のユーザーが開いているファイルのデータは一貫している(または率直に言って、nfslockを使用しない場合はまったく一貫している)クライアント間の何らかの同期を追加します)。

サーバーコンテキスト(デフォルト)でsyncを使用すると、サーバーは、ストレージバックエンドが実際にデータを通知したときに、データが書き込まれたことを伝えるためだけに応答しますあった書き込まれました。サーバーコンテキストのasyncは、ファイルが実際に書き込まれたかどうかに関係なく、サーバーにファイルが書き込まれたかのようにサーバーに応答させます。これはかなり高速ですが、データのコミットに問題がある可能性があるため、非常に危険です!

ほとんどの場合、クライアント側ではasync、サーバー側ではsyncです。これにより、NFSの動作方法に関してかなり一貫した動作が提供されます。

18
Matthew Ife

基本的にMIfeの発言。これらのオプションは状況依存です。重要な部分はマンページにあります:

_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)は、nfs.conf(5)の_nfs.client.allow_async_オプションも有効になっている場合にのみ、asyncオプションが受け入れられると述べています(また、 sysctl(8))を介して設定

したがって、クライアントでasyncを要求でき、書き込み要求は、それらがサーバーに到達したと想定します。サーバーでsyncを指定したため、データが実際にディスクに書き込まれたときに、クライアントからの要求を満たします。 (もちろん、サーバー上のローカルファイルシステムは、「sync」を使用してマウントすることもできますが、「async」がデフォルトのようです)

クライアントのマウントオプションに関するWord:* rsize&wsizeは、デフォルトでTCPマウント用に32768に設定されています。* proto = tcpがデフォルトで、サポートされていない場合はudpにフォールバックしますサーバー* vers = 3がデフォルトで、サーバーがサポートしていない場合は2にフォールバックします

0
ckujau