NFS文件系统相关参数介绍

2021-12-23 16:41:48 浏览数 (1)

NFS就是Network File System的缩写,它的最大功能就是可以通过网络让不同的机器,不同的操作系统彼此共享文件(share files)——可以通过NFS挂载远程主机的目录,访问该目录就像访问本地目录一样,所以也可以简单的将它看作一个文件服务器(File Server)。

注意:一般而言,使用NFS服务能够方便地使各unix-like系统之间实现共享,但如果需要在unix-like和windows系统之间共享,那就得使用samba了。

NFS是通过网络进行数据传输,那么NFS使用哪些端口呢,答案是……不知道,因为NFS传输数据时使用的端口是随机的,唯一的限制就是小于1024,客户端怎么知道服务器使用的是哪个端口,此时就要用到远程过程调用RPC。

其实,NFS运行在SUN的RPC(Remote Procedure Call,远程过程调用)基础上,RPC定义了一种与系统无关的方法来实现进程间通信,由此,NFS Server也可以看作是RPC Server。正因为NFS是一个RPC服务程序,所以在使用它之前,先要映射好端口——通过portmap设定。比如:某个NFS Client发起NFS服务请求时,它需要先得到一个端口(port),所以它先通过portmap得到port number(不仅是NFS,所有的RPC服务程序启动之前,都需要先设定好portmap)。

注意:在启动RPC服务(比如NFS)之前,需要先启动portmap服务。

NFS允许系统将其目录和文件共享给网络上的其他系统。通过NFS,用户和应用程序可以访问远程系统上的文件,就像它们是本地文件一样。那么NFS最值得注意的优点有: (1)本地工作站可以使用更少的磁盘空间,因为常用数据可以被保存在一台机器上,并让网络上的其他机器可以访问它。 (2)不需要为用户在每台网络机器上放一个用户目录,因为用户目录可以在NFS服务器上设置并使其在整个网络上可用。 (3)存储设备如软盘、光驱及USB设备可以被网络上其它机器使用,这可能可以减少网络上移动设备的数量。

与NFS相关的几个文件和命令

1、/etc/exports 对NFS服务的访问是由exports来批准,它枚举了若干有权访问NFS服务器上文件系统的主机名。

2、/sbin/exportfs 维护NFS的资源共享,可以通过它重新设定/etc/exports的共享目录,卸载NFS Server共享的目录或者重新共享等。

3、/usr/sbin/showmount 上面的文件主要用在NFS Server端,而showmount则主要用在Client端,showmount可以用來查看NFS共享的目录资源。

4、/var/lib/nfs/xtab NFS的记录文档:通过它可以查看有哪些Client连接到NFS主机的记录。

下面这几个并不直接负责NFS,实际上它们是负责所有的RPC。

5、/etc/default/portmap 实际上,portmap负责映射所有的RPC服务端口,它的内容非常非常之简单。

6、/etc/hosts.deny 设定拒绝portmap服务的主机,即禁止访问的客户端IP列表。

7、/etc/hosts.allow 设定允许portmap服务的主机,即允许访问的客户端IP列表。

NFS配置详解

配置/etc/exports

(1)共享的NFS目录在/etc/exports中列出,这个文件控制对目录的共享(NFS挂载目录及权限由该文件定义),书写规则是每个共享为一行)。

格式:[共享目录] 主机名或IP 第一个参数是要让客户机访问的目录,第二个是你允许的主机IP,最后的()内是访问控制方式。

注意:客户端可以使用主机名或者IP地址指定,在主机名中可以使用通配符(*),IP地址后也可以跟掩码段(/24),但出于安全原因这种情况应该尽量避免。客户端的说明后可在圆括号中加入一系列参数。很重要的一点,不要在最后一个客户端声明的后面留下任何空白或者没关闭括号,因为空白都被解释成客户端的分隔符。

例如我要将/opt/root_nfs目录让用户的IP共享,则在该文件末尾添加下列语句:

代码语言:javascript复制
/opt/root_nfs  *(rw,sync,no_root_squash)

其中: /opt/root_nfs 表示NFS共享目录,它可以作为开发板的根文件系统通过NFS挂接; * 表示所有的客户机都可以挂接此目录; rw 表示挂接此目录的客户机对该目录有读写的权力; sync 表示所有数据在请求时写入共享,即数据同步写入内存和硬盘; no_root_squash 表示允许挂接此目录的客户机享有该主机的root身份。

注意:可以用主机名来代替*,尽量指定主机名以便使那些不想其访问的系统不能访问NFS挂载的资源。另外,最好加上sync, 否则$ sudo exportfs -r时会给出警告,sync是NFS的默认选项。

下面是一些NFS共享的常用参数:

ro 只读访问 rw 读写访问 sync 所有数据在请求时写入共享 async NFS在写入数据前可以相应请求 secure NFS通过1024以下的安全TCP/IP端口发送 insecure NFS通过1024以上的端口发送 wdelay 如果多个用户要写入NFS目录,则归组写入(默认) no_wdelay 如果多个用户要写入NFS目录,则立即写入,当使用async时,无需此设置 hide 在NFS共享目录中不共享其子目录 no_hide 共享NFS目录的子目录 subtree_check 如果共享/usr/bin之类的子目录时,强制NFS检查父目录的权限(默认) no_subtree_check 和上面相对,不检查父目录权限 all_squash 共享文件的UID和GID映射匿名用户anonymous,适合公用目录 no_all_squash 保留共享文件的UID和GID(默认) root_squash root用户的所有请求映射成如anonymous用户一样的权限(默认) no_root_squash root用户具有根目录的完全管理访问权限 anonuid=xxx 指定NFS服务器/etc/passwd文件中匿名用户的UID anongid=xxx 指定NFS服务器/etc/passwd文件中匿名用户的GID

查看NFS Server的export list:

代码语言:javascript复制
sudo showmount -e

若更改了/etc/exports,运行以下命令进行更新:

代码语言:javascript复制
sudo exportfs -r

然后重启NFS服务:

代码语言:javascript复制
sudo /etc/init.d/nfs-kernel-server restart

配置portmap 方法1:编辑/etc/default/portmap,将"-i 127.0.0.1"去掉; 方法2:

代码语言:javascript复制
sudo dpkg-reconfigure portmap

出现“正在设定portmap”软件包设置界面,对Should portmap be bound to the loopback address?选择“否(No)”。

配置/etc/hosts.deny 禁止任何host(主机)能和你的NFS服务器进行NFS连接。在该文件中加入:

代码语言:javascript复制
### NFS DAEMONS
portmap:ALL
lockd:ALL
mountd:ALL
rquotad:ALL
statd:ALL

配置/etc/hosts.allow 允许那些你想要的主机和你的NFS服务器建立连接。

下列步骤将允许任何IP地址以192.168.1开头的主机连接到NFS服务器上,具体要看你目标板的端口地址,也可以指定特定的IP地址。在该文件中加入:

代码语言:javascript复制
### NFS DAEMONS
portmap: 192.168.1.
lockd: 192.168.1.
rquotad: 192.168.1.
mountd: 192.168.1.
statd: 192.168.1.

通过/etc/hosts.deny和/etc/hosts.allow设置对portmap的访问,采用这两个配置文件有点类似"mask"的意思。先在/etc/hosts.deny中禁止所有用户对portmap的访问,再在/etc/hosts.allow中允许某些用户对portmap的访问。

然后重启portmap daemon:

代码语言:javascript复制
$ sudo /etc/init.d/portmap restart

NFS客户端配置

在NFS服务器启动后,还需要检查Linux服务器的防火墙设置(一般需要关闭防火墙服务),确保没有屏蔽 NFS使用的端口和允许通信的主机,主要是检查Linux服务器iptables、ipchains等选项的设置,以及/etc/hosts.deny, /etc/hosts.allow文件。通常都是在内部局域网中进行开发,再安装系统时最好不要安装防火墙等网络安全软件,以方便使用时的配置。

如果你有防火墙,请确保32771、111和2049端口保持开放。

手动挂载 使用mount命令来挂载其他机器共享的NFS目录。

格式:$ sudo mount [Server IP]

0 人点赞