介绍#

NFS 就是 Network File System 的缩写,它最大的功能就是可以通过网络,让不同的机器、不同的操作系统可以共享彼此的文件。

NFS 服务器可以让 PC 将网络中的 NFS 服务器共享的目录挂载到本地端的文件系统中,而在本地端的系统中来看,那个远程主机的目录就好像是自己的一个磁盘分区一样,在使用上相当便利;

NFS 一般用来存储共享视频,图片等静态数据;NFS 协议默认是不加密的,它不像 Samba,它不提供用户身份鉴别。服务端通过限定客户端的 IP 地址和端口来限制访问。

原理#

NFS 在文件传送或信息传送的过过程中,依赖于 RPC 协议。RPC,远程过程调用(Remote Procedure Call), 是使客户端能够执行其他系统中程序的一种机制。NFS 本身是没有提供信息传输的协议和功能的,但 NFS 却能让我们通过网络进行资料的分享,就是因为 NFS 使用了 RPC 提供的传输协议,可以说 NFS 就是使用 PRC 的一个程序

教你快速搭建NFS服务 - DevOps在路上 - 博客园 - 图1

  1. 首先服务器端启动 RPC 服务,并开启 111 端口
  2. 服务器端启动 NFS 服务,并向 RPC 注册端口信息
  3. 客户端启动 RPC(portmap 服务),向服务端的 RPC(portmap) 服务请求服务端的 NFS 端口
  4. 服务端的 RPC(portmap) 服务反馈 NFS 端口信息给客户端。
  5. 客户端通过获取的 NFS 端口来建立和服务端的 NFS 连接并进行数据的传输

注意: 在启动 NFS SERVER 之前,首先要启动 RPC 服务(即 portmap 服务,下同)否则 NFS SERVER 就无法向 RPC 服务区注册,另外,如果 RPC 服务重新启动,原来已经注册好的 NFS 端口数据就会全部丢失。因此此时 RPC 服务管理的 NFS 程序也要重新启动以重新向 RPC 注册。

特别注意:一般修改 NFS 配置文档后,是不需要重启 NFS 的,直接在命令执行 systemctl reload nfs 或 exportfs –rv 即可使修改的 / etc/exports 生效

适用场景#

  • NFS 最好是部署在局域网 ,不要在公网上 ;
  • 适合在中小型企业使用;大型网站不会用 NFS 的, 用的都是 分布式存储

安装#

NFS 服务端#

安装 nfs-kernel-server:
$ sudo apt install nfs-kernel-server

NFS 客户端#

安装 nfs-common:
$ sudo apt install nfs-common

配置#

服务端配置#

  1. 创建共享目录
    sudo mkdir -p /var/nfs/sharedir

  2. 配置 /etc/exports (NFS 挂载目录及权限由 / etc/exports 文件定义) ```null 格式: 共享目录的路径 允许访问的NFS客户端(共享权限参数)

参数:

  • ro 只读
  • rw 读写
  • root_squash 当NFS客户端以root管理员访问时,映射为NFS服务器的匿名用户
  • no_root_squash 当NFS客户端以root管理员访问时,映射为NFS服务器的root管理员
  • all_squash 无论NFS客户端使用什么账户访问,均映射为NFS服务器的匿名用户
  • sync 同时将数据写入到内存与硬盘中,保证不丢失数据
  • async 优先将数据保存到内存,然后再写入硬盘;这样效率更高,但可能会丢失数据

请注意,NFS客户端地址与权限之间没有空格

  1. -
  2. 比如要将`/var/nfs/sharedir`目录共享, 则在该文件末尾添加下列语句:<br />
  3. /home/lin/NFSshare 192.168.66.*(rw,sync,no_root_squash)
  4. <br />`/var/nfs/sharedir *(rw,sync,no_root_squash,no_subtree_check)`
  5. -
  6. 要限制客户端 IP, 添加下列语句:
  7. <br />`/var/nfs/sharedir 122.111.222.111(rw,sync,no_subtree_check)`
  8. -
  9. 共享目录为 / public , 允许访问的客户端为 192.168.245.0/24 网络用户,权限为只读
  10. <br />`/public 192.168.245.0/24(ro)`
  11. 3.
  12. 重新加载 nfs-kernel-server 配置:
  13. <br />`$ sudo systemctl reload nfs-kernel-server`
  14. <a name="dc299cc9"></a>
  15. ### 客户端配置[#](#%E5%AE%A2%E6%88%B7%E7%AB%AF%E9%85%8D%E7%BD%AE)
  16. 1.
  17. 使用`showmount` 命令查看 nfs 服务器共享信息。
  18. <br />输出格式为 “共享的目录名称 允许使用客户端地址”。<br />
  19. showmount 命令参数:
  20. - -a :显示目前主机与客户端的 NFS 联机分享的状态;
  21. - -e :显示 / etc/exports 所分享的目录数据。
  22. ```null
  23. user@k8s-node-01:~$ showmount -e 192.168.249.5
  24. Export list for 192.168.249.5:
  25. /var/nfs/sharedir *
  1. 在客户端创建目录,并挂载共享目录
    $ sudo mkdir -p /mnt/nfs_sharedir

  2. 挂载远程共享目录:
    $ sudo mount your_nfs_server_ip:/var/nfs/sharedir /mnt/nfs_sharedir
    e.g. sudo mount 192.168.249.5:/var/nfs/sharedir /mnt/nfs_sharedir

    • 编辑 fstab 文件, 使系统每次启动时都能自动挂载
      $ sudo vim /etc/fstab

your_nfs_server_Ip:/var/nfs/sharedir /mnt/nfs_sharedir nfs defaults 0 0

  1. 检查客户端挂载状态
    教你快速搭建NFS服务 - DevOps在路上 - 博客园 - 图2

  2. 卸载远程挂载
    $ sudo umount /mnt/nfs_sharedir
    https://www.cnblogs.com/FLY_DREAM/p/14094855.html