NFS配置及使用

什么是NFS

NFS(Network File System)即网络文件系统,是FreeBSD支持的文件系统中的一种,它允许网络中的计算机之间通过TCP/IP网络共享存储。在NFS的应用中,本地NFS的客户端应用可以透明地读写位于远端NFS服务器上的文件,就像访问本地文件一样。

NFS 的实现使用了RPC(Remote Procedure Call)的机制,远程过程调用使得客户端可以调用服务端的函数。由于有 VFS 的存在,客户端可以像使用其他普通文件系统一样使用 NFS 文件系统,由操作系统内核将 NFS 文件系统的调用请求通过 TCP/IP 发送至服务端的 NFS 服务,执行相关的操作,之后服务端再讲操作结果返回客户端。

NFS

FTP、NFS、Samba区别

FTP

FTP 是一个文件传输的协议,客户端需要使用专门的 ftp 客户端与服务器端进行通信,以完成文件的上传和下载,FTP 协议工作在应用层。它使用两个连接与客户端通信:

  • 命令连接:用于传输文件管理类命令,此连接在客户端连接后会始终在线
  • 数据连接:用于传输文件数据,此连接会按序创建

FTP 服务器会监听 TCP 21 号端口用于命令连接,而数据连接有两种模式:

  • 主动模式,服务器使用 TCP 20 号端口主动创建连接到客户端的某随机端口
  • 被动模式,客户端使用随机端口连接服务器端的随机端口

NFS

Samba

NFS 只能在 Unix 系统间进行共享,而 Windows 对其支持很有限。因此有人就在 Linux/Unix 系统中实现了 Windows 文件共享所使用的 CIFS 协议,也叫做 SMB(Simple Message Block)协议。这使得 Windows/Linux/Unix 间可以自由的进行文件共享。

系统环境

服务器系统平台:Ubuntu 16.04

  • Server IP:192.168.64.130
  • Client IP :192.168.64.129 (Ubuntu)
  • Client IP :192.168.6.23 (Windows)

NFS服务器配置

Ubuntu安装NFS服务

[iceman@ubuntu]$: sudo apt-get install rpcbind nfs-kernel-server

NFS服务配置

配置NFS比较简单,主要是在/etc/exports文件中添加需要共享的文件目录和相应权限,

1.建立共享文件

[iceman@ubuntu]$: sudo mkdir /home/share
[iceman@ubuntu]$: sudo vim /etc/exports #编辑添加权限配置
/home/share  192.168.64.129(rw,sync,no_root_squash,no_all_squash,no_subtree_check)

2.exports配置选项简介

/etc/exports配置文件配置比较简单,只需要上面一行即可。该行分为3部分:

  1. 服务器上需要共享出去的文件目录
  2. 允许访问的客户端地址,可以是客户端IP地址也可以是一个网段(192.168.64.0/24)
  3. 括号中逗号分隔项,主要是一些权限选项

3.输出目录选项简介:

访问权限选项:

  • rw:读写
  • ro:只读

用户映射选项:

  • no_root_squash:加上这个选项后,root用户就会对共享的目录拥有至高的权限控制,就像是对本机的目录操作一样。不安全,不建议使用
  • root_squash:和上面的选项对应,root用户对共享目录的权限不高,只有普通用户的权限,即限制了root;
  • all_squash:不管使用NFS的用户是谁,他的身份都会被限定成为一个指定的普通用户身份
  • anonuid/anongid:要和root_squash 以及 all_squash一同使用,用于指定使用NFS的用户限定后的uid和gid,前提是本机的/etc/passwd中存在这个uid和gid

其他选项:

  • sync:同步模式,内存中数据时时写入磁盘
  • async:不同步,把内存中数据定期写入磁盘中
  • secure:限制客户端只能从小于1024的tcp/ip端口连接nfs服务器(默认设置)
  • insecure:允许客户端从大于1024的tcp/ip端口连接服务器
  • wdelay:检查是否有相关的写操作,如果有则将这些写操作一起执行,这样可以提高效率(默认设置)
  • no_wdelay:若有写操作则立即执行,应与sync配合使用
  • subtree:若输出目录是一个子目录,则nfs服务器将检查其父目录的权限(默认设置)
  • no_subtree:即使输出目录是一个子目录,nfs服务器也不检查其父目录的权限,这样可以提高效率

4.NFS服务器重启

[iceman@ubuntu]$: sudo /etc/init.d/rpcbind restart  #重启rpcbind 服务(nfs是通过RPC端口映射)
[iceman@ubuntu]$: sudo /etc/init.d/nfs-kernel-server restart #重启nfs服务。 

NFS客户端挂载

客户端配置本文主要从Ubuntu和Windows下进行文件系统挂载

Ubuntu挂载

[iceman@ubuntu]$: sudo apt-get install nfs-kernel-server
[iceman@ubuntu]$: sudo mount -t nfs 192.168.64.130:/home/share  /home/foo

自动挂载NFS

[iceman@ubuntu]$: sudo vim /etc/rc.local #添加如下信息
mount -t nfs 192.168.64.130:/home/share  /home/foo
exit 0

Windows挂载

在windows中默认NFS客户端服务是关闭的,需要开启服务

开启步骤:

  • 打开控制面板->程序->打开或关闭windows功能->NFS客户端
  • 勾选NFS客户端,即开启windows NFS客户端服务

开始挂载:

  • win+R->cmd
  • mount 192.168.64.130:/home/share X:

成功挂载,打开我的点脑,你即可在你网络位置看到 X:盘
Windows挂载NFS文件系统

Windows挂载NFS文件系统查看

取消挂载

Ubuntu取消挂载

[iceman@ubuntu]$: sudo umount /home/foo

Windows取消挂载

  • 直接在 "我的电脑" 里面鼠标点击取消映射网络驱动器 X:
  • 或者: win+R->cmd; 输入: umount X: #(umount -a 取消所有网络驱动器)

Windows取消挂载NFS文件系统

Showmount命令

  • showmount –a IP 显示指定NFS服务器的客户端以及服务器端在客户端的挂载点
  • showmount –d IP 显示指定NFS服务器在客户端的挂载点
  • showmount –e IP 显示指定NFS服务器上的共享目录列表

偶遇问题

"mount.nfs: access denied by server while mounting"

当出现该问题时,记得在exports 添加insecure,如下:

[iceman@ubuntu]$: sudo vim /etc/exports #编辑添加权限配置
/home/share  192.168.64.129(insecure,rw,sync,no_root_squash,no_all_squash,no_subtree_check)

Windows7配置NFS服务器

在windows上配置NFS服务器,目前可以通过开源软件来进行搭建,目前只介绍下开源库,后期再详细分析

开源Windows NFS服务端库

NFS(C#)

WinNFSd(C++)

原文地址:https://www.cnblogs.com/wqliceman/p/7228538.html