解决NFS client配置rszie和wsize不生效

基础环境信息:html

[root@m01 /]# cat /etc/redhat-release 
CentOS release 6.7 (Final)
[root@m01 /]# uname -r
2.6.32-573.el6.x86_64
[root@m01 /]#


默认挂载属性为:bash

[root@m01 /]# showmount -e nfs01
Export list for nfs01:
/data 172.16.1.0/24
[root@m01 /]# mount -t nfs nfs01:/data /mnt
[root@m01 /]# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda3       6.9G  1.8G  4.7G  28% /
tmpfs           238M  4.0K  238M   1% /dev/shm
/dev/sda1       190M   36M  145M  20% /boot
nfs01:/data     6.9G  1.7G  4.8G  27% /mnt
[root@m01 /]# grep mnt /proc/mounts
nfs01:/data/ /mnt nfs4 rw,sync,relatime,vers=4,rsize=65536,wsize=65536,namlen=255,hard,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=172.16.1.61,minorversion=0,local_lock=none,addr=172.16.1.31 0 0
[root@m01 /]#  ##tcp协议默认的rszie和wsize为65536




修改rsize和wsize:服务器

[root@m01 nfsd]# umount /mnt
[root@m01 nfsd]# mount -t nfs -o rsize=131072,wsize=131072 nfs01:/data /mnt  
[root@m01 nfsd]# grep mnt /proc/mounts
nfs01:/data/ /mnt nfs4 rw,relatime,vers=4,rsize=65536,wsize=65536,namlen=255,hard,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=172.16.1.61,minorversion=0,local_lock=none,addr=172.16.1.31 0 0
[root@m01 nfsd]#   ##能够看到修改后并无生效



使用tcpdump命令抓包查看过程:tcp

[root@nfs01 ~]# tcpdump -nn -i eth1  -w wireshark.cap -s 0


使用wireshark对包进行分析ide

wKioL1ci4mrwA_umAAEXk_qKlgQ088.png

发现rsize和wsize是和服务端协商,并由服务端答复而来的(NFS V4 compound reply包)。
spa


查阅相关资料得知:NFS 服务器在决定默认的最大读写块大小时考虑到内存占用状况,每一个 NFS 内核线程最多只使用 1/4096 的物理内存大小,对于 UDP 来讲,因为一个 UDP 包最大才 64KB,所以使用 UDP 协议的 NFS 读写块大小最大不超过 48KB,而 kernel 中则直接限制为 32KB 了;而使用 TCP 协议的 NFS 因为没有这个限制容许更大的读写块大小,但 Linux kernel 仍是将其限制为 1MB 了。对于物理内存超过 4GB 的机器才使用最大的 1MB 读写块大小。记录这个大小的文件为/proc/fs/nfsd/max_block_size.线程


查看服务端该文件的大小:htm

[root@nfs01 ~]# cat /proc/fs/nfsd/max_block_size 
65536
[root@nfs01 ~]#


找到问题的所在了!而后我作了以下的修改blog

一、中止nfs服务图片

[root@nfs01 ~]# /etc/init.d/nfs stop
Shutting down NFS daemon:                                  [  OK  ]
Shutting down NFS mountd:                                  [  OK  ]
Shutting down NFS quotas:                                  [  OK  ]
Shutting down NFS services:                                [  OK  ]
Shutting down RPC idmapd:                                  [  OK  ]
[root@nfs01 ~]#


二、修改max_block_size

[root@nfs01 ~]# echo 1048576 >  /proc/fs/nfsd/max_block_size 
[root@nfs01 ~]# cat /proc/fs/nfsd/max_block_size
1048576
[root@nfs01 ~]#  ##直接改成最大1M。


三、启动nfs服务

[root@nfs01 ~]# /etc/init.d/nfs start
Starting NFS services:                                     [  OK  ]
Starting NFS quotas:                                       [  OK  ]
Starting NFS mountd:                                       [  OK  ]
Starting NFS daemon:                                       [  OK  ]
Starting RPC idmapd:                                       [  OK  ]
[root@nfs01 ~]#


四、客户端进行挂载

[root@m01 nfsd]# mount -t nfs -o rsize=131072,wsize=131072 nfs01:/data /mnt
[root@m01 nfsd]# grep mnt /proc/mounts
nfs01:/data/ /mnt nfs4 rw,relatime,vers=4,rsize=131072,wsize=131072,namlen=255,hard,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=172.16.1.61,minorversion=0,local_lock=none,addr=172.16.1.31 0 0
[root@m01 nfsd]#   ##修改为功!


问题解决!

相关文章
相关标签/搜索