研究笔记 - 关于NFS的一些配置
原创大约 11 分钟
Linux对于NFS支持是很好的,Windows也可以通过打开可选功能进行支持,不过在Windows下使用时好像宿主机的文件系统会导致一些编码问题,Windows的NFS客户端并不支持UTF-8编码,除非做出巨大牺牲在系统全局开启,因此在投入使用之前需要进行充分的测试,目前来看似乎ext4不会出现该问题,而xfs会有此问题
server:nfs-kernel-server
cilent:nfs-common
Nobody: 65534(nobody) 65534(nogroup)
# /etc/exports
directory_to_share client(share_option1,...,share_optionN)
/mnt/disk1 192.168.31.0/24(fsid=0,rw,all_squash,no_root_squash,sync,no_wdelay,no_subtree_check,insecure,anonuid=1001,anongid=1001)
/mnt/disk2 *(rw,async,all_squash)
正面属性 | 说明 | 反面属性 | 说明 |
---|---|---|---|
rw | 共享目录可读可写 | ro | 共享目录只读 |
all_squash | 所有访问用户都映射为匿名用户或用户组 | no_all_squash | **(默认)**访问用户先与本机用户匹配,匹配失败后再映射为匿名用户或用户组 |
root_squash | **(默认)**将来访的root用户映射为匿名用户或用户组 | no_root_squash | 来访的root用户保持root帐号权限 |
anonuid= | 指定匿名访问用户的本地用户UID,默认为nobody(65534) | ||
anongid= | 指定匿名访问用户的本地用户组GID,默认为nogroup(65534) | ||
secure | **(默认)**限制客户端只能从小于1024的tcp/ip端口连接服务器 | insecure | 允许客户端从大于1024的tcp/ip端口连接服务器 |
sync | 将数据同步写入内存缓冲区与磁盘中,效率低,但可以保证数据的一致性 | async | 将数据先保存在内存缓冲区中,必要时才写入磁盘 |
wdelay | **(默认)**检查是否有相关的写操作,如果有则将这些写操作一起执行,这样可以提高效率 | no_wdelay | 若有写操作则立即执行,应与sync配合使用 |
subtree_check | **(默认)**若输出目录是一个子目录,则nfs服务器将检查其父目录的权限 | no_subtree_check | 即使输出目录是一个子目录,nfs服务器也不检查其父目录的权限,这样可以提高效率 |
普通用户
- 当设置
all_squash
时,客户端文件权限一律被映射为匿名用户(nobody) - 当设置
no_all_squash
时,客户端文件权限映射为服务端文件用户id相同的用户,因此,需要在客户端对应建立与服务端文件权限相同用户的一致id的用户,否则,映射过来之后,就会是nobody或者是直接id显示权限
Root用户
- 当设置root_squash时,客户端以root用户访问服务端时,被映射为nobody用户
- 当设置no_root_squash时,客户端以root用户访问服务端时,被映射为root用户,这提供了对远程目录的管理权限
exportfs
-a 全部挂载或卸载 /etc/exports中的内容
-r 重新读取/etc/exports 中的信息 ,并同步更新/etc/exports、/var/lib/nfs/xtab
-u 卸载单一目录(和-a一起使用为卸载所有/etc/exports文件中的目录)
-v 输出详细的共享参数
showmount -e localhost
showmount -e 192.168.31.10
mount -t nfs 192.168.31.10:/mnt/disk1 /mnt/home
mount.nfs: rpc.statd is not running but is required for remote locking.
mount.nfs: Either use '-o nolock' to keep locks local, or start statd.
mount.nfs: an incorrect mount option was specified
nfs mount 默认选项包括文件锁,依赖于portmap提供的动态端口分配功能。
/etc/init.d/rpcbind start
-o nolock
属性 | 说明 |
---|---|
soft/hard | 软挂载方式挂载系统,若NFS请求超时,则客户端向调用程序返回错误;如果使用硬连接方式则客户端一直重新请求直至成功。默认为hard |
timeo= | 客户端重传请求前等待时间。对于基于TCP的NFS服务,默认等待重传时间为60s。使用TCP协议时,NFS Client不执行任何超时backoff。对于UDP协议,client使用一个合适的算法,为常用的请求类型estimate合适的超时时间。但对不常用的请求类型使用timeo设置。如果timeo没有设置,不常用的请求类型1.1秒以后重试。在每次重发后,NFS Client会将timeout时间加倍,直到最大的60秒 |
retrans= | 客户端返回错误前的重传次数。默认为重传3次。retrans与soft参数一起使用时才有效 |
resize= | 每个READ命令字向服务器读取文件的最大字节数。实际数据小于或等于此值。resize必须是1024倍数的正整数,小于1024时自动设为4096,大于1048576时自动设为1048576。默认时,服务器和客户端进行协商后设置,对于拥塞的低速网络,可以将该值调小,向服务器发送较短的请求包来提高NFS性能。对于高速网络,可以将该值增大,减少向服务器发送的请求包,获得性能的提升 |
wsize= | 每个WRITE命令字向服务器写入文件的最大字节数。实际数据小于或等于此值。resize必须是1024倍数的正整数,小于1024时自动设为4096,大于1048576时自动设为1048576。默认时,服务器和客户端进行协商后设置,对于拥塞的低速网络,可以将该值调小,向服务器发送较小的请求包来提高NFS性能。对于高速网络,可以将该值增大,减少向服务器发送的请求包,获得性能的提升 |
async/sync | 同步、异步挂载,客户端默认异步(async)。对于异步挂载,客户端下发的写数据会先缓存在内存中,达到一定大小或者其他条件(与客户端设置,状态有关),再一起发往服务端。而同步挂载,每次下发的写数据马上发到服务端,对于小io场景性能差异很明显(io越小,差异越大,一般都能达到几倍甚至更大的差异) |
acregmin/acregmax | 设置NFS客户端缓存普通文件属性的最短时间和最长时间,单位为秒。超过此时间后对其进行更新。默认最短时间是3s,最长时间是60s |
acdirmin/acdirmax | 设置NFS客户端缓存目录属性的最短时间和最长时间,单位为秒。超过此时间后对其进行更新。默认最短时间是3s,最长时间是60s |
ac/noac | 设置是否缓存文件属性。为了提高性能,NFS客户端缓存文件属性(默认ac),然后每隔一段时间去检查文件属性后更新。在缓存有效期内,客户端不检测服务器上文件属性是否改变。默认为ac,对于使用tail -f 这类工具一般是利用metadata+fstat来观测的,需要关闭属性缓存 |
Actimeo | 将acregmin/acregmax/acdirmin/acdirmax四个参数设置为相同时间,单位为秒 |
bg/fg | 设置挂载失败后的行为方式。默认的fg方式将立刻退出返回错误状态,bg方式是退出前将产生一个子进程在后台继续尝试挂载 |
sharecache/nosharecache | 设置客户端并发挂载同一文件系统时数据缓存和属性缓存的共享方式。设置为sharecache时,多个挂载共享共享同一缓存。设为nosharecache时,每个挂载各有一个缓存。默认为sharecache,该参数用于客户端多次挂载同一共享目录的情况,建议使用默认的sharecache选项 |
resvport/noresvport | 设置连接服务器是否使用保密源端口。默认的resvport设置保密端口,noresvport设置为非保密端口。内核2.6.28及以后版本支持 |
lookupcache | 设置内核管理给定挂载点的目录项缓存方式。其中包括all/none/pos几种方式。客户端缓存LOOKUP命令字请求结果。如果请求的目录项在服务器上,则返回结果为正,否则为负。all的管理方式是在父目录缓存的属性失效前客户端缓存这两种目录项;pos是在父目录缓存的属性失效前客户端缓存结果为正的查询结果,总是重新验证结果为负的查询结果。none总是重新验证目录缓存项。默认为all管理方式,内核2.6.28及以后版本支持,LOOKUP命令字的作用是将文件名转换文件句柄。对于多个客户端经常创建或删除文件的情况,建议使用none。其它情况选用all或者pos |
intr/nointr | 设置是否允许信号中断挂载点的文件操作。如果指定intr,当NFS操作被信号中断时系统返回EINTR。指定nointr,信号不会中断NFS文件操作。默认为nointr。指定intr时,通常同时使用soft选项,防止数据损坏。内核2.6.25及以后不再支持 |
cto/nocto | 设置是否使用“关闭打开”缓存一致的特性。通常客户端打开文件时检查是否存在以及是否有权限,当关闭文件时刷新更改。当设置为nocto时,客户端使用非标准的试探来检查服务器上文件是否改变,对于只读和文件更改较少时情形有助于提高性能,对于文件内容改变很少的情况,如服务器提供只读共享权限(文件系统以RO权限导出)给客户使用,建议使用nocto选项,这样可以提高性能。对于文件内容经常改变,客户端对文件缓存一致性要求较高,建议使用cto参数 |
NFS2/NFS3
属性 | 说明 |
---|---|
proto=transport | 客户端向服务器发起传输请求使用的协议,可以为UDP或者TCP。未指定时,mount命令选择服务器支持的协议 |
tcp/udp | 等价于proto=tcp和proto=udp选项,NFSv3/NFSv4支持tcp/udp,NFSv2只支持udp |
port= | 指定服务器NFS服务端口。如果NFS服务端口不在port上,则mount请求失败。未指定或设为0,mount命令根据服务器的rpcbind服务选择服务端口 |
mountport= | 指定服务器上mountd的端口。如果mountd服务端口不在port上,则mount请求失败。未指定或设为0,mount命令根据服务器的rpcbind服务选择服务端口。该参数用于即使防火墙屏蔽rpcbind协议也能正常mount到服务器 |
mountproto=transport | 客户端向服务器发起MNT请求时和UMNT使用的协议,可以为udp或者tcp。该参数用于防火墙屏蔽特定的协议也能正常mount到服务器 |
mounthost=name | 设置开启mountd主机名。未指定时,mount命令认为mountd服务和NFS服务在同一主机上 |
mountvers= | 设置连接服务器mountd时的RPC版本号。未指定时使用与请求的NFS版本相适应的版本号。该参数用于多个NFS服务运行于同一远程主机上 |
namlen= | 设置挂载路径名的最大长度。未指定时,通过与服务器协商设定。大多数情况为255字节 |
nfsvers/vers= | 设置使用NFS服务的NFS协议版本号。当文件系统为nfs时,Linux客户端支持NFS2和NFS3。如果不支持请求的版本,mount失败。未指定时,客户端先尝试使用NFS3,若失败再与服务器进行协商 |
lock/nolock | 选择是否使用NLM协议在服务器上锁文件。当选择nolock选项时,锁对于同一主机的应用有效,对不同主机不受锁的影响。默认为lock |
acl/noacl | 设置是否在挂载时使用NFSACL协议。NFSACL协议不属于标准NFS协议,而是Solaris上的实现。未指定时,客户端与服务器协商检查服务器是否支持,如果支持则使用NFSACL |
rdirplus/nordirplus | 设置是否使用NFS3的REAADDIRPLUS请求。默认为readdirplus |
NFS4
属性 | 说明 |
---|---|
proto=transport | 客户端向服务器发起传输请求使用的协议,可以为UDP或者TCP。未指定时,选用TCP |
port= | 指定服务器NFS服务端口。如果NFS服务端口不在port上,则mount请求失败。未指定时,客户端使用NFS标准的2049号端口。指定为0时,客户端选用服务器rpcbind服务支持的端口 |
clientaddr=n.n.n.n | 指定一个IPv4的主机地址使服务器能执行NFS4的回调请求。未指定时,mount命令尝试自己发现一个合适的回调地址 |
# /etc/fstab
file-system-id.region.nas.aliyuncs.com:/ /mnt nfs vers=4,minorversion=0,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,_netdev,noresvport 0 0
file-system-id.region.nas.aliyuncs.com:/ /mnt nfs vers=3,nolock,proto=tcp,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,_netdev,noresvport 0 0
属性 | 说明 |
---|---|
_netdev | 防止客户端在网络就绪之前开始挂载文件系统 |
0(noresvport 后第一项) | 非零值表示文件系统应由dump备份。对于 NAS ,此值为0 |
0(noresvport 后第二项) | 该值表示fsck在启动时检查文件系统的顺序。对于 NAS 文件系统,此值应为0,表示 fsck不应在启动时运行 |
参考
如何對掛載 EFS 檔案系統時出現 "nfs: server 127.0.0.1 not responding" (nfs: 伺服器 127.0.0.1 無回應) 錯誤進行疑難排解?