Linux基础服务 ·

NFS客户端的设定

[隐藏]

NFS 服务器最主要的工作就是分享文件系统给网络上其他的客户端,所以客户端当然得要挂载它! 此外,服务器端可以加设防火墙来保护自己的文件系统,那么客户端挂载该文件系统后,也需要保护自己的数据!所以底下我们要来谈一谈 NFS 客户端配置。

手动挂载 NFS 服务器分享的资源

挂载 NFS 服务器所提供的文件系统需要的操作:

  1. 确认本地端已经启动了 rpcbind 服务!
  2. 扫瞄 NFS 服务器分享的目录有哪些,并了解我们是否可以使用 (showmount);
  3. 在本地端建立预计要挂载的挂载点目录 (mkdir);
  4. 利用 mount 将远程主机直接挂载到相关目录。

好,现在假设客户端在 192.168.100.10 这部机器上,而服务器是 192.168.100.254 , 那么赶紧来检查一下我们是否已经有 rpcbind 的启动,另外远程主机有什么可用的目录呢!

接下来我想要将远程主机的 /home/public 挂载到本地端主机的 /home/nfs/public , 所以我就得要在本地端主机先建立起这个挂载点目录才行!然后就可以用 mount 这个指令直接挂载 NFS 的文件系统!

先注意一下挂载 NFS 文件的格式范例!这样就可以将数据挂载进来!请注意! 以后,只要你进入你的目录 /home/nfs/public 就等于到了 192.168.100.254 那部远程主机的 /home/public 那个目录中!使用 umount 卸载就可以 NFS !

客户端可处理的挂载参数与开机挂载

客户端的挂载工作比较简单吧!不过,如果你刚刚挂载到本机 /home/nfs/public 的文件系统当中,含有一支 script ,且这支 script 的内容为『 rm -rf / 』且该文件权限为 555 , 而你因为好奇给他执行下去,可有的你受的了,因为整个系统都会被杀光光!

所以说,除了 NFS 服务器需要保护之外,我们取用人家的 NFS 文件系统也需要自我保护才行! 那要如何自我保护?可以通过 mount 的指令参数!包括底下这些主要的参数可以尝试加入:

参数参数代表意义系统默认值
suid
nosuid
如果挂载的 partition 上面有任何 SUID 的 binary 程序时, 你只要使用 nosuid 就能够取消 SUID 的功能了!suid
rw
ro
你可以指定该文件系统是只读 (ro) 或可擦写!服务器可以提供给你可擦写, 但是客户端可以仅允许只读的参数设定值!rw
dev
nodev
是否可以保留设备文件的特殊功能?一般来说只有 /dev 这个目录才会有特殊的设备,因此你可以选择 nodev !dev
exec
noexec
是否具有执行 binary file 的权限? 如果你想要挂载的仅是数据区 (例如 /home),那么可以选择 noexec !exec
user
nouser
是否允许使用者进行文件的挂载与卸除功能? 如果要保护文件系统,最好不要提供使用者进行挂载与卸除吧!nouser
auto
noauto
这个 auto 指的是『mount -a』时,会不会被挂载的项目。 如果你不需要这个 partition 随时被挂载,可以设定为 noauto。auto

一般来说,如果你的 NFS 服务器所提供的只是类似 /home 底下的个人资料, 应该不需要可执行、SUID 与装置文件,因此当你在挂载的时候,可以这样下达指令:

这样一来你所挂载的这个文件系统就只能作为资料存取之用,相对来说,对于客户端是比较安全一些的。 所以说,这个 nosuid, noexec, nodev 等等的参数可得记得!

关于 NFS 特殊的挂载参数

除了上述的 mount 参数之外,其实针对 NFS 服务器,咱们的 Linux 还提供不少有用的额外参数!这些特殊参数还非常有用呢!举例来说,由于文件系统对 Linux 是非常重要的东西,因为我们进行任何动作时,只要有用到文件系统, 那么整个目录树系统就会主动的去查询全部的挂载点。如果你的 NFS 服务器与客户端之间的联机因为网络问题, 或者是服务器端先关机了,却没有通知客户端,那么客户端只要动到文件系统的指令 (例如 df, ls, cp 等等) ,整个系统就会慢到爆!因为你必须要等到文件系统搜寻等待逾时后,系统才会饶了你。

为了避免这些困扰,我们还有一些额外的 NFS 挂载参数可用!例如:

参数参数功能预设参数
fg
bg
当执行挂载时,该挂载的行为会在前景 (fg) 还是在背景 (bg) 执行? 若在前景执行时,则 mount 会持续尝试挂载,直到成功或 time out 为止,若为背景执行, 则 mount 会在背景持续多次进行 mount ,而不会影响到前景的程序操作。 如果你的网络联机有点不稳定,或是服务器常常需要开关机,那建议使用 bg 比较妥当。fg
soft
hard
如果是 hard 的情况,则当两者之间有任何一部主机脱机,则 RPC 会持续的呼叫,直到对方恢复联机为止。如果是 soft 的话,那 RPC 会在 time out 后『重复』呼叫,而非『持续』呼叫, 因此系统的延迟会比较不这么明显。同上,如果你的服务器可能开开关关,建议用 soft !hard
intr当你使用上头提到的 hard 方式挂载时,若加上 intr 这个参数, 则当 RPC 持续呼叫中,该次的呼叫是可以被中断的 (interrupted)。没有
rsize
wsize
读出(rsize)与写入(wsize)的区块大小 (block size)。 这个设定值可以影响客户端与服务器端传输数据的缓冲记忆容量。一般来说, 如果在局域网络内 (LAN) ,并且客户端与服务器端都具有足够的内存,那这个值可以设定大一点, 比如说 32768 (bytes) 等,提升缓冲记忆区块将可提升 NFS 文件系统的传输能力! 但要注意设定的值也不要太大,最好是达到网络能够传输的最大值为限。rsize=1024
wsize=1024

更多的参数可以参考 man nfs 的输出数据! 通常如果你的 NFS 是用在高速运作的环境当中的话,那么可以建议加上这些参数:

则当你的 192.168.100.254 这部服务器因为某些因素而脱机时,你的 NFS 可以继续在背景当中重复的呼叫! 直到 NFS 服务器再度上线为止。这对于系统的持续操作还是有帮助的! 当然,那个 rsize 与 wsize 的大小则需要依据你的实际网络环境而定!

无法挂载的原因分析

如果客户端就是无法挂载服务器端所分享的目录时,可以这样分析看看:


客户端的主机名或 IP 网段不被允许使用:

以上面的例子来说明,我的 /home/test 只能提供 192.168.100.0/24 这个网域,所以如果我在 192.168.100.254 这部服务器中,以 localhost (127.0.0.1) 来挂载时,就会无法挂载上,这个权限概念没问题吧!不然你可以在服务器上试试看:

看到 access denied 了吧?没错,权限不符!如果确定你的 IP 没有错误,那么请通知服务器端,请管理员将你的 IP 加入 /etc/exports 这个文件中。

服务器或客户端某些服务未启动:

这个最容易被忘记了!就是忘记了启动 rpcbind 这个服务!如果你在客户端发现 mount 的讯息是这样:

要嘛就是 rpcbind 忘记开 (第一个错误),要嘛就是服务器端的 nfs 忘记开。最麻烦的是, 重新启动了 rpcbind 但是却忘记重新启动其他服务 (上述第二个错误)!解决的方法就是去重新启动 rpcbind 管理的其他所有服务就是了!

被防火墙档掉了:

当你一直无法顺利的连接 NFS 服务器,请先到服务器端,将客户端的 IP 完全放行,若确定这样就连的上, 那代表就是防火墙有问题!需要将 NFS 服务器端口固定的方式吧!

自动挂载 autofs 的使用

在一般 NFS 文件系统的使用情况中,如果客户端要使用服务器端所提供的 NFS 文件系统时,要嘛就是得在 /etc/rc.d/rc.local 当中设定开机时挂载,要嘛就得要登入系统后手动利用 mount 来挂载。 此外,客户端得要预先手动的建立好挂载点目录,然后挂载上来。但是这样的使用情况恐怕有点小问题。

NFS 文件系统与网络联机的困扰:

我们知道 NFS 服务器与客户端的联机或许不会永远存在,而 RPC 这个服务又挺讨厌的,如果挂载了 NFS 服务器后,任何一方脱机都可能造成另外一方老是在等待逾时。而且,挂载的 NFS 文件系统可能又不是常常被使用,但若不挂载的话,有时候紧急要使用时又得通知系统管理员, 这又很不方便。

所以,让我们换个思考的角度来讨论一下使用 NFS 的情境:

可不可以让客户端在有使用到 NFS 文件系统的需求时才让系统自动挂载?

当 NFS 文件系统使用完毕后,可不可以让 NFS 自动卸除,以避免可能的 RPC 错误?

在现在的 Linux 环境下用的 autofs 这个服务,能达到上述的功能!

autofs 的设定概念:

autofs 这个服务在客户端计算机上面,会持续的侦测某个指定的目录, 并预先设定当使用到该目录下的某个次目录时,将会取得来自服务器端的 NFS 文件系统资源,并进行自动挂载的动作。 讲这样或许你有点模糊,让我们拿底下这个图示来看看:

如上图所示,我们的 autofs 主要配置文件为 /etc/auto.master,这个文件的内容很简单, 如上所示,我只要定义出最上层目录 (/home/nfsfile) 即可,这个目录就是 autofs 会一直持续侦测的目录。 至于后续的文件则是该目录底下各次目录的对应。在 /etc/auto.nfs (这个文件的文件名可自定义) 里面则可以定义出每个次目录所欲挂载的远程服务器的 NFS 目录资源!

举例来说:『当我们在客户端要使用 /home/nfsfile/public 的数据时,此时 autofs 才会去 192.168.100.254 服务器上挂载 /home/public !』且『当隔了 5 分钟没有使用该目录下的数据后,则客户端系统将会主动的卸除 /home/nfsfile/public 』。

很不错用的一个工具吧!因为有用到服务器的数据时才自动挂载,没有使用了就会自动卸除! 而不是传统的情况一直是挂载的!既然这么好用,那就让我们实际来操演一下:


建立主配置文件 /etc/auto.master ,并指定侦测的特定目录

这个主要配置文件的内容很简单,只要有要被持续侦测的目录及『数据对应文件』即可。 那个数据对应文件的文件名是可以自行设定的,在这个例子当中我使用 /etc/auto.nfs 来命名。

上述数据中比较需要注意的是,那个 /home/nfsfile 目录不需要存在,因为 autofs 会主动的建立该目录! 如果你建立了,可能反而会出问题。因此,先确定一下没有该目录吧!

建立数据对应文件内 (/etc/auto.nfs) 的挂载信息与服务器对应资源

刚刚我们所指定的 /etc/auto.nfs 是自行设定的,所以这个文件是不存在的。那么这个文件的格式是如何呢?你可以这样看:

这样就可以建立对应了!要注意的是,那些 /home/nfsfile/public 是不需要事先建立的! 咱们的 autofs 会事情况来处理!好了,接下来让我们看看如何实际运作吧!

实际运作与观察

配置文件设定妥当后,当然就是要启动 autofs !

假设你目前并没有挂载任何来自 192.168.100.254 这部 NFS 服务器的资源目录。好了, 那让我们实际来观察看看几个重要的数据吧!先看看 /home/nfsfile 会不会主动的被建立? 然后,如果我要进入 /home/nfsfile/public 时,文件系统会如何变化?

如此一来,如果真的有需要用到该目录时,系统才会去相对的服务器上面挂载! 若是一阵子没有使用,那么该目录就会被卸除呢!这样就减少了很多不必要的使用时机!

参与评论