本文介绍如何在Ubuntu下开启NFS文件系统,从而挂载网络上其他机器的文件系统。

  NFS, Network File System, 即网络文件系统,通常NFS有提供者和使用者,提供者export自己的目录,使用者将提供者共享(export)的目录挂载到自己的机器上,我们将提供者视为服务端,使用者视为客户端,但是在NFS中,这个C-S关系实质上是不固定的。

  一、服务器端

  1.安装nfs-kernel-server,将会自动安装nfs-common和rpcbind等依赖



$ sudo apt-get install nfs-kernel-server



  2.配置/etc/exports文件,该文件在nes-kernel-server安装前不存在,文件中的内容设置了允许发现服务端共享目录的客户端主机以及拥有的访问权限,其字段的格式如下:

:  share_dir    client_host(permission1,permission2,...,permissionN)

  参数:

  (1)share_dir

  共享目录,必须是目录的绝对路径,若为文件,则在挂载时会出错。若目录名含有空格等字符,须用双引号标注。

  (2)client_host

  可以是单个主机(指定网络IP),也可以是网络段,支持通配符*和?

  (3)permission

  ro: 只读(read-only)

  rw:读和写(read-write)

  root_squash:压缩root用户。当客户端以root挂载时,则NFS服务器将root视为匿名用户服务(nfsnobody)。

  no_root_squash:不压缩root用户。当客户端以root挂载时,则NFS服务器将其为共享目录的root用户,不安全。

  sync:同步写磁盘

  async:异步写磁盘。

示例:



$ vim /etc/exports
--------Add Content Below--------
/.../EXPORT_DIR    HOST1(rw,sync,no_subtree_check) HOST2(ro,sync,no_subtree_check)



/.../EXPORT_DIR ×(ro,sync,no_subtree_check)



  上面的例子中,EXPORT_DIR是要共享到网络上的目录。

  后面的HOST1和HOST2是允许访问的客户端主机,客户端主机之间使用空格隔开。如果允许网络上的所有客户端主机发现服务器“出口”的目录,就使用星号取代主机名。

  每一个客户端主机后的括号内是访问控制策略,包括读写权限(ro,只读;rw,读写等等),访问权限之间使用逗号分隔。

  3.重启nfs服务



$ sudo /etc/init.d/nfs-kernel-server restart



  也可以检查nfs服务器是否正常监听,通过下面的命令找到对应的监听端口



$ netstat -tl | grep nfs



 

二、客户端挂载服务端NFS

  1.查看目标服务器共享的目录



$ sudo apt-get install nfs-kernel-server  #客户端同样也要安装nfs软件包
$ showmount -e SERVER_HOST



  -e 选项列出服务端的export list, 其中SERVER_HOST是目标服务器的主机地址,该命令将会显示这个服务器共享的目录列表。如果不指定SERVER_HOST,将会列出本机共享的目录(export list)。

  2.查看自己已经挂载了哪些目录



$ showmount -a



  将会看到目前已挂载的服务器以及相应的共享目录。

  3.创建挂载点

  如果发现有服务器共享的目录需要挂载但还没有挂载,可以为其创建一个挂载点:



$ mkdir /mnt/MOUNT_DIR



  其中的MOUNT_DIR是任意指定的名称。

  4.挂载共享目录

  在服务器已经共享的前提下,使用客户端可以挂载共享目录



$ mount SERVER_HOST:EXPORT_DIR /mnt/CLIENT_DIR



  其中,SERVER_HOST是服务器地址,目录与服务器主机使用冒号分隔,EXPORT_DIR必须与exports文件中的完全相同,这个可以通过前面的showmount命令查看。最后的参数就是我们将服务器的目录挂载到本地的挂载点,即第三布中创建的目录。

  5.卸载已挂载的目录

  如果使用完了服务器的共享目录,应该将其卸载,使用umount命令与卸载普通文件系统操作相同。



$ umount /mnt/MOUNT_DIR