目录
一、概述
二、NFS挂载原理
三、NFS相关协议及软件安装管理
1.协议:
2.软件:
四、NFS系统守护进程
五、NFS服务器的配置
六、NFS服务器的启动与停止
1. 启动NFS服务器
2.查询NFS服务器状态
3.停止NFS服务器
4.设置NFS服务器的自动启动状态
5.查看RPC服务器开启了哪些端口
七、实验相关实例
1.将NFS服务器的/home/zhangsan共享给192.168.115.0网段,rw权限
2.重启rpcbind 和nfs 服务
3.服务器端查看nfs共享状态
4.客户端查看nfs共享状态
5.客户端挂载nfs服务器共享目录
6.卸载和自动挂载
八、相关命令
九、实验
1.服务器端:将新增加的磁盘设置成lv逻辑卷
2.安装nfs服务
3.编辑nfs配置
4.打开客户端进行连接
5.服务器端调整权限
6.客户端测试创建删除
7.服务器修改目录共享范围
8.用户映射选项
9.nfs用户映射关系:
10.说明
a.查看本机的rpc端口
b.客户端查看服务器允许挂载的用户IP
c.客户端永久挂载格式如下
d.服务器禁止所有客户端挂载
十、NFS v3和v4的区别
1.问题现象:
2.问题原因:
3.解决方案:
一、概述
NFS 是Network File System的缩写,即网络文件系统。一种使用于分散式文件系统的协定,由Sun公司开发,于1984年向外公布。功能是通过网络让不同的机器、不同的操作系统能够彼此分享个别的数据,让应用程序在客户端通过网络访问位于服务器磁盘中的数据,是在类Unix系统间实现磁盘文件共享的一种方法
它的主要功能是通过网络让不同的机器系统之间可以彼此共享文件和目录。NFS服务器可以允许NFS客户端将远端NFS服务器端的共享目录挂载到本地的NFS客户端中。在本地的NFS客户端的机器看来,NFS服务器端共享的目录就好像自己的磁盘分区和目录一样。一般客户端挂载到本地目录的名字可以随便,但为方便管理,我们要和服务器端一样比较好。
初级:单磁盘、单主机、存储管理方案
分区、格式化、挂载
逻辑卷、磁盘阵列、磁盘配额{对现有的存储空间进行使用约束}
中级:网络文件系统
samba:cifs
NFS:nfs
解决单设备存储上限问题!
NFS一般用来存储共享视频,图片等静态数据。
二、NFS挂载原理
NFS是通过网络来进行服务端和客户端之间的数据传输。两者之间要传输数据就要有想对应的网络端口来进行传输。NFS服务器到底使用什么网络端口来传输数据的,NFS服务器端其实是随机选择端口来进行数据传输。那NFS客户端又是如何知道NFS服务器端到底使用的是哪个端口呢?其实NFS服务器时通过远程过程调用(remote procedure call 简称RPC)协议/服务来实现的。也就是说RPC服务会统一管理NFS的端口,客户端和服务端通过RPC来先沟通NFS使用了哪些端口,之后再利用注册端口来进行数据的传输。
也就是RPC管理服务端的NFS端口分配,客户端要传数据,那客户端的RPC会先跟服务端的RPC去要服务器的端口,要到端口后再建立连接,然后传输数据。
RPC和NFS之间又是如何之间相互通讯的?
首先当NFS启动后,就会随机的使用一些端口,然后NFS就会向RPC去注册这些端口。RPC就会记录下这些端口。并且RPC会开启111端口,等待客户端RPC的请求,如果客户端有请求,那服务端的RPC就会将记录的NFS端口信息告知客户端。
RPC和NFS的启动顺序是怎样的?
在启动NFS SERVER之前,首先要启动RPC服务(即portmap服务,下同)否则NFS SERVER就无法向RPC服务区注册,另外,如果RPC服务重新启动,原来已经注册好的NFS端口数据就会全部丢失。因此此时RPC服务管理的NFS程序也要重新启动以重新向RPC注册。特别注意:一般修改NFS配置文档后,是不需要重启NFS的,直接在命令执行/etc/init.d/nfs reload
总结:客户端NFS和服务端NFS通讯过程
1)首先服务器端启动RPC服务,并开启111端口
2)启动NFS服务,并向RPC注册端口信息
3)客户端启动RPC(portmap服务),向服务端的RPC(portmap)服务请求服务端的NFS端口
4)服务端的RPC(portmap)服务反馈NFS端口信息给客户端。
5)客户端通过获取的NFS端口来建立和服务端的NFS连接并进行数据的传输。
三、NFS相关协议及软件安装管理
1.协议:
RPC(Remote Procedure Call Protocol)——远程过程调用协议
2.软件:
nfs-utils-* :包括NFS命令与监控程序
rpcbind-* :支持安全NFS RPC服务的连接
注:通常情况下,是作为系统的默认包安装的
CentOS 6.*之前rpcbind叫portmap
四、NFS系统守护进程
nfs:
它是基本的NFS守护进程,主要功能是管理客户端是否能够登录服务器
rpcbind:
主要功能是进行端口映射工作。当客户端尝试连接并使用RPC服务器提供的服务(如NFS服务)时,rpcbind会将所管理的与服务对应的端口提供给客户端,从而使客户可以通过该端口向服务器请求服务。
五、NFS服务器的配置
NFS服务器的配置相对比较简单,只需要在相应的配置文件中进行设置,然后启动NFS服务器即可。
NFS服务的配置文件为 /etc/exports,这个文件是NFS的主要配置文件,不过系统并没有默认值,所以这个文件不一定会存在,可能要使用vim手动建立,然后在文件里面写入配置内容。
/etc/exports文件内容格式:
共享目录 客户端1(访问权限,用户映射,其他) 客户端2(访问权限,用户映射,其他)
a.共享目录:共享目录是指NFS服务器共享给客户机使用的目录
b.客户端:客户端是指网络中可以访问这个NFS共享目录的计算机
客户端常用的指定方式:
指定ip地址的主机:192.168.0.200
指定子网中的所有主机:192.168.88.0
指定域名的主机:www.kernel.com
指定域中的所有主机:*.kernel.com
所有主机:*
c.设置共享目录的访问权限、用户映射等。
访问权限选项:
设置输出目录只读:ro
设置输出目录读写:rw
用户映射选项:
root_squash:将root用户的访问映射为匿名(nfsnobody)用户uid和gid;(默认生效)
no_root_squash:保留管理员权限,以服务器管理员的权限管理;
all_squash:将远程访问的用户及所属组都映射为指定uid、gid的匿名用户;
anonuid=xxx:将远程访问的所有用户都映射为指定uid的匿名用户;
anongid=xxx:将远程访问的所有用户组都映射为指定gid匿名组账户;
其它选项:
sync: 将数据同步写入内存缓冲区与磁盘中,效率低,但可以保证数据的一致性(同步);
async:将数据先保存在内存缓冲区中,必要时才写入磁盘(异步);
六、NFS服务器的启动与停止
1. 启动NFS服务器
#为了使NFS服务器能正常工作,需要启动rpcbind和nfs两个服务,并且rpcbind一定要先于nfs启动。
service rpcbind start
service nfs start
2.查询NFS服务器状态
service rpcbind status
service nfs status
3.停止NFS服务器
#要停止NFS运行时,需要先停止nfs服务再停止rpcbind服务,对于系统中有其他服务(如NIS)需要使用时,不需要停止rpcbind服务
service nfs stop
service rpcbind stop
4.设置NFS服务器的自动启动状态
#设置rpcbind和nfs服务在系统运行级别2345自动启动。
chkconfig --level 2345 rpcbind on
chkconfig --level 2345 nfs on
5.查看RPC服务器开启了哪些端口
rpcinfo –p localhost
七、实验相关实例
1.将NFS服务器的/home/zhangsan共享给192.168.115.0网段,rw权限
vi /etc/exports
/home/zhangsan 192.168.115.0(rw)
2.重启rpcbind 和nfs 服务
service rpcbind restart
service nfs restart
exportfs
3.服务器端查看nfs共享状态
#查看自己共享的服务
showmount -e 本机ip
4.客户端查看nfs共享状态
showmount -e NFS服务器IP
5.客户端挂载nfs服务器共享目录
#命令格式:mount NFS服务器IP:共享目录 本地挂载点目录
mount 192.168.115.10:/home/zhangsan/ /media/zhangsan/
mount | grep nfs
#指定挂载使用nfs V3版本(避免同步延迟)
mount -o vers=3 共享 本地
验证客户端和nfs服务器端文件是否一致:
修改服务器端相应权限,不然客户端无法正常访问和使用
6.卸载和自动挂载
卸载:
1.卸载客户端的挂载目录
umount 挂载点
2.停止服务器端的共享
exportfs –au
自动挂载:/etc/fstab
#格式:<server>:</remote/export> </local/directory> nfs < options> 0 0
vim /etc/fstab
192.168.115.10:/home/zhangsan /media/zhangsan nfs defaults 0 0
#挂载
mount –a
八、相关命令
exportfs命令
如果我们在启动了NFS之后又修改了/etc/exports,是不是还要重新启动nfs呢?这个时候我们就可以用exportfs 命令来使改动立刻生效,该命令格式如下:
exportfs [-aruv]
-a #全部挂载或卸载 /etc/exports中的内容
-r #重新读取/etc/exports 中的信息 ,并同步更新/etc/exports、/var/lib/nfs/xtab
-u #卸载单一目录(和-a一起使用为卸载所有/etc/exports文件中的目录)
-v #在export的时候,将详细的信息输出到屏幕上。
具体例子:
#卸载所有共享目录
exportfs -au
#重新共享所有目录并输出详细信息
exportfs -ra
rpcinfo命令
利用rpcinfo -p 可以查看出RPC开启的端口所提供的程序有哪些
其中nfs 开启的是2049,portmapper(rpcbind) 开启的是111,其余则是rpc开启的
九、实验
实验准备:
两台虚拟机,一台服务器端,一台客户端。服务器端新加一块磁盘(防止根分区被写满)
1.服务器端:将新增加的磁盘设置成lv逻辑卷
#创建pv
pvcreate /dev/sdb
#创建vg
vgcreate nfs_vg /dev/sdb
#创建lv
lvcreate -L 15G -n nfs_lv nfs_vg
#格式化文件系统
mkfs.xfs /dev/nfs_vg/nfs_lv
#创建共享目录
mkdir /nfs_share
#永久挂载
vim /etc/fstab
/dev/nfs_vg/nfs_lv /nfs_share xfs defaults 0 0
mount -a
2.安装nfs服务
yum search rpcbind
yum -y install rpcbind nfs-utils
systemctl start rpcbind && systemctl enable rpcbind
3.编辑nfs配置
vim /etc/exports
#将/nfs_share目录共享给192.168.88.120,使其拥有读写权限
/nfs_share 192.168.88.120(rw)
systemctl start nfs
4.打开客户端进行连接
#客户端创建nfs共享的挂载目录
mkdir /mnt/nfs_share
#如果客户端不识别nfs文件系统就进行安装。yum -y install nfs-utils
mount 192.168.88.110:/nfs_share /mnt/nfs_share && df -h
#验证是否有权限写入文件
cd /mnt/nfs_share && touch a.txt
#发现没有权限进行创建文件。
5.服务器端调整权限
#在服务器端给目录最大权限,是所有人都可以写,以此来查看客户端写入借用的身份
chmod 777 /nfs_share/
#客户端创建测试
touch a.txt #创建成功
#查看客户端创建文件的所借用的身份
ll /nfs_share
#将权限改回正常值
chmod 755 /nfs_share
#给nfsnobody设置acl权限
setfacl -m u:nfsnobody:rwx /nfs_share/
6.客户端测试创建删除
#删除文件需要用户对文件所在目录拥有w写权限
rm -rf /mnt/nfs_share
touch a.txt
useradd zhangsan
setfacl -m u:zhangsan:rw a.txt
7.服务器修改目录共享范围
vim /etc/exports
#如果要让多个客户端共享,IP之间用空格隔开,ro为只读的意思
/nfs_share 192.168.88.120(rw) 192.168.88.130(ro)
8.用户映射选项
root_squash:将root用户的访问映射为匿名(nfsnobody)用户uid和gid;(默认生效)
no_root_squash:保留管理员权限,以服务器管理员的权限管理;
all_squash:将远程访问的用户及所属组都映射为指定uid、gid的匿名用户;
anonuid=xxx:将远程访问的所有用户都映射为指定uid的匿名用户;
anongid=xxx:将远程访问的所有用户组都映射为指定gid匿名组账户;
9.nfs用户映射关系:
选项:root_squash
超级管理员:借用服务器端的nfsnobody用户的身份进行管理
普通管理员:保留客户端自己的身份进行文件管理{前提:有权限}
选项:no_root_squash
超级管理员:保留客户端root的身份,创建并管理文件
普通管理员:保留客户端自己的身份进行文件管理{前提:有权限}
选项:all_squash
超级管理员:借用服务器端的nfsnobody用户的身份进行管理
普通管理员:借用服务器端的nfsnobody用户的身份进行管理
选项:all_squash;anonuid=xxx;anongid=xxx
超级管理员:借用服务器端的【指定用户】的身份进行管理
普通管理员:借用服务器端的【指定用户】的身份进行管理
10.说明
a.查看本机的rpc端口
rpcinfo -p localhost
b.客户端查看服务器允许挂载的用户IP
showmount -e 192.168.88.110
c.客户端永久挂载格式如下
d.服务器禁止所有客户端挂载
如果服务器端单方面禁止客户端挂载,客户端则一直进行尝试连接,并且无法访问挂载目录。
#服务器禁止所有用户挂载
exportfs -au
#服务器恢复所有用户进行挂载
exportfs -ar
十、NFS v3和v4的区别
1.问题现象:
NFS客户端在使用v4版本挂载NFS服务器共享目录时,所创建的文件属于nobody用户
2.问题原因:
NFS 在 v4 版本中修改了用户映射关系模式,通过调用NIS服务来完成用户映射,但NIS服务在未配置的情况下无法提供正常映射关系,所以出现了上述错误。
#拓展:NIS(Network Information Service)网络信息服务
#相关配置文件:/etc/idmapd.conf
3.解决方案:
服务器端:
1.创建并编写配置文件
vim /etc/modprobe.d/nfs.conf
#关闭掉RPC服务对rpc.idmapd模块的调用
options nfs nfs4_disable_idmapping=1
2.正常编辑NFS配置文件并重启
vim /etc/exports
/nfs_share 192.168.88.120(rw)
#重启服务
service nfs restart
3.手动关闭rpcidmapd服务
service rpcidmapd stop
客户端:
正常挂载即可