1、NFS概述

NFS 是 Network FileSystem 的缩写,是让不同的主机、不同的操作系统可以共享存储的服务。通过 NFS,我们本地 NFS 的客户端可以透明地读写位于服务端 NFS 服务器上的文件,就像访问本地文件一样方便。

NFS 在文件传送或信息传送过程中依赖于 RPC(Remote Procedure Call) 协议,即远程过程调用, NFS 的各项功能都必须要向 RPC 来注册,如此一来 RPC 才能了解 NFS 这个服务的各项功能 Port、PID、NFS 在服务器所监听的 IP 等,而客户端才能够透过 RPC 的询问找到正确对应的端口,所以,NFS 必须要有 RPC 存在时才能成功的提供服务,简单的理解二者关系:NFS是 一个文件存储系统,而 RPC 是负责信息的传输。

下面详细说明在Linux平台上配置NFS服务的方法:

2、环境、软件准备

这里以CentOS和Ubuntu为例来说明,物理机、云主机或虚拟机均可,保障服务器和客户机之间的网络畅通。

3、NFS 服务安装

通过上边简要的介绍,我们知道 NFS 服务需要依赖 RPC 服务,所以这里 NFS 服务端需要安装 rpcbind 和 nfs-utils,客户端只需要安装 nfs-utils 即可,由于我选用的为 CentOS 系统,所以可以使用 yum 快速的安装。

CentOS

#服务端
$ yum install -y nfs-utils rpcbind
#客户端
$ yum install -y nfs-utils

Ubuntu

#服务端
apt install nfs-kernel-server
#客户端
apt install nfs-common

4、NFS 配置及使用

配置NFS服务

我们在服务端创建一个共享目录 /data/share ,作为客户端挂载的远端入口,然后设置权限。

$ mkdir -p /data/share
$ chmod 666 /data/share

然后,修改 NFS 配置文件 /etc/exports

$ vim /etc/exports
#编辑文件内容如下:
/data/share 10.222.77.0/24(rw,sync,insecure,no_subtree_check,no_root_squash)

说明一下,这里配置后边有很多参数,每个参数有不同的含义,具体可以参考下边。此处,我配置了将 /data/share 文件目录设置为允许 IP 为该 10.222.77.0/24 区间的客户端挂载,当然,如果客户端 IP 不在该区间也想要挂载的话,可以设置 IP 区间更大或者设置为 * 即允许所有客户端挂载,例如:

#允许所有ip客户端挂载
/data/share *(ro,sync,insecure,no_root_squash)

参数说明:

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

先启动 RPC 服务

$ service rpcbind start
#或者
$ /bin/systemctl start rpcbind.service

查看 NFS 服务项 rpc 服务器注册的端口列表

$ rpcinfo -p localhost program vers proto   port  service100000    4   tcp    111  portmapper100000    3   tcp    111  portmapper100000    2   tcp    111  portmapper100000    4   udp    111  portmapper100000    3   udp    111  portmapper100000    2   udp    111  portmapper

注意:此时我们还没有启动 NFS 服务,只监听了 111 端口,接着我们来启动 NFS 服务,再来看下注册的端口列表。

再启动 NFS 服务

$ service nfs start
#或者
/bin/systemctl start nfs.service

启动 NFS服务后 rpc 服务已经启用了对 NFS 的端口映射列表:

$ rpcinfo -p localhostprogram vers proto   port  service100000    4   tcp    111  portmapper100000    3   tcp    111  portmapper100000    2   tcp    111  portmapper100000    4   udp    111  portmapper100000    3   udp    111  portmapper100000    2   udp    111  portmapper100024    1   udp  33745  status100024    1   tcp  36980  status100005    1   udp  20048  mountd100005    1   tcp  20048  mountd100005    2   udp  20048  mountd100005    2   tcp  20048  mountd100005    3   udp  20048  mountd100005    3   tcp  20048  mountd100003    3   tcp   2049  nfs100003    4   tcp   2049  nfs100227    3   tcp   2049  nfs_acl100003    3   udp   2049  nfs100003    4   udp   2049  nfs100227    3   udp   2049  nfs_acl100021    1   udp  38960  nlockmgr100021    3   udp  38960  nlockmgr100021    4   udp  38960  nlockmgr100021    1   tcp  38362  nlockmgr100021    3   tcp  38362  nlockmgr100021    4   tcp  38362  nlockmgr

我们发现,启动了 NFS 服务后,rpc 注册的端口列表明显增多。OK 现在服务端都启动起来了,在服务端看下是否正确加载了设置的 /etc/exports 配置。

$ showmount -e localhost
Export list for localhost:
/data/share 10.222.77.0/24

5、注意开启端口

如果使用了防火墙,一定要在服务端把需要的端口打开,否则会客户端无法访问。
默认情况需要如下端口:

tcp  111 2049  20048 端口
udp 111  4046  端口

6、NFS 测试

最后,在另一台 Linux 上测试一下,是否能够正确挂载吧。首先,我们可以在客户端查看下 NFS 服务端 (上边服务端 IP 为:10.222.77.86) 设置可共享的目录信息。

# showmount -e 10.222.77.86
Export list for 10.222.77.86:
/data/share 10.222.77.0/24

然后,在客户端创建挂在目录 /share

$ mkdir -p /share

最后,挂载远端目录到本地 /share 目录。

$ mount 10.222.77.86:/data/share /share
$ df -h | grep 10.222.77.86
Filesystem                 Size  Used  Avail Use% Mounted on
10.222.77.86:/data/share   27G   11G   17G   40%  /share

可以看到,可以正确将远端 NFS 目录挂载到本地。注意:挂载点 /share 目录必须已经存在,而且目录中没有文件或子目录。

最后,我们在 NFS 服务端 /data/share 目录下创建一个文件,看下客户端是否能够正确读取并修改。

服务端写入文件

$ echo "This is NFS server." > /data/share/nfs.txt
$ ll /data/share/
total 4
-rw-r--r-- 1 root root 20 Nov  5 16:49 nfs.txt

在客户端读取测试

$ ll /share/
total 4
-rw-r--r-- 1 root root 20 Nov  5 16:49 nfs.txt
$ cat /share/nfs.txt
This is NFS server.

客户端写入文件
$ echo "This is NFS client." >> /share/nfs.txt

服务端读取测试

$ cat /data/share/nfs.txt
This is NFS server.
This is NFS client.

都是木有问题的,这是因为上边设置了 NFS 远端目录权限为 rw 拥有读写权限,如果设置为 ro,那么客户端只能读取,不能写入,根据实际应用场景合理配置,这里就不在演示了。这里提一下,NFS 默认使用用 UDP 协议来进行挂载,为了提高 NFS 的稳定性,可以使用 TCP 协议挂载,那么客户端挂载命令可使用如下命令:

$ mount 10.222.77.86:/data/share /share -o proto=tcp -o nolock

最后,如果客户端要卸载 NFS 挂载的话,使用如下命令即可。

$ umount /share

Linux 环境下NFS服务安装及配置相关推荐

  1. linux安装或卸载mysql5,Linux环境下卸载、安装及配置MySQL5.1

    Linux环境下卸载原有MySQL5.1数据库,并重新安装MySQL数据库的示例记录. 一.卸载MySQL 查看主机中是否安装了MySQL数据库: [root@RD-viPORTAL-1 ~]# rp ...

  2. linux mount 默认端口,CentOS7下NFS服务安装及配置固定端口

    系统环境:CentOS Linux release 7.4.1708 (Core) 3.10.0-693.el7.x86_64 软件版本:nfs-utils-1.3.0-0.48.el7_4.x86_ ...

  3. Linux 环境下NFS 服务搭建

    之前接到一个电话面试其中一个问题是如何搭建一个NFS服务器,他说他看过我的博客了,忽然我的第一反应是联想到博客里面可能是缺少了一篇关于NFS的文章了^_^~ 开玩笑啦!~ 下面说点正经的,如果大家是在 ...

  4. Linux环境下weblogic的安装与配置

    目录 前言 一.安装jdk 1) 上传jdk到任意目录下 2) 解压 3) 移动安装目录 4) 配置环境变量 5) 查看Java版本,验证是否安装成功 二.安装weblogic 1.创建及配置用户信息 ...

  5. Linux环境下oracle client安装和配置

    oracle客户端的安装是非常简单的,关键在tns配置,我这里使用的rpm安装包,oracle本身就不是开源,那使用rpm安装时最简单的. 1.要远程使用oracle,先下载下面三个文件,注意版本最好 ...

  6. linux 环境下git的安装与配置

    git是一个分布式的版本控制工具 1.安装git相关的依赖 yum install curl-devel expat-devel gettext-devel openssl-devel zlib-de ...

  7. linux下的python安装,linux环境下的python安装过程

    一.下载python源码包 打开ubuntu下的shell终端,通过wget命令下载python源码包,如下图所示: wget https://www.python.org/ftp/python/3. ...

  8. django配置环境linux,linux环境下Django的安装配置详解

    linux环境下Django的安装配置详解 1. 下载安装Django pip install Django==1.6.5 测试是否安装成功 >>> import django> ...

  9. NFS服务安装与配置方案

    NFS服务搭建方案 一.NFS简介 NFS它是Network File system 的缩写,即网络文件系统,我们可以通过NFS达到文件的共享,NFS 服务器设置一个共享目录或者文件给NFS 客户机, ...

最新文章

  1. 双11大考 POLARDB分钟级弹性让企业轻松扩展
  2. Kotlin学习 PART 3:类,对象和接口
  3. sqlite 数据类型 全面
  4. 轩逸车联网功能怎么用_手机上面的NFC功能怎么用的
  5. [推荐] TechNet 广播 SQL Server 2000完结篇
  6. 10倍,BoostKit鲲鹏全局缓存3大创新技术助力Ceph性能提升
  7. 使用文本编辑器+命令行的方式实现Java中的第一个程序Hello World(下)
  8. 什么是Word2Vec?如何有效的表征文本的?
  9. 诺基亚培育低端机市场 迂回战术威胁中华酷联
  10. 清华大学计算机与科学系张荷花简历,清华大学软件学院
  11. Spring知识整合(主要SSM)
  12. 道德与企业成败 【如何搞垮一个企业.序】
  13. C# 微信JS-SDK之config接口注入权限验证invalid signature签名错误
  14. 中国石油大学《化工设计概论》第二阶段在线作业
  15. Error using symconvertChar (sym使用报错)
  16. 锁消除、锁粗化、偏向锁、自旋锁
  17. Cesium 鼠标事件监听
  18. SpringBoot+MybatisPlus多数据源动态切换
  19. pygame 如何旋转图片
  20. Unity游戏Mod/插件制作教程01 - BepInEx的安装和使用

热门文章

  1. TypeScript笔记 5--变量声明(解构和展开)
  2. spring3 的restful API RequestMapping介绍
  3. 使用Oracle 11g新特性 Active Database Duplication 搭建Dataguard环境
  4. Oracle role and user privileges
  5. 转载---安装mysql5.7,遇到的问题
  6. 第一册:lesson forty three。
  7. [luoguP1095] 守望者的逃离(DP)
  8. Block代码块中使用局部变量注意点
  9. 构建高性能ASP.NET站点
  10. 【python】函数的定义与操作