NFS 即网络文件系统,是一种使用于分布式文件系统的协议,由Sun公司开发,于1984年向外公布,功能是通过网络让不同的机器,不同的操作系统能够彼此分享各自的数据,让应用程序在客户端通过网络访问位于服务器磁盘中的数据,是在类Unix系统间实现磁盘文件共享的一种方法.

NFS服务器可以允许NFS客户端将远端NFS服务器端的共享目录挂载到本地的NFS客户端中,在本地的NFS客户端的机器看来,NFS服务器端共享的目录就好像自己的磁盘分区和目录一样.

目前NFS有三个版本,分别是NFSv2,NFSv3,NFSv4,以下是其常用的版本解析:

● NFSv2:是一个古老的版本,但却被众多的操作系统所支持,这样兼容性更好.

● NFSv3:拥有更多的特点,包括更快的速度,更大的单个文件大小,对TCP的支持.

● NFSv4:提供有状态连接,共容易追踪,安全性增强,RHEL7上默认4版本协议.

当2台主机通过网络建立连接时,双方主机就需要提供基本信息,如IP地址、服务端口号等,当有 100 台客户端需要访问某台服务器时,服务器就需要记住这些客户端的IP地址以及相应的端口号等信息,而这些信息是需要程序来管理的.

在 Linux 中,这样的信息可以由某个特定服务自己来管理,也可以委托给 RPC(Remote Procedure Call)来管理,RPC是远程过程调用协议,RPC协议为远程通信程序管理维护基本配置信息,这样 NFS 服务就可以专注于如何共享数据,至于通信的连接以及连接的基本信息,则全权委托给RPC服务来完成管理,RPC所需要的两个软件包分别是nfs-utils,rpcbind你可以通过YUM来快速安装.

了解NFS的分配流程:

NFS是通过网络来进行服务端和客户端之间的数据传输,两者之间要传输数据就要有相对应的网络端口来进行传输,NFS服务器端其实是随机选择端口来进行数据传输.

RPC服务会统一管理NFS的端口,客户端和服务端通过RPC来先沟通NFS使用了哪些端口,之后再利用这些端口(小于1024)来进行数据的传输.

RPC管理服务端的NFS端口分配,客户端要传数据,那客户端的RPC会先跟服务端的RPC去要服务器的端口,要到端口后再建立连接,然后传输数据.

当NFS启动后,就会随机的分配端口,然后NFS就会向RPC去注册这些端口,RPC就会记录下这些端口并且RPC会开启111端口,等待客户端RPC的请求,如果客户端有请求,那服务端的RPC就会将记录的NFS端口信息告知客户端.

NFS服务配置说明:

在启动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 普通配置实例

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

NTP 时间同步(拓展)

NTP服务端配置

1.通过YUM仓库快速安装NTP服务的相关软件.

[root@localhost ~]# yum install -y ntp ntpdate autogen-libopts

Package ntp-4.2.6p5-28.el7.centos.x86_64 already installed and latest version
Package ntpdate-4.2.6p5-28.el7.centos.x86_64 already installed and latest version
Package autogen-libopts-5.18-5.el7.x86_64 already installed and latest version
Nothing to do

2.编辑NTP主配置文件,修改以下相关语句,注释掉网络同步源,并配置本机作为NTP服务器.

[root@localhost ~]# vim /etc/ntp.conf

19 # Use public servers from the pool.ntp.org project.
20 # Please consider joining the pool (http://www.pool.ntp.org/join.html).
21 #server 0.centos.pool.ntp.org iburst #注释掉,不使用网络同步
22 #server 1.centos.pool.ntp.org iburst #注释掉,不使用网络同步
23 #server 2.centos.pool.ntp.org iburst #注释掉,不使用网络同步
24 #server 3.centos.pool.ntp.org iburst #注释掉,不使用网络同步
25
26 restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap #允许192.168.1.0/24网段来获取
27 server 127.127.1.0 #本服务器IP地址,地址反写
28 fudge 127.127.1.0 stratum 10 #定义权威服务器,级别10

3.重启NTP服务,并设置开机自启动,如果有防火墙需要自行放行规则.

[root@localhost ~]# systemctl restart ntpd
[root@localhost ~]# systemctl enable ntpd

NTP客户端配置

1.通过YUM仓库快速安装NTP服务的相关软件.

[root@localhost ~]# yum install -y ntp ntpdate autogen-libopts

Package ntp-4.2.6p5-28.el7.centos.x86_64 already installed and latest version
Package ntpdate-4.2.6p5-28.el7.centos.x86_64 already installed and latest version
Package autogen-libopts-5.18-5.el7.x86_64 already installed and latest version
Nothing to do

2.使用NTP命令同步时间数据,并写入计划任务,每20分钟同步一次.

[root@localhost ~]# ntpdate -u 192.168.1.1
5 Jan 01:35:47 ntpdate[1645]: adjust time server 192.168.1.1 offset 0.000002 sec [root@localhost ~]# crontab -u root -e
crontab: installing new crontab
[root@localhost ~]# crontab -u root -l
*/20 * * * * ntpdate -u 27.0.0.1 &>/dev/null [root@localhost ~]# systemctl restart crond
[root@localhost ~]# systemctl enable crond

NFS实现部署Linux文件共享的更多相关文章

  1. Linux文件共享服务之NFS

    NFS(Network File System) 网络文件系统,是FreeBSD支持的文件系统中的一种,它允许网络中的计算机之间通过TCP/IP网络共享资源.在NFS的应用中,本地NFS的客户端应用可 ...

  2. Windows与Linux文件共享

    Windows与Linux文件共享 Samba服务器 安装Samba服务器 rpm –ivh /mnt/Packages/Samba-3.5.10-125.el6.i686.rpm 添加用户并修改密码 ...

  3. windows nfs server for linux

    摘要 在开发嵌入式系统的过程中,为了方便调试与文件共享,需要使用到nfs,即网络文件系统,这位板子的调试测试带来了很大的方便.之前在linux系统下开发,与ARM11核心板 linux系统对接共享也比 ...

  4. 使用Cobbler批量部署Linux和Windows:Windows系统批量安装(三)

    Tutorial: Installing Windows with cobbler (cobbler安装Windows) Windows系统的自动安装需要用到Win PE工具.流程如下: 定制Win ...

  5. pxe+kickstart 自动化部署linux操作系统

    kickstart 是什么? 批量部署Linux服务器操作系统 运行模式: C/S client/server 服务器上要部署: DHCP tftp(非交互式文件共享) 安装系统的三个步骤: 1.加载 ...

  6. linux文件共享服务

    linux文件共享配置 Windows访问linux 以下操作都在关闭防火墙和关闭selinux的环境下. 关闭防火墙的命令:service iptables stop关闭SELINUX命令:sete ...

  7. Linux文件共享服务之Vsftp

    目录 FTP Vsftp服务的搭建 ftp.sftp.vsftp.vsftpd的区别 FTP FTP的工作原理: FTP会话时包含了两个通道,一个叫控制通道,一个叫数据通道.控制通道是和FTP服务器进 ...

  8. Linux文件共享服务之Samba

    目录 Samba Samba的配置 Samba Samba是一个能让Linux系统应用Microsoft网络通讯协议的软件,而SMB是Server Message Block的缩写,即为服务器消息块 ...

  9. 企业部署Linux应用将拥有更低的整体拥有成本

    企业部署Linux应用将拥有更低的整体拥有成本     使用Linux能为企业的IT解决方案降低TCO(整体拥有成本Total Cost of The Ownership)吗?在面临这个问题时,很多企 ...

  10. Cobbler全自动批量安装部署Linux系统

    说明: Cobbler服务器系统:CentOS 5.10 64位 IP地址:192.168.21.128 需要安装部署的Linux系统: eth0(第一块网卡,用于外网)IP地址段:192.168.2 ...

随机推荐

  1. django DRF

    博客目录 web应用模式 api接口 接口测试工具postman restful规范 drf安装 序列化和反序列化 CBV源码分析 drf之APIView分析 drf之Request对象分析 drf- ...

  2. 创建DOM节点时出现错误信息:box.appendChild is not a function

    1.代码正常书写如下 <div class="box"></div> <!-- JavaScript代码 --> <script> ...

  3. 区间dp专题小结

    区间DP是一类在区间上进行动态规划的最优问题,一般是根据问题设出一个表示状态的 dp,可以是二维的也可以是三维的,一般情况下为二维.然后将问题划分成两个子问题,也就是一段区间分成左右两个区间,然后将左 ...

  4. vue 状态管理 三、Mutations和Getters用法

    系列导航 vue 状态管理 一.状态管理概念和基本结构 vue 状态管理 二.状态管理的基本使用 vue 状态管理 三.Mutations和Getters用法 vue 状态管理 四.Action用法 ...

  5. mouseenter和mouseover区别

    mouseenter事件 当鼠标移动到元素上时,就会触发mouseenter事件. 类似mouseover,它们两者之间的差别是:mouseover鼠标经过自身盒子会触发,经过子盒子还会触发.mous ...

  6. P1216-DP【橙】

    在这道题中,我第一次用了memset,确实方便,不过需要注意的是只有全部赋值-1和0的时候才能使用它,否则他能干出吓死人的事.以及memset在cstring头文件里,在本地就算不include也能照 ...

  7. shell脚本(9)-流程控制for

    一.循环介绍 for循环叫做条件循环,或者for i in,可以通过for实现流程控制 二.for语法 1.for语法一:for in for var in value1 value2 ...... ...

  8. 在 CMake 中使用 Qt windeploy 进行 install

    install(TARGETS app BUNDLE DESTINATION . LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} RUNTIME DESTINA ...

  9. mysql 用户及用户权限管理命令总结-用户添加及添加权限

    本文为博主原创,转载请注明出处: linux 使用root 用户登录mysql 1. 添加用户,并设置用户登录密码: 格式: create user user_name@'ip'  identifie ...

  10. kafka 的基本概念及使用场景

    本文为博主原创,未经允许不得转载: 1. Kafka 的使用场景: 1.日志收集:一个公司可以用Kafka收集各种服务的log,通过kafka以统一接口服务的方式开放给各种 consumer,例如ha ...