NFS--Network File System :Unix/linux系统间的文件共享,主要用于局域网。
可以将NFS服务器共享的目录挂载到本地,然后像访问本地目录一样使用。
一.安装NFS服务
1.检测是否安装过
rpm -qa | grep nfs #NFS服务
2.安装
yum install nfs-utils -y #CentOS6.4
3.启动服务
要先保证rpcbind是开启状态,检测是否开启:pstree | grep rpcbind
一般都是开启状态,如未开启,则启动:service rpcbind start
然后再启动nfs:
/etc/rc.d/init.d/NFS start 或者 service nfs status #stop,restart
4.检测服务
rpcinfo -p [ip] #客户端上运行该命令,用于验证NFSServer是否正常
5.开放端口
1)修改nfs配置文件:
vi /etc/sysconfig/nfs
#开启如下注释,并设置端口,注意不能与/etc/services中声明的重复
RQUOTAD_PORT=875
LOCKD_TCPPORT=32803
LOCKD_UDPPORT=32804
MOUNTD_PORT=892
STATD_PORT=32805
STATD_OUTGOING_PORT=32806
判断是否与/etc/services冲突:
egrep '875|32803|32804|892|32805|32806' /etc/services #875冲突没有问题
2)防火墙设置:
vi /etc/sysconfig/iptables
#nfs
-A INPUT -p tcp -m multiport --dports 111,2049,892,875,32803,32804,32805,32806 -j ACCEPT
-A INPUT -p udp -m multiport --dports 111,2049,892,875,32803,32804,32805,32806 -j ACCEPT
重启防火墙:
service iptables restart
查看iptables状态:
service iptables status
3)重启nfs
service nfs restart
4)客户端测试是否可以访问
rpcinfo -p 192.168.247.130
5)设置NFS服务器的自动启动状态
查看当前状态:chkconfig --list nfs
设置在3,5级别自启动:chkconfig --level 35 nfs on
二.配置服务
vi /etc/exports #不存在就创建
格式:共享目录 允许访问主机(权限)
示例:/public #允许所有主机访问
/website 192.168.247.131(ro) #允许192.168.247.131只读访问/website
访问主机:
可以使用完整的 IP 或者是网域,例如 192.168.100.10 或 192.168.100.0/24 ,或192.168.100.0/255.255.255.0 都可以接受!
也可以使用主机名称,但这个主机名称必须要在 /etc/hosts 内,或可使用 DNS 找到该名称才行啊!反正重点是可找到 IP 就是了。如果是主机名称的话,那麼他可以支援万用字元,例如 * 或 ? 均可接受。
权限:man exports
- ro 只读访问
- rw 读写访问
- sync 所有数据在请求时写入共享
- async NFS在写入数据前可以相应请求
- secure NFS通过1024以下的安全TCP/IP端口发送
- insecure NFS通过1024以上的端口发送
- wdelay 如果多个用户要写入NFS目录,则归组写入(默认)
- no_wdelay 如果多个用户要写入NFS目录,则立即写入,当使用async时,无需此设置。
- hide 在NFS共享目录中不共享其子目录
- no_hide 共享NFS目录的子目录
- subtree_check 如果共享/usr/bin之类的子目录时,强制NFS检查父目录的权限(默认)
- no_subtree_check 和上面相对,不检查父目录权限
- all_squash 共享文件的UID和GID映射匿名用户anonymous,适合公用目录。
- no_all_squash 保留共享文件的UID和GID(默认)
- root_squash root用户的所有请求映射成如anonymous用户一样的权限(默认)
- no_root_squash root用户具有根目录的完全管理访问权限
- anonuid=xxx 指定NFS服务器/etc/passwd文件中匿名用户的UID
- anongid=xxx 指定NFS服务器/etc/passwd文件中匿名用户的GID
网段示例:
/opt 192.168.133.0/255.255.255.0(rw,no_root_squash,sync) #133.0~133.255
/nfs/web 192.168.133.0/255.255.255.0(rw,no_root_squash,sync) *(ro) #133.0~133.255可写,其它网段只读
实战示例:只允许特定的两个IP访问,并且必须使用UID=9999和GID=9999的用户才能访问[这里root用户会自动转换成匿名用户权限,除非配置了no_root_squash]
/nfsdir 192.168.3.111(rw,sync,no_wdelay,anonuid=9999,anongid=9999,no_subtree_check)
/nfsdir 192.168.3.222(rw,sync,no_wdelay,anonuid=9999,anongid=9999,no_subtree_check)
所以需要在NFS服务器和客户端上分别创建该用户,这里用户名为nfsuser,组名也为nfsuser:
groupadd nfsuser -g 9999
useradd nfsuser -u 9999 -g 9999
之后将共享的目录/nfsdir授予nfsuser管理:
chmod -R 775 /nfsdir #如果要授权给其它用户或组,可以使用ACL授权
chown -R nfsuser.nfsuser /nfsdir
输出共享目录格式:exportfs -rv
三.客户端挂载
1.查看nfs服务器共享的目录列表:
showmount -e 192.168.247.130
2.创建挂载点
mkdir /mnt/website
3.挂载
mount -t nfs 192.168.247.130:/website /mnt/website
4.查看是否挂载成功
df -h
5.卸载NFS挂载的共享目录
umount /mnt/website
6.开机自动挂载NFS共享
vi /etc/fstab
格式:NFS共享目录 本机挂载点 文件系统 权限 是否检测 检测顺序
192.168.247.130:/website /mnt/website nfs rw 0 0
或者:
vi /etc/rc.d/rc.local #这个是启动系统时最后一个执行的程序
加入:mount -t nfs 192.168.247.130:/website /mnt/website
-t :指定挂载的文件类型,这里是nfs
如要马上生效:命令行/etc/rc.d/rc.local 回车即可
补充:windows7下挂在linuxNFS
控制面板--程序和功能--打开或关闭windows功能--NFS(勾选客户端,管理工具)
CMD:mount \\192.168.247.130\website z:
我的电脑下的网络位置会出现挂载后的nfs盘,访问Z:即可打开。
注:windows7下只允许挂在到未使用的盘符,不能挂在目录
windows7挂载后用户只有只读权限,需要进行授权,此时在cmd下执行mount,会看到uid与gid都是-2,
因为windows用户的uid和gid都与nfs服务器要求的9999不一致,所以修改如下:
打开注册表:运行--regedit
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ClientForNFS\CurrentVersion\Default,
增加两项:AnonymousUid,AnonymousGid 字符串值:9999 或者 0
重新启动计算机,重新mount。
系统启动自动挂载:
编写脚本:nfs_autoload.bat
内容:mount -t nfs 192.168.247.130:/website /mnt/website
将nfs_autoload.bat拷贝到当前用户的开始菜单--所有程序--启动目录下,我使用Administrator用户,即C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup。