NFS客户端的设定
文章目录
NFS 服务器最主要的工作就是分享文件系统给网络上其他的客户端,所以客户端当然得要挂载它! 此外,服务器端可以加设防火墙来保护自己的文件系统,那么客户端挂载该文件系统后,也需要保护自己的数据!所以底下我们要来谈一谈 NFS 客户端配置。
手动挂载 NFS 服务器分享的资源
挂载 NFS 服务器所提供的文件系统需要的操作:
- 确认本地端已经启动了 rpcbind 服务!
- 扫瞄 NFS 服务器分享的目录有哪些,并了解我们是否可以使用 (showmount);
- 在本地端建立预计要挂载的挂载点目录 (mkdir);
- 利用 mount 将远程主机直接挂载到相关目录。
好,现在假设客户端在 192.168.100.10 这部机器上,而服务器是 192.168.100.254 , 那么赶紧来检查一下我们是否已经有 rpcbind 的启动,另外远程主机有什么可用的目录呢!
1 2 3 4 5 6 7 8 9 10 11 12 13 |
# 1. 启动必备的服务:若没有启动才启动,有启动则保持原样不动。 [root@clientlinux ~]# /etc/init.d/rpcbind start [root@clientlinux ~]# /etc/init.d/nfslock start # 一般来说,系统默认会启动 rpcbind 。 # 另外,如果服务器端有启动 nfslock 的话,客户端也要启动才能生效! # 2. 查询服务器提供哪些资源给我们使用呢? [root@clientlinux ~]# showmount -e 192.168.100.254 Export list for 192.168.100.254: /tmp * /home/linux *.centos.vbird /home/test 192.168.100.10 /home/public (everyone) <==这是等一下我们要挂载的目录 |
接下来我想要将远程主机的 /home/public 挂载到本地端主机的 /home/nfs/public , 所以我就得要在本地端主机先建立起这个挂载点目录才行!然后就可以用 mount 这个指令直接挂载 NFS 的文件系统!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
# 3. 建立挂载点,并且实际挂载看看! [root@clientlinux ~]# mkdir -p /home/nfs/public [root@clientlinux ~]# mount -t nfs 192.168.100.254:/home/public \ > /home/nfs/public # 注意一下挂载的语法!『 -t nfs 』指定文件系统类型, # IP:/dir 则是指定某一部主机的某个提供的目录!另外,如果出现如下错误: mount: 192.168.100.254:/home/public failed, reason given by server: No such file or directory # 这代表你在 Server 上面并没有建立 /home/public ,自己在服务器端建立他吧! # 4. 总是得要看看挂载之后的情况如何,可以使用 df 或 mount ! [root@clientlinux ~]# df 文件系统 1K-区段 已用 可用 已用% 挂载点 ....(中间省略).... 192.168.100.254:/home/public 7104640 143104 6607104 3% /home/nfs/public |
先注意一下挂载 NFS 文件的格式范例!这样就可以将数据挂载进来!请注意! 以后,只要你进入你的目录 /home/nfs/public 就等于到了 192.168.100.254 那部远程主机的 /home/public 那个目录中!使用 umount 卸载就可以 NFS !
1 |
[root@clientlinux ~]# umount /home/nfs/public |
客户端可处理的挂载参数与开机挂载
客户端的挂载工作比较简单吧!不过,如果你刚刚挂载到本机 /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 与装置文件,因此当你在挂载的时候,可以这样下达指令:
1 2 3 4 5 6 7 |
[root@clientlinux ~]# umount /home/nfs/public [root@clientlinux ~]# mount -t nfs -o nosuid,noexec,nodev,rw \ > 192.168.100.254:/home/public /home/nfs/public [root@clientlinux ~]# mount | grep addr 192.168.100.254:/home/public on /home/nfs/public type nfs (rw,noexec,nosuid, nodev,vers=4,addr=192.168.100.254,clientaddr=192.168.100.10) |
这样一来你所挂载的这个文件系统就只能作为资料存取之用,相对来说,对于客户端是比较安全一些的。 所以说,这个 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 是用在高速运作的环境当中的话,那么可以建议加上这些参数:
1 2 3 4 |
[root@clientlinux ~]# umount /home/nfs/public [root@clientlinux ~]# mount -t nfs -o nosuid,noexec,nodev,rw \ > -o bg,soft,rsize=32768,wsize=32768 \ > 192.168.100.254:/home/public /home/nfs/public |
则当你的 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) 来挂载时,就会无法挂载上,这个权限概念没问题吧!不然你可以在服务器上试试看:
1 2 |
[root@ZhangSir ~]# mount -t nfs localhost:/home/test /mnt mount.nfs: access denied by server while mounting localhost:/home/test |
看到 access denied 了吧?没错,权限不符!如果确定你的 IP 没有错误,那么请通知服务器端,请管理员将你的 IP 加入 /etc/exports 这个文件中。
服务器或客户端某些服务未启动:
这个最容易被忘记了!就是忘记了启动 rpcbind 这个服务!如果你在客户端发现 mount 的讯息是这样:
1 2 3 4 5 6 7 |
[root@clientlinux ~]# mount -t nfs 192.168.100.254:/home/test /mnt mount: mount to NFS server '192.168.100.254' failed: System Error: Connection refused. # 如果你使用 ping 却发现网络与服务器都是好的,那么这个问题就是 rpcbind 没有开! [root@clientlinux ~]# mount -t nfs 192.168.100.254:/home/test /home/nfs mount: mount to NFS server '192.168.100.254' failed: RPC Error: Program not registered. # 注意看最后面的数据,确实有连上 RPC ,但是服务器的 RPC 告知我们,该程序无注册 |
要嘛就是 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 文件系统资源,并进行自动挂载的动作。 讲这样或许你有点模糊,让我们拿底下这个图示来看看:
举例来说:『当我们在客户端要使用 /home/nfsfile/public 的数据时,此时 autofs 才会去 192.168.100.254 服务器上挂载 /home/public !』且『当隔了 5 分钟没有使用该目录下的数据后,则客户端系统将会主动的卸除 /home/nfsfile/public 』。
很不错用的一个工具吧!因为有用到服务器的数据时才自动挂载,没有使用了就会自动卸除! 而不是传统的情况一直是挂载的!既然这么好用,那就让我们实际来操演一下:
建立主配置文件 /etc/auto.master ,并指定侦测的特定目录
这个主要配置文件的内容很简单,只要有要被持续侦测的目录及『数据对应文件』即可。 那个数据对应文件的文件名是可以自行设定的,在这个例子当中我使用 /etc/auto.nfs 来命名。
1 2 |
[root@clientlinux ~]# vim /etc/auto.master /home/nfsfile /etc/auto.nfs |
上述数据中比较需要注意的是,那个 /home/nfsfile 目录不需要存在,因为 autofs 会主动的建立该目录! 如果你建立了,可能反而会出问题。因此,先确定一下没有该目录吧!
建立数据对应文件内 (/etc/auto.nfs) 的挂载信息与服务器对应资源
刚刚我们所指定的 /etc/auto.nfs 是自行设定的,所以这个文件是不存在的。那么这个文件的格式是如何呢?你可以这样看:
1 2 3 4 5 6 7 8 9 10 11 |
[本地端次目录] [-挂载参数] [服务器所提供的目录] 选项与参数: [本地端次目录] :指的就是在 /etc/auto.master 内指定的目录之次目录 [-挂载参数] :就是前一小节提到的 rw,bg,soft 等等的参数!可有可无; [服务器所提供的目录] :例如 192.168.100.254:/home/public 等 [root@clientlinux ~]# vim /etc/auto.nfs public -rw,bg,soft,rsize=32768,wsize=32768 192.168.100.254:/home/public testing -rw,bg,soft,rsize=32768,wsize=32768 192.168.100.254:/home/test temp -rw,bg,soft,rsize=32768,wsize=32768 192.168.100.254:/tmp # 参数部分,只要最前面加个 - 符号即可! |
这样就可以建立对应了!要注意的是,那些 /home/nfsfile/public 是不需要事先建立的! 咱们的 autofs 会事情况来处理!好了,接下来让我们看看如何实际运作吧!
实际运作与观察
配置文件设定妥当后,当然就是要启动 autofs !
1 2 3 |
[root@clientlinux ~]# /etc/init.d/autofs stop [root@clientlinux ~]# /etc/init.d/autofs start # 很奇怪!非常怪!CentOS 6.x 的 autofs 使用 restart 会失效!所以才进行两次 |
假设你目前并没有挂载任何来自 192.168.100.254 这部 NFS 服务器的资源目录。好了, 那让我们实际来观察看看几个重要的数据吧!先看看 /home/nfsfile 会不会主动的被建立? 然后,如果我要进入 /home/nfsfile/public 时,文件系统会如何变化?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
[root@clientlinux ~]# ll -d /home/nfsfile drwxr-xr-x. 2 root root 0 2011-07-28 00:07 /home/nfsfile # 仔细看,妳会发现 /home/nfsfile 容量是 0 !那是正常的!因为是 autofs 建立的 [root@clientlinux ~]# cd /home/nfsfile/public [root@clientlinux public]# mount | grep nfsfile 192.168.100.254:/home/public on /home/nfsfile/public type nfs (rw,soft,rsize=32768, wsize=32768,sloppy,vers=4,addr=192.168.100.254,clientaddr=192.168.100.10) # 上面的输出是同一行!瞧!突然出现这个玩意儿!因为是自动挂载的嘛! [root@clientlinux public]# df /home/nfsfile/public 文件系统 1K-区段 已用 可用 已用% 挂载点 192.168.100.254:/home/public 7104640 143104 6607040 3% /home/nfsfile/public # 文件的挂载也出现没错! |
如此一来,如果真的有需要用到该目录时,系统才会去相对的服务器上面挂载! 若是一阵子没有使用,那么该目录就会被卸除呢!这样就减少了很多不必要的使用时机!