NFS 实现文件共享
NFS 即网络文件系统,是一种使用于分布式文件系统的协议,NFS 功能是通过网络让不同的机器,不同的操作系统能够彼此分享各自的数据,让应用程序在客户端通过网络访问位于服务器磁盘中的数据,是在类Unix系统间实现磁盘文件共享的一种方法.
目前NFS有三个版本,其常用的版本解析
NFSv2:是一个古老的版本,但却被众多的操作系统所支持,这样兼容性更好.
NFSv3:拥有更多的特点,包括更快的速度,更大的单个文件大小,对TCP的支持.
NFSv4:提供有状态连接,共容易追踪,安全性增强,RHEL7上默认4版本协议.
在启动NFS Server之前,首先要启动RPC服务否则NFS Server就无法向RPC服务区注册,另外如果RPC服务重新启动,原来已经注册好的NFS端口数据就会全部丢失.因此此时RPC服务管理的NFS程序也要重新启动以重新向RPC注册.
NFS系统的守护进程介绍
RPC:(Remote Procedure Call Protocol),远程过程调用协议
NFS:它是基本的NFS守护进程,主要功能是管理客户端是否能够登录服务器
RPCbind:主要功能是进行端口映射工作,和端口代理分配等
客户端NFS和服务端NFS通讯过程
首先服务器端启动RPC服务,并开启111端口
启动NFS服务,并向RPC注册端口信息
客户端启动RPC,向服务端的RPC服务请求服务端的NFS端口
服务端的RPC服务,反馈NFS端口信息给客户端
客户端通过获取的NFS端口来建立和服务端的NFS连接并进行数据的传输
NFS服务器是通过读取/etc/exports配置文件设定那个客户端可以访问那些NFS共享文件系统,该文件书写原则有如下几条.
空白行的内容将被忽略
以#号开头的内容是注释
可以通过\转义字符换行
每个共享文件系统需要独立一行条目
客户端的主机列表需要使用空格隔开
接下来我们来看一下一条完整的规则条目是如何书写的吧,需要注意的是客户端主机可以是一个网段,单台主机或者是主机名称,在使用时应该灵活运用.
[共享目录] [允许谁来访问][权限] [可用主机名][权限] [其他主机权限]
/nfs 192.168.1.1(rw) localhost(rw) *(ro,sync)
/nfs 192.168.1.0/24(rw) localhost(rw) *(ro,sync)
/nfs 192.168.1.1(rw) 192.168.1.2(ro) 192.168.1.3(ro,sync)
如上所示,有个权限列表,NFS配置中可以给一个共享路径指定相关权限,NFS的默认属性为ro,sync,wdelay,root_squash,具体的NFS属性列表,我们可以参考一下列表.
NFS权限选项 功能描述信息
ro 以只读方式共享
rw 以读写方式共享
sync 同步写入磁盘
async 异步写入磁盘
wdelay 延迟写入操作
root_squash 屏蔽远程root权限
no_root_squash 不屏蔽远程root权限
all_squash 屏蔽所有远程用户权限
以上的几个说明信息,是我们最常用的几个,当然还有很多这样的配置选项,这里就不依次列举了,更多内容请百度了解.
NFS 服务端配置
1.在配置NFS共享文件之前,我们先来放行NFS的几个常用服务,并将防火墙默认设置为拒绝状态.
[root@localhost ~]# firewall-cmd --add-service=nfs
[root@localhost ~]# firewall-cmd --add-service=mountd
[root@localhost ~]# firewall-cmd --add-service=rpc-bind
[root@localhost ~]# firewall-cmd --add-service=nfs --permanent
[root@localhost ~]# firewall-cmd --add-service=mountd --permanent
[root@localhost ~]# firewall-cmd --add-service=rpc-bind --permanent
2.通过YUM仓库快速安装NFS相关的软件包.
[root@localhost ~]# yum install -y rpcbind nfs-utils*
Package rpcbind-0.2.0-47.el7.x86_64 already installed and latest version
Package 1:nfs-utils-1.3.0-0.61.el7.x86_64 already installed and latest version
Nothing to do
3.创建需要共享的文件,并拷贝相关的文件内容,并设置SeLinux规则.
[root@localhost ~]# mkdir -p /public
[root@localhost ~]# chmod o+rw /public/
[root@localhost ~]# chcon -R -t public_content_t /public/
4.修改NFS主配置文件,并写入要访问的主机列表.
[root@localhost ~]# vim /etc/exports
/public 192.168.1.0/24(rw,sync)
#-----------------------------------------------------------------
# 其他完整写法,可参考以下配置方式
#[共享目录] [允许谁来访问][权限] [可用主机名][权限] [其他主机权限]
#/nfs 192.168.1.1(rw) localhost(rw) *(ro,sync)
#/nfs 192.168.1.0/24(rw) localhost(rw) *(ro,sync)
5.重启NFS服务,和守护进程,并设置开机自启动.
[root@localhost ~]# systemctl restart nfs
[root@localhost ~]# systemctl restart rpcbind
[root@localhost ~]# systemctl enable nfs
[root@localhost ~]# systemctl enable rpcbind
[root@localhost ~]# systemctl restart nfs-server
[root@localhost ~]# systemctl enable nfs-server
NFS 客户端配置
1.通过YUM仓库快速安装NFS相关的软件包.
[root@localhost ~]# yum install -y rpcbind nfs-utils*
Package rpcbind-0.2.0-47.el7.x86_64 already installed and latest version
Package 1:nfs-utils-1.3.0-0.61.el7.x86_64 already installed and latest version
Nothing to do
2.创建挂载点,并设置SeLinux规则.
[root@localhost ~]# mkdir -p /mnt/nfsmount
[root@localhost ~]# chcon -R -t public_content_t /mnt/nfsmount
NFS挂载演示: 手动挂载目录,可通过mount命令来实现,具体的挂载参数如下.
#mount -t nfs -o 选项 服务主机:/服务器共享目录 /本地挂载没记录
[root@localhost ~]# mount -t nfs -o rw,sync 192.168.1.5:/public /mnt/nfsmount
[root@localhost ~]# df -hT |grep "public"
Filesystem Type Size Used Avail Use% Mounted on
192.168.1.5:/public nfs4 17G 1.9G 16G 12% /mnt/nfsmount
具体的挂载详细参数如下:
● Intr:当服务器宕机时终端NFS请求
● nfsvers=4:指定使用那个版本的协议
● noacl:关闭ACL,仅与老版本兼容
● nolock:关闭文件锁机制
● noexec:挂载时屏蔽二进制程序
● port=num:指定NFS服务器端口号
● rsize=num:设置最大数据块大小(读取)
● wsize=num:设置最大数据块大小(写入)
● tcp:使用TCP协议挂载
● udp:使用UDP协议挂载
nfsstat命令: NFS提供了查看NFS共享状态功能.
[root@localhost ~]# nfsstat #显示服务端与客户端状态
[root@localhost ~]# nfsstat -s #只显示服务端状态
[root@localhost ~]# nfsstat -c #只显示客户端状态
[root@localhost ~]# nfsstat -n #仅显示NFS与RPC信息
[root@localhost ~]# nfsstat -m #显示挂载信息
[root@localhost ~]# nfsstat -l #以列表信息显示信息
rpcinfo命令: NFS生成RPC信息报表功能.
[root@localhost ~]# rpcinfo -m 127.0.0.1 #显示指定主机rpcbind操作列表
[root@localhost ~]# rpcinfo -p 127.0.0.1 #显示指定主机RPC注册信息
[root@localhost ~]# rpcinfo -s #显示所有RPC注册信息
showmount命令: NFS使用shomount命令可以查看远程主机共享列表.
[root@localhost ~]# showmount -e 127.0.0.1 #显示服务器可用资源
[root@localhost ~]# showmount -a 127.0.0.1 #查看所有客户链接信息
[root@localhost ~]# showmount -d 127.0.0.1 #只显示客户输出信息
exportfs命令: 此命令允许root在不重启NFS服务情况下,选择共享或取消共享文件.
[root@localhost ~]# exportfs -a #全部挂载或卸载配置文件中的内容
[root@localhost ~]# exportfs -r #重新加载配置文件中的信息
[root@localhost ~]# exportfs -u #停止单一目录的共享
[root@localhost ~]# exportfs -au #停止所有服务端的共享
[root@localhost ~]# exportfs -ra #重新共享所有目录
配置固定端口: 我们可以修改配置文件来实现配置固定的共享端口号.
[root@localhost ~]# vim /etc/sysconfig/nfs
RQUOTAD_PORT=5001
LOCKD_TCPPORT=5002 #设置tcp的ockd程序端口号
LOCKD_UDPPORT=5002 #设置udp的lockd程序端口号
MOUNTD_PORT=5003 #设置mountd程序端口号
STATD_PORT=5004 #设置rpc.statd程序端口号
设置自动挂载: 修改自动挂载目录,写入以下内容即可实现自动挂载.
[root@localhost ~]# vim /etc/fstab
192.168.1.1:/public /mnt/nfsmount nfs default 0 0