RH254小结(五)win7挂载NFS
在 RH254小结(四)NFS服务器的搭建 中介绍了linux下NFS服务器的搭建及Linux客户端的挂载。在实际应用,有可能遇到windows和linux之间互相挂载访问文件的情况,除了samba服务之外,也可以通过NFS实现。目前主流的windows OS 如 win7、win2008都默认已带有NFS客户端,只需要系统中开启即可。本篇就记录下windows客户端访问 linux NFS服务端。
一、防火墙与端口(centos6.x与centos7.x的区别)
在进入正题之前,先完善下上一篇中有关端口和防火墙配置部分。在centos中有一个配置文件/etc/sysconfig/nfs用于配置nfs中的一些参数项,其中用修改最多的是几个服务运行的端口。在centos6和centos5中lockd、rquotad、statd、mountd几个服务都运行在非固定端口,需要单独进行指定,常用的方法如下:
1# vim /etc/sysconfig/nfs
2增加如下几行
3RQUOTAD_PORT=10001
4LOCKD_TCPPORT=10002
5LOCKD_UDPPORT=10002
6MOUNTD_PORT=10003
7STATD_PORT=10004
重启服务后,相应的在iptables 防火墙的配置如下:
1iptables -A INPUT -p tcp --dport 111 -j ACCEPT //rpcbind端口,tcp和udp都用
2iptables -A INPUT -p udp --dport 111 -j ACCEPT
3iptables -A INPUT -p tcp --dport 2049 -j ACCEPT //nfs服务端口,tcp和udp都用
4iptables -A INPUT -p udp --dport 2049 -j ACCEPT
5iptables -A INPUT -p tcp --dport 10001:10004 -j ACCEPT //上面设置的几个服务的端口
6iptables -A INPUT -p udp --dport 10001:10004 -j ACCEPT
在新的发行版本中lockd服务端口不固定位,其他几个服务端口系统都已增加为预设为固件端口。具何查看/etc/sysconfig/nfs和/etc/services 文件,如下:
在centos7中查看/etc/sysconfig/nfs配置文件,可以找到如下部分
1# Note: For new values to take effect the nfs-config service
2# has to be restarted with the following command:
3# systemctl restart nfs-config
4#
5# Optional arguments passed to in-kernel lockd
6#LOCKDARG=
7# TCP port rpc.lockd should listen on.
8#LOCKD_TCPPORT=32803
9# UDP port rpc.lockd should listen on.
10#LOCKD_UDPPORT=32769
具体可以对比下centos6 版本中该文件的变化。同时,在/etc/services 中可以找到如下部分:
1# cat /etc/services
2sunrpc 111/tcp portmapper rpcbind # RPC 4.0 portmapper TCP
3sunrpc 111/udp portmapper rpcbind # RPC 4.0 portmapper UDP
4idmaps 1884/tcp # Internet Distance Map Svc
5idmaps 1884/udp # Internet Distance Map Svc
6nfs 2049/tcp nfsd shilp # Network File System
7nfs 2049/udp nfsd shilp # Network File System
8nfs 2049/sctp nfsd shilp # Network File System
9mountd 20048/tcp # NFS mount protocol
10mountd 20048/udp # NFS mount protocol
与centos6相比,这里将mountd服务的端口配置为了固定端口。所以在centos7下防火墙相应的配置如下:
1firewall-cmd --permanent --add-service=mountd
2firewall-cmd --permanent --add-service=nfs
3firewall-cmd --permanent --add-service=rpc-bind
4或
5firewall-cmd --permanent --add-service=nfs --add-service=rpc-bind --add-service=mountd
6firewall-cmd --reload
7firewall-cmd --permanent --remove-service=nfs --remove-service=rpc-bind --remove-service=mountd //删除相应的端口
不过在centos7上也可以在/etc/sysconfig/nfs 文件中配置和/etc/services中预设值不相同的端口,例如最上面提到的连续端口10001-10004,相应的在防火墙中,可以如下配置:
1firewall-cmd --add-port=10001-10004/udp
2firewall-cmd --add-port=10001-10004/tcp
注:由于lockd 服务为非必须服务,我在这里并未在防火墙中例中。如有需要,也可以将其在/etc/sysconfig/nfs设置为固定端口后,在firewalld 中例外。
二、win7下挂载NFS共享
1、win7开启nfs挂载
这里以win7为例,打开控制面板---找到程序和功能---在windows功能中勾选NFS客户端和管理工具即可。勾选后需重启生效。
LINXU服务端需要注意的是,在firewalld中必须将 rpcbind、nfs、mountd三个服务都配置例外,只例外前两个时win7挂载时会报错如下(在linux客户端挂载中,经测试只将前两个服务例外即可。不过规范起见,还是建议将三个服务都例外):
1#未在firewalld中例外mountd服务时
2C:\Users\Administrator>showmount -e 192.168.1.200
3RPC: 远程系统错误RPC: 端口映射器故障 - RPC: 已超时。
4#在firewalld中例外mountd服务后
5C:\Users\Administrator>showmount -e 192.168.1.200
6导出列表在 192.168.1.200:
7/nfs 192.168.1.0/24
2、win7下挂载方法
挂载方法有如下两种:
1mount 192.168.1.200:/nfs x:
2mount \\192.168.1.200\nfs x:
挂载完成后就可以像操作本地盘一样操作远程共享目录了。
3、写权限问题
如果在LINUX服务端中未对共享的目录/nfs 设置为777权限或设置属主为nfsnobody:nfsnobody 时,win7挂载后默认是没有写的权限的(虽然在服务端设置的是rw权限)。mount查看后,发现默认挂载的uid和gid是-2 ,如下:
解决方法:让Win7在挂载NFS的时候将UID和GID改成0,打开注册表:HKEY_LOCAL_MACHINE\SOFTWARE \Microsoft\ClientForNFS\CurrentVersion\Default,增加两项:AnonymousUid,AnonymousGid ,并将其值设置为0 。如下图:
修改完注册表,重新启动计算机,重新mount(再使用mount查看会发现uid和gid变成了0),就能在win7下对nfs文件系统进行读写操作了。
三、windows提供NFS服务
在win2008 的服务里集成有NFS服务,所以NFS目前已经不再是Linux的专利。而在桌面版中没有该服务,不过在winxp时代,微软发布过一个sfu 软件包,可以让xp提供NFS服务,由于该包很古老的一个产物,未在win7在验证其适用性。
捐赠本站(Donate)
如您感觉文章有用,可扫码捐赠本站!(If the article useful, you can scan the QR code to donate))
- Author: shisekong
- Link: https://blog.361way.com/nfs-win7-mount/4706.html
- License: This work is under a 知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议. Kindly fulfill the requirements of the aforementioned License when adapting or creating a derivative of this work.