1.什么是NFS(Network FileSystem)centos
NFS 就是 Network FileSystem 的缩写,最先以前是由 Sun 所发展出来的。他最大的功能就是能够透过网络,让不一样的机器、不一样的操做系统、能够彼此分享个别的档案 ( share file ),因此,也能够简单的将他看作是一个 file server 呢!这个 NFS Server 可让你的 PC 来将网络远程的 NFS 主机分享的目录,挂载到本地端的机器当中,因此,在本地端的机器看起来,那个远程主机的目录就好象是本身的 partition 通常!安全
虽然 NFS 有属于本身的协议与使用的 port number ,可是在资料传送或者其它相关讯息传递的时候, NFS 使用的则是一个称为远程过程调用( Remote Procedure Call, RPC )的协议来协助 NFS 自己的运做!服务器
2.RPC(Remote Procedure Call)网络
当咱们在使用某些服务来进行远程联机的时候,有些信息,例如主机的IP、服务的 port number、与对应到的服务之 PID 等等,都须要管理与对应!这些管理 port 的对应与服务相关性的工做,就是这个 Remote Procedure Call, RPC 的任务了app
NFS 自己的服务并无提供资料传递的协议,可是 NFS 却能让咱们进行档案的分享,这其中的缘由,就是 NFS 使用到一些其它相关的传输协议!而这些传输的协议,就是使用到这个所谓的 RPC 的功能啰!这也就是说, NFS 自己就是使用 RPC 的一个 program 就是了!说的更白话一点, NFS 也能够视做是一个 RPC server 啦!同时要注意到的是,在某些情况中,不但跑 NFS 的 Server 须要激活 RPC 的服务,连带的,要挂载 NFS partition 的 Client 机器,也须要同步激活 RPC 才行!这样 Server 端与 Client 端才能藉由 RPC 的协议来进行 program port 的对应喔!NFS 主要在管理分享出来的目录,而至于资料的传递,就直接将他丢给 RPC 的协议来运做就是了!async
3.NFS须要有两个套件才行,分别是:tcp
nfs-utilside
就是提供 rpc.nfsd 及 rpc.mountd 这两个 NFS daemons 与其它相关 documents 与说明文件、执行档等的套件!这个就是 NFS 的主要套件ui
portmap spa
NFS的安装配置:
centos 5 :
yum -y install nfs-utils portmap
centos 6(在CentOS 6.3当中,portmap服务由rpcbind负责) :
yum -y install nfs-utils rpcbind
就如同刚刚提的到,咱们的 NFS 其实能够被视为一个 RPC server program,而要激活任何一个 RPC server program 以前,咱们都须要作好 port 的对应 ( mapping ) 的工做才行,这个工做其实就是『 portmap 』这个服务所负责的
4.NFS server端的设定:
a)./etc/exports
分享的目录 主机名称1或IP1(参数1,参数2) 主机名称2或IP2(参数3,参数4)
b).参数
rw: 可擦写的权限
ro: 只读的权限
no_root_squash: 登入 NFS 主机使用分享目录的使用者,若是是 root 的话,那么对于这个分享的目录来讲,他就具备 root 的权限!这个项目『极不安全』,不建议使用!
root_squash: 在登入 NFS 主机使用分享之目录的使用者若是是 root 时,那么这个使用者的权限将被压缩成为匿名使用者,一般他的 UID 与 GID 都会变成 nobody 那个身份;
all_squash: 不论登入 NFS 的使用者身份为什么,他的身份都会被压缩成为匿名使用者,一般也就是 nobody 啦!
anonuid: 前面关于 *_squash 提到的匿名使用者的 UID 设定值,一般为 nobody,可是你能够自行设定这个 UID 的值!固然,这个 UID 必须要存在于你的 /etc/passwd 当中!
anongid: 同 anonuid ,可是变成 group ID 就是了
sync: 资料同步写入到内存与硬盘当中
async: 资料会先暂存于内存当中,而非直接写入硬盘\
5.exportfs的用法
若是咱们修改了/etc/exports后,并不须要重启nfs服务,只要用exportfs从新扫描一次/etc/exports,而且从新加载便可
语法: exportfs [-aruv]
-a: 所有挂载(或卸载) /etc/exports档案内的设定
-r: 从新挂载/etc/exports里面的设定,也同步的更新/etc/exports和/var/lib/nfs/xtab里面的内容
-u:卸载某一目录
-v:在export的时候,将分享的目录显示到荧屏上.
例子:
编写/etc/exports 文件,将特定的目录共享出去,在server段写入,定义某台机器能够访问,某台机器不能够访问,不许写入文件,
[root@aaa nfs]# cat /etc/exports
/ext4/aa *(rw)
/ext4/bb *(rw,,no_root_squash)
/nfs/tmp 10.0.0.123(rw,sync)
/nfs/opt *(ro)
exportfs -r 来实现重读文件,不须要重启服务
而后,能够经过另外一台服务器来挂载目录,经过mount命令来挂载共享目录。
mount x.x.x.x:/ext4/aa /mnt
挂载以后,进入/mnt操做,会发现没法进行新增,删除等操做,即便使用root用户也没法操做该目录,觉得redhat 6中,默认会添加上root-squash选项,会把root用户映射成nfsnobody帐号,因此挂载后的目录权限须要根据nfsnobody的权限来作操做,能够设置成/ext4/aa为777的权限,进入该目录能够作操做,经过ls -lh去查看建立的目录为nfsnobody的全部者
mount x.x.x.x:/ext4/bb /mnt
挂载以后,用root用户进入操做以后,建立目录都为root所属
/nfs/tmp 10.0.0.123(rw,sync)
指定只有10.0.0.123这台机器能够挂载,而且挂载后数据写入会同步写入到硬盘上面,也就是内存与硬盘同步。
Autofs搭建:
修改/etc/auto.master 这个文件,
客户端本地目录 /etc/auto.nfs 随便指定的一个文件(能够去拷贝/etc/auto.misc)
/test /etc/auto.nfs 指定服务器端挂载过来的目录,是要挂到客户端/test目录下,
修改/etc/auto.nfs文件
opt -rw 10.0.0.23:/nfs
将 0.23服务器上面的nfs目录自动挂载过来,挂载的目录是/test/opt,/test是挂载点,具体挂载到哪个目录下面,是在auto.nfs设定。
其中,在auto.nfs挂载中,可加参数为:
(1)-a:把/etc/fstab中列出的路径所有挂载。
(2)-t:须要mount的类型,如nfs等。
(3)-r:将mount的路径定为read only。
(4)-v mount:过程的每个操做都有message传回到屏幕上。
(5)rsize=n:在NFS服务器读取文件时NFS使用的字节数,默认值是1 024个字节。
(6)wsize=n:向NFS服务器写文件时NFS使用的字节数,默认值是1 024个字节。
(7)timeo=n:从超时后到第1次从新传送占用的1/7秒的数目,默认值是7/7秒。
(8)retry=n:在放弃后台mount操做以前能够尝试的次数,默认值是7 000次。
(9)soft:使用软挂载的方式挂载系统,若Client的请求得不到回应,则从新请求并传回错误信息。
(10)hard:使用硬挂载的方式挂载系统,该值是默认值,重复请求直到NFS服务器回应。
(11)intr:容许NFS中断文件操做和向调用它的程序返回值,默认不容许文件操做被中断。
(12)fg:一直在提示符下执行重复挂载。
(13)bg:若是第1次挂载文件系统失败,继续在后台尝试执行挂载,默认值是失败后不在后台处理。
(14)tcp:对文件系统的挂载使用TCP,而不是默认的UDP。
说明:mount NFS服务器的另外一个重要参数是hard(硬)mount或soft(软)mount。
对于NFS挂载的时间默认是在/etc/sysconfig/autofs里面能够查看。