一、NFS服务相关介绍

1、NFS简介

 NFS (Network File System) 网络文件系统,基于内核的文件系统。Sun公司开发,通过使用NFS,用户和程序可以像访问本地文件一样访问远端系统上的文件。

 NFS 是基于RPC (Remote Procedure Call Protocol远程过程调用) 实现,RPC采用C/S模式,客户机请求程序调用进程发送一个有进程参数的调用信息到服务进程,然后等待应答信息。在服务器端,进程保持睡眠状态直到调用信息到达为止。当一个调用信息到达,服务器获得进程参数,计算结果,发送答复信息,然后等待下一个调用信息,最后,客户端调用进程接收答复信息,获得进程结果,然后调用执行继续进行。

 NFS优势:节省本地存储空间,将常用的数据,如home目录,存放在NFS服务器上且可以通过网络访问,本地终端将可减少自身存储空间的使用。

2、NFS工作原理

  1)首先服务器端启动RPC服务,并开启111端口

  2)服务器端启动NFS服务,并向RPC注册端口信息

  3)客户端启动RPC(portmap服务),向服务端的RPC(portmap)服务请求服务端的NFS端口

  4)服务端的RPC(portmap)服务反馈NFS端口信息给客户端。

  5)客户端通过获取的NFS端口来建立和服务端的NFS连接并进行数据的传输。

3、NFS服务简介

 1. 软件包介绍

  软件包:nfs-utils
  Kernel支持:nfs.ko
  端口:2049(nfsd), 其它端口由portmap(111)分配
  配置文件:/etc/exports,/etc/exports.d/*.exports
  CentOS7不支持同一目录同时用nfs和samba共享,因为使用锁机制不同
  相关软件包:rpcbind(必须),tcp_wrappers
  CentOS6开始portmap进程由rpcbind代替
  NFS服务主要进程:
    rpc.nfsd 最主要的NFS进程,管理客户端是否可登录
    rpc.mountd 挂载和卸载NFS文件系统,包括权限管理
    rpc.lockd 非必要,管理文件锁,避免同时写出错
    rpc.statd 非必要,检查文件一致性,可修复文件
  日志:/var/lib/nfs/

 2. 配置文件格式

  /dir  主机1(opt1,opt2)  主机2(opt1,opt2)...

  主机格式:

    单个主机:ipv4,ipv6,FQDN
    IP networks:两种掩码格式均支持 如172.16.0.0/255.255.0.0 和 172.18.0.0/16
    wildcards:主机名通配,例如*.abcde.com,IP不支持通配
    netgroups:NIS域的主机组,@group_name
    anonymous:表示使用*通配所有客户端

  相关权限及选项:

    默认选项:(ro,sync,root_squash,no_all_squash)
    ro,rw  只读和读写
    async  异步,数据变化后不立即写磁盘,性能高
    sync(1.0.0后为默认)  同步,数据在请求时立即写入共享
    no_all_squash   (默认)保留共享文件的UID和GID
    all_squash   所有远程用户(包括root)都变成nfsnobody
    root_squash   (默认)远程root映射为nfsnobody,UID为65534,早期版本 是4294967294 (nfsnobody)
    no_root_squash   远程root映射成root用户
    anonuid和anongid   指明匿名用户映射为特定用户UID和组GID,而非 nfsnobody,可配合all_squash使用

 3. NFS配置示例

  在/etc/exports文件中定义要导出的目录,如

    /myshare server.example.com
    /myshare *.example.com
    /myshare server?.example.com
    /myshare server[0-20].example.com
    /myshare 172.25.11.10
    /myshare 172.25.0.0/16
    /myshare 2000:472:18:b51:c32:a21
    /myshare 2000:472:18:b51::/64
    /myshare *.example.com 172.25.0.0/16
    /myshare desktop.example.com(ro)
    /myshare desktop.example.com(ro) server[0-20].example.com(rw)
    /myshare diskless.example.com(rw,no_root_squash)

 4. NFS相关工具

  rpcinfo 显示RPC相关显示

    rpcinfo -p hostname  查看RPC注册程序与端口信息

    rpcinfo –s hostname  查看RPC注册程序

  exportfs NFS导出表

    -v 查看本机所有NFS共享

    -r 重读配置文件,并共享目录

    -a 输出本机所有共享

    -au 停止本机所有共享

  showmount -e hostname 查看主机共享信息

  mount.nfs 挂载工具

二、NFS挂载

1、客户端挂载

 NFS相关挂载选项:(通过 man 5 nfs 可查看帮助)

  fg (默认)前台挂载,bg 后台挂载
  hard (默认)持续请求,soft 非持续请求
  intr 和hard配合,请求可中断
  rsize和wsize   一次读和写数据最大字节数,rsize=32768
  _netdev  无网络不挂载

 基于安全考虑,建议使用nosuid,nodev,noexec挂载选项,如

  mount -o rw,nosuid,fg,hard,intr 192.166.214.17:/data/nfsdir /mnt/nfs/

 开机挂载:写入/etc/fstab 文件,如

  192.168.214.17:/data/nfsdir /mnt/nfs nfs defaults 0 0

2、自动挂载

 利用 autofs 按需要挂载NFS共享,在空闲时自动卸载;由 /etc/auto.master 自动挂载器守护进程控制的挂载点,自动挂载监视器访问这些目录并按要求挂载文件系统,文件系统在失活的指定间隔5分钟后会自动卸载。

 autofs 挂载规则

  1. 相对路径法

   将要挂载的文件系统拆分成目录名(dirname)与基名(basename),如/data/nfsdir,dirname为/data,basename为nfsdir,然后在/etc/auto.master 文件名定义dirname关联的子配置文件,之后在子配置文件中挂载basename即可。如:

  1. [root@centos7- ~]# yum install -y autofs #安装包
  2. [root@centos7- ~]# systemctl start autofs #启动服务
  3. [root@centos7- ~]# systemctl enable autofs #设置为开机启动
  4. [root@centos7- ~]# vim /etc/auto.master
  5. #添加此行
  6. /data /etc/auto.nfs #指定子配置文件为auto.nfs
  7. [root@centos7- ~]# vim /etc/auto.nfs
  8. #在子配置文件中挂载远程主机的NFS文件系统到本地的/data/nfs
  9. nfs -fstype=nfs,rw 192.168.214.17:/data/nfsdir1
  10. #修改完后,autofs还未重启,注意此时无子目录
  11. [root@centos7- ~]# ls /data
  12. [root@centos7- data]# systemctl restart autofs #重启服务
  13. [root@centos7- data]# cd /data #进入目录
  14. [root@centos7- data]# ls #此时还没有子目录,因为没用到
  15. [root@centos7- data]# cd nfs #进入子目录
  16. [root@centos7- nfs]# ls #可以看到自动挂载了,也显示目录中的文件
  17. f1.txt

  注意:以上虽然进入了nfs子目录,但只是读不能写,如要支持写,除了NFS服务配置读写rw权限外,还需要给导出目录设置ACL权限才行,NFS写权限的默认用户为nfsnobody

  1. [root@centos7 ~]# vim /etc/exports
  2. /data/nfsdir *(rw,all_squash)
  3. [root@centos7 ~]# setfacl -m u:nfsnobody:rwx /data/nfsdir

  2. 绝对路径法

   当dirname有多个子目录时,我们挂载其中一个子目录,如果用相对路径法,会导致其它子目录无法显示,且不可用,所以此时要用绝对路径。

  1. [root@centos7- data]# pwd
  2. /data
  3. #在上一步的情况下,先关闭autofs服务 然后取消挂载
  4. [root@centos7- data]# systemctl stop autofs
  5. [root@centos7- data]# umount /data/nfs
  6. [root@centos7- data]# rmdir nfs/ #删除子目录
  7. [root@centos7- data]# ls #/data目录下空了
  8. [root@centos7- data]# mkdir dir2 #新建一个子目录
  9. #再启动服务,实现上一步的自动挂载
  10. [root@centos7- data]# systemctl start autofs
  11. [root@centos7- data]# ls #未访问时,nfs目录还没挂载
  12. dir2
  13. [root@centos7- data]# ls nfs #可以看到自动挂载了
  14. f1.txt
  15. [root@centos7- data]# cd dir2/ #自动挂载后,当我们再访问dir2时,报错了
  16. -bash: cd: dir2/: No such file or directory
  17. #此时相对路径法有点行不通了,下面使用绝对路径法
  18. #修改/etc/auto.master文件
  19. [root@centos7- data]# vim /etc/auto.master
  20. #将/data /etc/auto.nfs改为以下形式
  21. /- /etc/auto.nfs
  22. #然后修改子配置文件auto.nfs,用绝对路径挂载
  23. [root@centos7- data]# vim /etc/auto.nfs
  24. /data/nfs -fstype=nfs,rw 192.168.214.17:/data/nfsdir #将子目录改为绝对路径
  25. [root@centos7- data]# umount /data/nfs #先取消挂载
  26. [root@centos7- data]# systemctl restart autofs #重启服务
  27. [root@centos7- data]# ls -l #可以看到nfs目录挂载了
  28. total
  29. drwxr-xr-x root root Dec : dir2
  30. drwxr-xr-x root root Dec : nfs
  31. [root@centos7- data]# ls -l dir2/ #dir2目录也可访问
  32. total
  33. -rw-r--r-- root root Dec : a.txt

Linux学习-NFS服务的更多相关文章

  1. linux配置nfs服务

    简单介绍: unix/linux系统一种远程文件文件夹共享的服务,能够把某一个远程的文件文件夹共享到本地,进而像操作本地文件一样,操作这个远程的文件夹. 比如:a主机作为服务端,共享出来test1这个 ...

  2. Linux搭建NFS服务

    一.NFS服务简单介绍 NFS(Network File System)即网络文件系统,是FreeBSD支持的文件系统中的一种,它允许网络中的计算机之间通过TCP/IP网络共享资源.在NFS的应用中, ...

  3. Linux部署NFS服务共享文件

    NFS(网络文件系统)用于linux共享文件 第1步:配置所需要的环境 使用两台Linux主机 主机名称 操作系统 IP地址 NFS Centos7 192.168.218.139 NFSa Cent ...

  4. Linux之NFS服务搭建及autofs服务搭建

    NFS 网络文件系统,英文Network File System(NFS),是由SUN公司研制的UNIX表示层协议(presentation layer protocol),能使使用者访问网络上别处的 ...

  5. LINUX服务器配置NFS服务,挂载外部存储实现目录共享

    安装nfs  rpcbind 一.服务端配置 安装 NFS 服务器所需的软件包:nfs 和 rpcbind # yum install nfs-utils # yum install rpcbind( ...

  6. Linux使用NFS服务实现远程共享

    首先安装 apt install -y nfs-kernel-server nfs-common 编辑配置文件 vim /etc/exports 添加内容: /root/test *(rw,sync, ...

  7. linux学习一个服务(未完)

    学习一个服务的过程 1.了解服务的作用:名字 功能,特点 2.安装 3.配置文件位置,端口 4.服务启动关闭的脚本 5.此服务的使用方法 6.修改配置文件,实战举例 7.排错(从下到上,从内到外)

  8. linux 使用nfs 服务实现远程共享

    首先安装 apt install -y nfs-kernel-server nfs-common 编辑配置文件 vim /etc/exports 添加内容: /root/test *(rw,sync, ...

  9. linux 学习 12 服务管理

      第十二讲 Linux服务管理 12.1 Linux服务管理-服务分类 ——Linux服务 ----RPM包默认安装的服务 ————独立的服务 ————基于xinetd服务 ----源码包安装的服务 ...

随机推荐

  1. Java ——泛型 序列化

    本节重点思维导图 泛型  序列化  泛型 import java.util.ArrayList; import java.util.Date; import java.util.Iterator; i ...

  2. 应用安全 - 软件漏洞 - 可视化平台kibana漏洞汇总

    CVE-2019-7609  Date: 类型: RCE 前置条件: Timelion And Canvas 影响范围: kibana-RCE < PoC | ExP: https://gith ...

  3. Android - Unable to add window android.view.ViewRootImpl$W@6518342 -- permission denied for window type 2133

    因为跟博主碰到了一样的问题,所以记录一下分析原理 原文链接:https://www.jianshu.com/p/b0364074288a 首先,先介绍下背景环境,第一,是Android7.0,其次,要 ...

  4. Keil共存的方法 - Keil MDK兼容Keil C51,实操可行

    记录一下成功使Keil MDK和Keil C51共存的过程! 之前一直用Keil C51开发,最近需要用到ARM9内核的IC,就需要Keil C51和Keil MDK共存.看了一下网上几个教程,方法大 ...

  5. [DS+Algo] 002 一维表结构

    目录 1. 顺序表 1.1 分类 1.2 实现方式 1.3 扩容问题 1.4 操作 2. 链表 2.1 分类 2.2 链表相关操作 2.3 链表 VS 顺序表 3. 关于代码实现 1. 顺序表 1.1 ...

  6. 【Linux 环境搭建】ubuntu 的samba配置

    在/etc/samba/smb.conf的文件末尾增加下面的内容然后重启samba [home] comment = James Harden path = / browseable = yes wr ...

  7. PostgreSQL设计之初的大量论文

    引自:https://www.docs4dev.com/docs/zh/postgre-sql/11.2/reference/biblio.html#STON86 该网站是一个PostgreSQL手册 ...

  8. 剑指Offer编程题(Java实现)——删除链表中重复的结点

    题目描述 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针. 例如,链表1->2->3->3->4->4->5 处理后 ...

  9. net 架构师-数据库-sql server-002-工具

    本章讲述的工具包括: SQL Server 联机丛书 SQL Server配置管理器 SQL Server Management Studio SQL Server Business Intellig ...

  10. adb,aapt等命令使用

    adb         install/uninstall:安装/卸载手机中的应用.         devices:查看当前连接到电脑中的设备. adb shell         首先运行adb ...