NFS 协议和服务

  NFS 协议是一种用于文件共享的协议,它可以使得主机之间进行文件的共享。客户端可以像在本机上的文件一样操作远程主机的文件。NFS 协议最初仅支持 UDP 协议,目前最新版本的 NFS 可以支持 UDP 或者 TCP 协议,不过 UDP 协议的速度会更快。

1. 安装 NFS 服务器和客户端

  NFS 协议是一个十分简单的协议,它本身没有提供信息传输的协议和功能。之所以 NFS 能够让主机之间通过网络进行资料共享,这是因为 NFS 使用了一些其他传输的协议,主要用到了 RPC(Remote Procedure Call) 功能。所以在启动 NFS 服务器的时候需要启动 RPC 服务。

  在 Ubuntu 下进行 NFS 服务器的安装有两个版本可供选择,nfs-kemel-servernfe-user-server。两者之间的差别在于前者是在内核层实现的,速度更加快,后者的速度相对慢一些。小伙伴可以根据自己的需要进行选择安装。

  安装 NFS 服务还需要安装 nfs-common,当然,Ubuntu 会自动提示软件之间的依赖关系进行安装。

2. 服务器端的设定

  要使安装的服务器程序能够正常工作,主要的工作是对服务器的配置文件进行编辑。这个配置文件是 /etc/exports,这个文件中的格式如下:

共享的目录 主机名称 1 或者 IP1 (参数 1,参数 2)  主机名称 2 或者 IP2 (参数 3,参数 4)

  上面这个格式表示,将同一个目录共享给两个不同的主机,但这两台主机的访问权限和参数是不同的,所以需设置两个主机对应的权限。可以设定的参数如下表(NFS 的服务器配置参数说明)所示。

参数

含义

rw

可读写的权限

ro

只读的权限

no_root_squash

登录到 NFS 主机的用户如果是 root 用户,拥有 root 的权限,此参数很不安全,建议不要使用

root_squash

不能使用 root 权限

allsquash

不管登录 NFS 主机的用户是什么都会被重新设定为 nobody

anonuid

将登录 NFS 主机的用户都设定成指定的 user id,此 ID 必须存在于 /etc/passwd

anongid

anonuid,但是换成了组 ID

sync

资料同步写入存储器中

async

资料会先暂时存放在内存中,不会直接写入硬盘

insecure

允许从这台机器过来的非授权访问

  编辑 /etc/exports 为如下的内容。将 /tmp 目录共享为任何人可以共享并可以进行读写操作:/home/test 目录 192.168.1 子网下的主机可以进行读写,其他主机只读。

/tmp		*(rw,no_root_squash)
/home/test 	192.168.1.*(rw) 	*(ro)

  配置好后可以使用以下命令启动 NFS

/etc/init.d/nfs-kernel-server start

3. 客户端的操作

  要在客户端挂载服务器上共享的 NFS 目录,使用通用的 mount 命令进行,其命令格式为:

mount -t nfs 主机名或者主机 IP 地址:/共享目录名 挂载的本机目录

  例如对于上述服务器的设置,使用如下命令将 /home/test 目录挂载到本机的 /mnt/nfs 目录下。

mount -t nfs 192.168.1.153:/home/test /mnt/nfs

  挂载到本机目录后,由于本机和服务器在同一个网段上,可以像操作本机目录中的文件一样进行操作。

  ㊨ 注意:在服务器正常开启之后,可能客户端不能正常挂载服务器已经共享出来的目录。一般是由于 Linux 防火墙开启,可以将防火墙清空或者关闭,清空的命令为:

iptables -F

4. showmount 命令

  在 NFS 相关的命令中 showmount 命令是经常使用的命令。它主要有两个命令选项,含义如下所述。

  █ -a:这个参数是一般在 NFS SERVER 上使用,是用来显示已经挂载上本机 nfs 目录的客户端机器列表。
  █ -e:显示指定的 NFS SERVERexport 出来的目录。

  例如,下面的命令列出当前系统中的 NFS 服务中的目录共享设置情况:

$ showmount -e 192.168.1.151
Export list for localhost:
/tmp *
/home/test 192.168.1.*