本文讲解在 CentOS 5.x、CentOS 6.x 和 CentOS 7.x 环境下,如何安装与部署 NFS 服务。

注意:一台机器不要同时做 NFS 的服务端和 NFS 的客户端。如果同时作了 NFS 的服务端和客户端,那么在关机的时候,会一直夯住,可能十分钟之后甚至更久才能关闭成功。

NFS 工作原理简介

启动 NFS SERVER 之前,首先要启动 RPC 服务(CentOS 5.x 下为 portmap 服务,CentOS 6.x 和 CentOS 7.x 下为 rpcbind 服务,下同),否则 NFS SERVER 就无法向 RPC 服务注册了。

另外,如果 RPC 服务重新启动,原来已经注册好的NFS端口数据就会丢失,因此,此时 RPC 服务管理的NFS程序也需要重新启动以重新向RPC注册。

要特别注意的是:一般修改NFS配置文件后,是不需要重启NFS的,直接在命令行执行 /etc/init.d/nfs reload 「针对CentOS 5.x 或 CentOS 6.x」 或 systemctl reload nfs.service 「针对CentOS 7.x」 或 exportfs -rv 即可使修改的 /etc/exports 生效。

NFS 服务所需的安装包

安装 NFS 和 RPC 「服务端、客户端都安装」

 [root@backup ~]# rpm -qa nfs-utils rpcbind
[root@backup ~]# yum install nfs-utils rpcbind -y #nfs需要的安装包
[root@backup ~]# rpm -qa nfs-utils rpcbind
nfs-utils-1.2.-.el6.x86_64
rpcbind-0.2.-.el6_7.x86_64

查看用户信息

 [root@nfs01 ~]# tail /etc/passwd
haldaemon:x:::HAL daemon:/:/sbin/nologin
ntp:x::::/etc/ntp:/sbin/nologin
saslauth:x:::Saslauthd user:/var/empty/saslauth:/sbin/nologin
postfix:x::::/var/spool/postfix:/sbin/nologin
sshd:x:::Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
tcpdump:x::::/:/sbin/nologin
oldboy:x::::/home/oldboy:/bin/bash
rpc:x:::Rpcbind Daemon:/var/cache/rpcbind:/sbin/nologin #yum安装rpc服务时创建的
rpcuser:x:::RPC Service User:/var/lib/nfs:/sbin/nologin #yum安装rpc服务时创建的
nfsnobody:x:::Anonymous NFS User:/var/lib/nfs:/sbin/nologin #yum安装nfs服务时创建的

NFS 版本查看

服务端版本查看

nfsstat -s

客户端版本查看

nfsstat  -c

NFS服务端搭建

配置exports

 [root@nfs01 ~]# mkdir /data
[root@nfs01 ~]# ll -d /data/
drwxr-xr-x. root root Apr : /data/
[root@nfs01 ~]# chown -R nfsnobody.nfsnobody /data/
[root@nfs01 ~]# ll -d /data/
drwxr-xr-x. nfsnobody nfsnobody Apr : /data/
[root@nfs01 ~]# cat /etc/exports
# share /data for web created by zhangliang at --
/data 172.16.1.0/(rw,sync)
#172.16.1.0/(rw,sync) 没有空格
#/data 172.16.1.0/(rw,sync,root_squash,all_squash,anonuid=XXXX,anongid=XXXX) # 推荐配置

其他配置示例:

 # 指定 IP 配置
/opt 192.168.0.1(ro) 192.168.0.2(rw)
# 指定 网段
/data 172.16.1.0/(rw,sync)

启动rpcbind服务

CentOS 5.x 和 CentOS 6.x 启动方式

 [root@nfs01 ~]# /etc/init.d/rpcbind start
[root@nfs01 ~]# netstat -anp | grep 'rpc'
tcp 0.0.0.0: 0.0.0.0:* LISTEN /rpcbind
tcp 0.0.0.0: 0.0.0.0:* LISTEN /rpc.statd
tcp ::: :::* LISTEN /rpc.statd
tcp ::: :::* LISTEN /rpcbind
udp 0.0.0.0: 0.0.0.0:* /rpcbind
udp 127.0.0.1: 0.0.0.0:* /rpc.statd
udp 0.0.0.0: 0.0.0.0:* /rpc.statd
udp 0.0.0.0: 0.0.0.0:* /rpcbind
udp ::: :::* /rpcbind
udp ::: :::* /rpc.statd
udp ::: :::* /rpcbind
unix [ ACC ] STREAM LISTENING /rpcbind /var/run/rpcbind.sock
unix [ ] DGRAM /rpc.statd
[root@nfs01 ~]# rpcinfo -p localhost
program vers proto port service
tcp portmapper
tcp portmapper
tcp portmapper
udp portmapper
udp portmapper
udp portmapper
udp status
tcp status
#### 由上可知,暂时只有自己的端口服务,没有其他的

CentOS 7.x 启动方式

 [root@nginx_cdn ~]# systemctl start rpcbind.service
[root@nginx_cdn ~]# netstat -anp | grep 'rpc'
tcp 0.0.0.0: 0.0.0.0:* LISTEN /rpcbind
tcp6 ::: :::* LISTEN /rpcbind
udp 0.0.0.0: 0.0.0.0:* /rpcbind
udp 0.0.0.0: 0.0.0.0:* /rpcbind
udp6 ::: :::* /rpcbind
udp6 ::: :::* /rpcbind
unix [ ACC ] STREAM LISTENING /systemd /var/run/rpcbind.sock
[root@nginx_cdn ~]# rpcinfo -p localhost
program vers proto port service
tcp portmapper
tcp portmapper
tcp portmapper
udp portmapper
udp portmapper
udp portmapper

启动 NFS

CentOS 5.x 和 CentOS 6.x 启动方式

 [root@nfs01 ~]# /etc/init.d/nfs start
Starting NFS services: [ OK ]
Starting NFS quotas: [ OK ]
Starting NFS mountd: [ OK ]
Starting NFS daemon: [ OK ]
正在启动 RPC idmapd: [确定]
[root@nfs01 ~]# rpcinfo -p localhost
program vers proto port service
tcp portmapper
tcp portmapper
tcp portmapper
udp portmapper
udp portmapper
udp portmapper
udp status
tcp status
udp rquotad
udp rquotad
tcp rquotad
tcp rquotad
udp mountd
tcp mountd
udp mountd
tcp mountd
udp mountd
tcp mountd
tcp nfs
tcp nfs
tcp nfs
tcp nfs_acl
tcp nfs_acl
udp nfs
udp nfs
udp nfs
udp nfs_acl
udp nfs_acl
udp nlockmgr
udp nlockmgr
udp nlockmgr
tcp nlockmgr
tcp nlockmgr
tcp nlockmgr

CentOS 7.x 启动方式

 [root@nginx_cdn ~]# systemctl start nfs.service
[root@nginx_cdn ~]# rpcinfo -p localhost
program vers proto port service
tcp portmapper
tcp portmapper
tcp portmapper
udp portmapper
udp portmapper
udp portmapper
udp status
tcp status
udp mountd
tcp mountd
udp mountd
tcp mountd
udp mountd
tcp mountd
tcp nfs
tcp nfs
tcp nfs_acl
udp nfs
udp nfs
udp nfs_acl
udp nlockmgr
udp nlockmgr
udp nlockmgr
tcp nlockmgr
tcp nlockmgr
tcp nlockmgr

加入开始自启动

CentOS 5.x 和 CentOS 6.x 环境

使用 /etc/rc.local

 [root@nfs01 ~]# tail /etc/rc.local
# You can put your own initialization stuff in here if you don't
# want to do the full Sys V style init stuff. touch /var/lock/subsys/local # start rpc and nfs server
/etc/init.d/rpcbind start
/etc/init.d/nfs start

使用chkconfig

 [root@nfs01 ~]# chkconfig rpcbind on
[root@nfs01 ~]# chkconfig nfs on
[root@nfs01 ~]# ls /etc/rc.d/rc3.d/* | grep -E 'rpc|nfs'
/etc/rc.d/rc3.d/K61nfs-rdma
/etc/rc.d/rc3.d/K69rpcsvcgssd
/etc/rc.d/rc3.d/S13rpcbind
/etc/rc.d/rc3.d/S14nfslock
/etc/rc.d/rc3.d/S19rpcgssd
/etc/rc.d/rc3.d/S30nfs

查看rpc服务和NFS服务的开机启动顺序

 [root@nfs01 ~]# head /etc/init.d/rpcbind
#! /bin/sh
#
# rpcbind Start/Stop RPCbind
#
# chkconfig: #运行级别 开机顺序 关机顺序【其中 指的是 运行级别】
# description: The rpcbind utility is a server that converts RPC program \
# numbers into universal addresses. It must be running on the \
# host to be able to make RPC calls on a server on that machine.
#
# processname: rpcbind
[root@nfs01 ~]# head /etc/init.d/nfs
#!/bin/sh
#
# nfs This shell script takes care of starting and stopping
# the NFS services.
#
# chkconfig: -
# description: NFS is a popular protocol for file sharing across networks.
# This service provides NFS server functionality, which is \
# configured via the /etc/exports file.
# probe: true

CentOS 7.x 环境

 [root@nginx_cdn ~]# systemctl enable rpcbind.service
[root@nginx_cdn ~]# systemctl enable nfs.service

查看具体状态情况

 [root@nginx_cdn ~]# systemctl status rpcbind.service
● rpcbind.service - RPC bind service
Loaded: loaded (/usr/lib/systemd/system/rpcbind.service; enabled; vendor preset: enabled)
………………
[root@nginx_cdn ~]# systemctl status nfs.service
● nfs-server.service - NFS server and services
Loaded: loaded (/usr/lib/systemd/system/nfs-server.service; enabled; vendor preset: disabled)
………………

查看有哪些参数生效

 [root@nfs01 ~]# cat /var/lib/nfs/etab
/data 172.16.1.0/(rw,sync,wdelay,hide,nocrossmnt,secure,root_squash,no_all_squash,no_subtree_check,secure_locks,acl,anonuid=,anongid=,sec=sys,rw,root_squash,no_all_squash)

参数说明:
ro:只读设置,这样 NFS 客户端只能读、不能写(默认设置);
rw:读写设置,NFS 客户端可读写;
sync:将数据同步写入磁盘中,效率低,但可以保证数据的一致性(默认设置);
async:将数据先保存在内存缓冲区中,必要时才写入磁盘;如果服务器重新启动,这种行为可能会导致数据损坏,但效率高;
root_squash:当客户端用 root 用户访问该共享文件夹时,将 root 用户映射成匿名用户(默认设置);
no_root_squash:客户端的 root 用户不映射。这样客户端的 root 用户与服务端的 root 用户具有相同的访问权限,这可能会带来严重的安全影响。没有充分的理由,不应该指定此选项;
all_squash:客户端所有普通用户及所属组都映射为匿名用户及匿名用户组;「推荐设置」
no_all_squash:客户端所有普通用户及所属组不映射(默认设置);
subtree_check:如果共享,如:/usr/bin之类的子目录时,强制NFS检查父目录的权限;
no_subtree_check:即使共享 NFS 服务端的子目录时,nfs服务端也不检查其父目录的权限,这样可以提高效率(默认设置);
secure:限制客户端只能从小于1024的tcp/ip端口连接nfs服务器(默认设置);
insecure:允许客户端从大于1024的tcp/ip端口连接服务器;
wdelay:检查是否有相关的写操作,如果有则将这些写操作一起执行,这样可以提高效率(默认设置);
no_wdelay:若有写操作则立即执行,当使用async时,无需此设置;
anonuid=xxx:将远程访问的所有用户主都映射为匿名用户主账户,并指定该匿名用户主为本地用户主(UID=xxx);
anongid=xxx:将远程访问的所有用户组都映射为匿名用户组账户,并指定该匿名用户组为本地用户组(GID=xxx);

检查是否成功

 [root@nfs01 ~]# showmount -e 172.16.1.31  # 其中 172.16.1.31 为 NFS 服务端IP
Export list for 172.16.1.31:
/data 172.16.1.0/

NFS客户端配置

启动rpcbind服务

CentOS 5.x 和 CentOS 6.x 环境

 [root@web01 ~]# /etc/init.d/rpcbind start
Starting rpcbind: [ OK ]

CentOS 7.x 环境

 [root@nginx_proxy01 ~]# systemctl start rpcbind.service

检查共享信息

 [root@web01 ~]# showmount -e 172.16.1.31
Export list for 172.16.1.31:
/data 172.16.1.0/

NFS挂载

2台机器都挂载 NFS,好用于后面的测试。

 [root@web01 ~]# mount -t nfs 172.16.1.31:/data /mnt

查看挂载信息

查询方式1

 [root@web01 ~]# df -h        #有时可能会被卡主
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 .8G .5G .9G % /
tmpfs 495M 495M % /dev/shm
/dev/sda1 190M 40M 141M % /boot
172.16.1.31:/data .8G .5G .9G % /mnt

查询方式2

 [root@web01 ~]# cat /proc/mounts                     # 优先使用,监控时使用该命令
rootfs / rootfs rw
proc /proc proc rw,relatime
sysfs /sys sysfs rw,relatime
devtmpfs /dev devtmpfs rw,relatime,size=490920k,nr_inodes=,mode=
devpts /dev/pts devpts rw,relatime,gid=,mode=,ptmxmode=
tmpfs /dev/shm tmpfs rw,relatime
/dev/sda3 / ext4 rw,relatime,barrier=,data=ordered
/proc/bus/usb /proc/bus/usb usbfs rw,relatime
/dev/sda1 /boot ext4 rw,relatime,barrier=,data=ordered
none /proc/sys/fs/binfmt_misc binfmt_misc rw,relatime
sunrpc /var/lib/nfs/rpc_pipefs rpc_pipefs rw,relatime
172.16.1.31:/data/ /mnt nfs4 rw,relatime,vers=,rsize=,wsize=,namlen=,hard,proto=tcp,port=,timeo=,retrans=,sec=sys,clientaddr=172.16.1.8,minorversion=,local_lock=none,addr=172.16.1.31

测试

在客户端和服务端之间测试
「2个客户端,1个服务端」

1、任意客户端创建文件夹或创建文件并且输入数据,在服务端是否可以查看;

2、服务端创建文件夹或创建文件并且输入数据,在任意客户端是否可以查看;

3、在客户端A 删除客户端B 创建的文件

4、在客户端B 删除客户端A 创建的文件

加入开机自启动

如果是 CentOS 7 环境,那么必须保证 /etc/rc.d/rc.local 文件具有可执行权限,否则该脚本不会执行也不会生效。

开机自启动方式1

 [root@web01 mnt]$ ll /etc/rc.local
lrwxrwxrwx. root root Nov /etc/rc.local -> rc.d/rc.local
[root@web01 mnt]# tail - /etc/rc.local # mount nfs
mount -t nfs 172.16.1.31:/data /mnt

开机自启动方式2

 [root@web01 mnt]$ cat /etc/fstab
# 添加如下信息
172.16.1.31:/data /mnt nfs defaults

存在问题

加入了开机自启动,当重启 NFS 客户端机器时,如果此时 NFS 服务端机器已关机,或者网络存在问题等等。使 NFS 客户端连接 NFS 服务端失败,那么此时会造成 NFS 客户端机器起不来的情况。

因此为了避免该情况发生,不建议机器开机自启动就挂载 NFS。

如果一台机器必须挂载 NFS,那么我们就做好监控。当该机器未挂载 NFS 时就告警给我们,然后我们去手动挂载。

当然如果实际环境中你们的 NFS 服务极其稳定,且几乎不再改变 NFS 服务端地址,那么此时你也可以加入开机自启动。

这些都是根据实际具体情况具体分析的。


如果觉得不错就点个赞呗 (-^O^-) !

———END———-

NFS服务搭建与配置的更多相关文章

  1. syslog-ng日志收集分析服务搭建及配置

    syslog-ng日志收集分析服务搭建及配置:1.网上下载eventlog_0.2.12.tar.gz.libol-0.3.18.tar.gz.syslog-ng_3.3.5.tar.gz三个软件: ...

  2. NFS相关、NFS服务端安装配置、exportfs命令、nfs客户端的问题

    1.NFS (network file system,基于RPC协议) 2.NFS服务端安装配置安装服务端:yum install nfs-utils rpcbind -y安装客户端:yum inst ...

  3. NFS介绍 NFS服务端安装配置 NFS配置选项

    NFS 介绍 • NFS是Network File System的缩写 • NFS最早由Sun公司开发,分2,,4三个版本,2和3由Sun起草开发,.0开始Netapp公司参与并主导开发,最新为4.1 ...

  4. CentOS7下NFS服务安装及配置固定端口

    CentOS7下NFS服务安装及配置 系统环境:CentOS Linux release 7.4.1708 (Core) 3.10.0-693.el7.x86_64 软件版本:nfs-utils-1. ...

  5. Linux centosVMware NFS介绍、NFS服务端安装配置、NFS配置选项

    一.NFS介绍 NFS是Network File System的缩写 NFS最早由Sun公司开发,分2,3,4三个版本,2和3由Sun起草开发,4.0开始Netapp公司参与并主导开发,最新为4.1版 ...

  6. Linux下网络文件系统NFS服务搭建易错点总结

    一.环境准备: 1 [root@czh ~]# cat /etc/redhat-release 2 CentOS release 6.7 (Final) 3 [root@czh ~]# uname - ...

  7. Llinux,NFS服务搭建(文件共享)

    NFS配置文件权限参数说明(/etc/exports) 1.rw :表示可读写权限. 2.ro :表示只读权限. 3.sync :请求或写入数据时,数据同步写入到NFS Server的硬盘后才返回.( ...

  8. NFS服务安装及配置

    服务器环境:CentOS6.9  Linux 2.6.32-696.el6.x86_64 安装NFS服务 nfs客户端和服务端都只需要安装nfs-utils包即可,并且yum安装时会连带安装rpcbi ...

  9. linux服务搭建----NFS服务搭建

    nfs  服务     //配置脚本         /etc/exports     //服务器  发布目录     1> 确定需要发布的目录(想要共享的目录)     例如:      想发 ...

随机推荐

  1. 首个hybird商业项目踩坑总结

    该文章是一个系列文章,是本人在Android开发的漫漫长途上的一点感想和记录,我会尽量按照先易后难的顺序进行编写该系列.该系列引用了<Android开发艺术探索>以及<深入理解And ...

  2. 数字对讲系统开发札记(前端linux c 后端 c#)

    前言 数字化是一种趋势,特别是在“提速降费”的大环境下,这种趋势愈发明显.对讲机这种古老的系统也处在时代的变革之中,虽然手机的功能越来越强,让人怀疑对讲机是否还有存在的必要.诚然,对讲机仍然有它的市场 ...

  3. Docker 数据卷和数据卷容器

    1.本节课主要讲解如何在Docker内部及容器之间管理数据.容器中管理数据主要有两种方式:数据卷(Data volumes)数据卷容器(Data volume containers) 2.数据卷:是一 ...

  4. 目标检测模型的性能评估--MAP(Mean Average Precision)

    目标检测模型中性能评估的几个重要参数有精确度,精确度和召回率.本文中我们将讨论一个常用的度量指标:均值平均精度,即MAP. 在二元分类中,精确度和召回率是一个简单直观的统计量,但是在目标检测中有所不同 ...

  5. 只知道ajax?你已经out了

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由前端林子发表于云+社区专栏 随着前端技术的发展,请求服务器数据的方法早已不局限于ajax.jQuery的ajax方法.各种js库已如雨 ...

  6. Tomcat8源码笔记(三)Catalina加载过程

    之前介绍过 Catalina加载过程是Bootstrap的load调用的  Tomcat8源码笔记(二)Bootstrap启动 按照Catalina的load过程,大致如下: 接下来一步步分析加载过程 ...

  7. 牛刀小试MySQL--GTID

    GTID的概念 何为GITD GTID(global transaction identifier)是全局事务标识符,在MySQL5.6版本中作为一个超级特性被推出.事务标识不仅对于Master(起源 ...

  8. RockChip RK3326 系统编译问题总结

    1. 序言 本文主要记录了RK3326平台系统编译过程中遇到的各种问题,并加以解决! 环境: 宿主Linux:Ubuntu 16.04 目标机:RK3326 (64bit) Toolchain:gcc ...

  9. Shell 函数定义与调用

    linux shell 可以用户定义函数,然后在 shell 脚本中可以随便调用. 以一个计算两数之和的函数为例: #! /bin/bash # 函数定义 sum(){ return $(($1+$2 ...

  10. c#中打开Excel文档

    方法一:(调用Excel的COM组件)       在项目中打开Add Reference对话框,选择COM栏,之后在COM列表中找到"Microsoft Excel 11.0 Object ...