NAS的用处之一——挂载NFS

2011年10月买了一部NAS——Synology D211j。因为住在山上外联网速慢,而且路由器是Vodafone改制过的。这一年多来只把这部NAS当作家里局域网存储服务和互联网的下载机制。文件系统用NFS挂载。NAS与路由器之间有线连接,其他两部笔记本都与路由器无线连接。在那台EPC上读取速率有11MB/s,而Ideapad S205有时会丢数据包,最近用得多了,突然觉得丢包情况严重,读取速率不超过1MB/s。心有不甘,较真的毛病发作,折腾了一番。

十倍以上的差距不是来自NAS本身NFS服务的问题。不过既然开始折腾就连服务端一起改了。DS211j的内核是2.6.x,支持NFSv4。不过通过图形界面只能设置NFSv3的服务。我试着更改/etc/exports启用NFSv4服务。v4的挂载概念与之前版本的不同是服务端只给出一个目录,该目录可以是服务端的任何一个目录,而在客户端看来这个目录是根目录。因此这个挂载系统叫作伪根系统。如果不要将服务端的根目录全部暴露,就需要用mount –bind将想要挂载的内容建立一个目录结构交给NFSv4去挂载。然后在/etc/exports的里面只要设置该结构的主目录即可。v3则需要单独给出所有要挂载的目录。不知道为什么mount –bind的部分似乎不能写到NAS的/etc/fstab里面去。每次重新启动NAS以后都要登录进去手动挂载,有点麻烦。于是在v4挂载设置结束后再找其他参数优化。

Light Painting

在互联网上提到NFS挂载的优化都先说缓冲区的大小。其实现代的硬件设备速度足够,只要不是负担很重的网络环境,缓冲区大小绝不至于导致丢包严重。反而是端口和挂载方式更重要。最早的NFS系统只用UDP端口通信,v3开始支持TCP传输,v4默认是TCP。UDP是单包传送,数据包没有关联,如果有包丢了,客户端就发送一个RPC去服务端重新传这个包。TCP是流传输,如果有包丢了,不用RPC就可以重传丢掉的部分。在没有丢包的情况下UDP的效率比TCP高。在丢包严重的环境里附加上RPC开销的UDP就不如TCP。这一点用网线连接Ideapad和路由器证实了。试着在客户端的挂载设置里指明v3挂载服务端和客户端都用TCP后,Ideapad的读取速率达到了4MB/s。

对比UDP和TCP,以及网线和无线连接的结果。根本问题还是出在Ideapad自己的无线网卡驱动上。因为无线连接差,所以丢包严重,TCP连接就比UDP要好。Ideapad所用是RT3090,Linux核心默认调用rt2800pci模块。在Ubuntu 12.04下运行正常,可恐怕还不完善。Ratlink的官方驱动是2010年发布的,编译有错误。EPC上的网卡在内核驱动下也一样有问题,每次更新内核也要重新编译驱动。无线网卡真是Linux的一个应用问题。

Advertisements
  1. 留下评论

发表评论

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 更改 )

Twitter picture

You are commenting using your Twitter account. Log Out / 更改 )

Facebook photo

You are commenting using your Facebook account. Log Out / 更改 )

Google+ photo

You are commenting using your Google+ account. Log Out / 更改 )

Connecting to %s

%d 博主赞过: