/etc/exports 和 mount 选项

/etc/exports 和 mount 选项

在我的 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,那么将使用哪一个?

答案1

sync并且async对于两种不同的情况具有不同的含义。

sync在客户端上下文中,使对文件的所有写入都提交到服务器。 async导致对文件的所有写入不是被立即传输到服务器,通常仅在文件关闭时才传输。因此,打开同一文件的另一台主机不会看到第一台主机所做的更改。

请注意,NFS 提供“接近开放”的一致性,这意味着其他客户端无法反正假设其他人打开的文件中的数据是一致的(或者坦率地说,如果您不习惯nfslock在客户端之间添加某种形式的同步,那么它完全是一致的)。

sync在服务器上下文中(默认)导致服务器仅在存储后端实际通知数据时才回复说数据已写入曾是在服务器上下文中写入。 async服务器只会做出响应,就好像文件已写入服务器,而不管它是否确实已写入。这要快得多,但也非常危险,因为数据可能在提交时出现问题!

在大多数情况下,async在客户端和sync服务器端。这提供了与 NFS 应如何工作相当一致的行为。

答案2

基本上就像 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)表示只有启用了中的选项时,该async选项才会被接受(也可以通过 设置)nfs.client.allow_asyncnfs.conf(5)sysctl(8)

因此,您可以async在客户端上发出请求,写入请求将假定它们已到达服务器。由于您sync在服务器上指定,因此当数据实际写入磁盘时,它将满足来自客户端的请求。(当然,服务器上的本地文件系统也可以使用“同步”安装,尽管“异步”似乎是默认设置)

关于客户端上的挂载选项:* 对于 TCP 挂载,rsize 和 wsize 默认设置为 32768。* proto=tcp 是默认值,如果服务器不支持,将回退到 udp * vers=3 是默认值,如果服务器不支持,将回退到 2

相关内容