NFS 把远程目录通过网络共享出去
一个 NFS 导出,是服务器上的一个目录加上一份允许访问它的客户端名单;而描述它的那个文件,并不是真正对外服务的东西。/etc/exports 由 exportfs 读取,exportfs 把主导出表写进 /var/lib/nfs/etab,客户端发来 MOUNT 请求时,是 rpc.mountd 去查这张表。三个文件:一个由人编辑,另外两个才决定实际发生什么。 这层间接就是最常见的 NFS 事故的来源:导出列表看着没问题,客户端却被拒,因为文件变了而表没变。剩下的配置归结为两个更难的问题——服务器认为一个请求带着什么身份,以及一个回答“已写入”的回复能不能挺过服务器崩溃。 文件与表 /etc/exports 的一行是 <目录> <客户端>[(<选项>)] ...,所以 /srv/data 10.0.0.0/24(rw,sync,no_subtree_check,root_squash) 把某个目录以四个选项导出给一个网段,同一行后面还能再接一组客户端、带自己的一套选项。客户端可以写成主机名、通配符、CIDR 网段或 netgroup;# 之后到行尾是注释,行尾反斜杠表示续行。文件里的内容在 exportfs -ra 依据它重建表之前一律不生效,而 exportfs -v 打印的是真正被加载的那张表,所以它既能用来核对文件里的每一条,也能用来发现表里多出来的东西。 showmount -e 从客户端一侧展示同一张表:它问的是 mount 守护进程而不是文件,所以它回答的是“服务器认为自己导出了什么”,而不是“我刚才写了什么”。fixture 精确复现了这个陷阱:把 /srv/newshare 追加进导出文件却没有重新导出之后,文件里有四条,表里只有三条,客户端请求这个新共享得到的是 NOENT。 ...