NFS & autofs

这里是配置 NFS 的相关命令 , 包括配置文件以及注意事项的总结 , 至于什么是 NFS 等问题可以 Google 之 .

部分说法跟大陆这边不一样 , 有疑问的可以先看我之前繁体简体对照的总结 .

Server

涉及的主要命令

1)查看每个RPC 服务的注册状况
# rpcinfo -p IP

2)NFS的连线观察
# showmount [-ae] [hostname|IP]
-a : 显示目前主机与用户端的 NFS 连线分享的状态
-e : 显示某部主机的 /etc/exports 所分享的目录资料

范例一 : 显示出刚刚我们所设定好的相关exports资讯
# showmount -e localhost

3)重新向 RPC 注册
# exportfs [-aruv]
-a : 全部挂载(或卸载) /etc/exports档案内的设定
-r : 重新挂载 /etc/exports 里面的设定 , 此外 , 亦同步更新 /etc/exports 及 /var/lib/nfs/xtab 的内容 !
-u : 卸载某一目录
-v : 在 export 的时候 , 将分享的目录显示到萤幕上 !

范例一 : 重新挂载一次 /etc/exports 的设定
# exportfs -arv
范例二 : 全部都卸载
# exportfs -auv

涉及的主要配置文件

/etc/exports
/var/lib/nfs/etab
/var/lib/nfs/xtab

NFS 的安全性

利用 iptables 做大范围连线的限制
利用 TCP Wrappers 限制
使用 /etc/exports 设定更安全的权限
更安全的 partition 规划
NFS 伺服器关机前的注意事项

Client

涉及的主要命令

1)启动 NFS 服务
# /etc/init.d/portmap start
# /etc/init.d/nfslock start

2)检查 server 的共享文件
# showmount -e 192.168.0.2

3)挂载

# mount -t nfs 192.168.0.2:/home/public /home/nfs/public

mount 的指令参数

参数

代表的意义

系统预设值

suid , nosuid

如果挂载的 partition 上面有任何 SUID 的 binary 程式时 , 你只要使用 nosuid 就能够取消 SUID 的功能了 !

suid

ro , rw

你可以指定该 partition 是唯读 (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 与装置档案 , 因此当你在挂载的时候 , 可以这样下达指令 :
# mount -t nfs -o nosuid,noexec,nodev,rw   192.168.0.2:/home/public /home/nfs/public

还有其他的一些参数

参数

参数的意义

系统预设值

fg , bg

若在前景执行时 , 则 mount 会持续尝试挂载 , 直到成功或 time out 为止 , 若为背景执行 , 则mount 会在背景持续多次进行 mount  , 而不会影响到前景的程序操作 .

fg

soft , hard

如 果是 hard 的情况 , 则当两者之间有任何一部主机离线 , 则 RPC 会持续的呼叫 , 直到对方恢复连线为止 . 如果是 soft 的话 , 那 RPC会在 time out 后 " 重复 " 呼叫 , 而非 " 持续 " 呼叫 , 因此系统的延迟会比较不这么明显 .

hard

intr

当你使用上头提到的 hard 方式挂载时 , 若加上intr 这个参数 , 则当 RPC 持续呼叫中 , 该次的呼叫是可以被中断的 (interrupted) .

/

rsize , wsize 读 出 (rsize) 与写入 (wsize) 的区块大小 (block size) . 这个设定值可以影响用户端与伺服器端传输资料的缓冲记忆容量 . 一般来说 , 如果在区域网路内 (LAN)  , 并且用户端与伺服器端都具有足够的记忆体 , 那这个值可以设定大一点 , 比如说32768 (bytes) 等 , 提升缓冲记忆区块将可提升NFS 档案系统的传输能力 ! rsize = 1024 , wsize = 1024

通常如果你的NFS 是用在高速运作的环境当中的话 , 那么可以建议加上这些参数的说 :
# mount -t nfs -o nosuid,noexec,nodev,rw, bg,soft,rsize=32768,wsize=32768 \
> 192.168.0.2:/home/public /home/nfs/public

涉及的主要配置文件

将 NFS 开机即挂载 : /etc/fstab
192.168.0.2:/home/public /home/nfs/public nfs nosuid,noexec,nodev,rw, bg,soft,rsize=32768,wsize=32768 0 0

无法挂载的原因分析

使用者或用户端身份权限不符
伺服器或用户端某些服务未启动
被防火墙档掉了

autofs

涉及的主要命令

1)启动 autofs
#service autofs restart
或者 /etc/init.d/autofs restart

涉及的主要配置文件

/etc/auto.mater
/etc/auto.nfs (根据妳在 auto.master 里面的配置而定)

注意 : 在 /etc/auto.nfs 当中要挂载的文件要在 server 端的 /etc/exports 中写入 !
之前当我想 cd 进入某个自动挂载的目录时 , 总是显示挂载失败(world 是我想要进入的目录) :
bash: cd: world: No such file or directory
其实就是在 /etc/exports 里面没有写入要共享的文件.

本文总结鸟哥的教程 , 将其中的精华提取了一下 , 想看全文的点击这里.
 

  • http://www.zypatroon.com zypatroon

    NFS 是 Need For Speed. 极品飞车.

  • Terry Zheng

    请教一下,我在 NFS Client 上用 hard 挂载,Server 和 Client 失联后,Client 上的应用程序就会挂在那里,不报错误也没有异常,导致排错的时候很烦。用 soft 据说会丢失数据,你在用 hard 还是 soft?

    • http://jaseywang.me/ Jasey Wang

      Hard, 默认。