一、  nfs工作原理
1) nfs在传输时使用的端口是随机的未被使用<1024的端口,他是通过RPC(远程过程调用)服务来实现的。
RPC的主要功能就是记录每个NFS功能所对应的端口号,并且将该信息传到NFS客户端,来实现连接。
 
2) 启动NFS server之前,首先要启动RPC服务(即portmap服务),否则nfs server就无法向RPC服务注册。
注:如果RPC服务重新启动,原来已注册好的NFS端口数据就会丢失,因此,此时RPC服务管理的NFS程序也需要重新启动以重新向RPC注册。
一般修改NFS配置文件时,是不需要重启NFS的,直接命令执行/etc/init.d/nfs reload或exportfs -rf即可使修改的/etc/exports生效.

二、  nfs配置说明:

先启动portmap服务,再启动nfs服务来向RPC注册端口,信息查看rpcinfo -p localhost

1. NFS server端设置:

1)NFS软件:
nfs-utils :nfs主程序 
包括rpc.nfsd  rpc.mountd两个daemons和相关文档说明及执行命令文件...

portmap(111端口): RPC主程序 
nfs可以被视为一个RPC程序,在启动任何一个RPC程序之前,需要做好端口映射工作,这个映射工作就是由portmap服务来完成的。因此,须先启动portmap服务.
rpcinfo -p localhost 检查portmap服务.是否工作正常

2)配置文件/etc/exports
格式:
nfs共享目录  客户端地址1(ip/域名)参数 客户端地址2(ip/域名)参数

   
   
   
   
  1. 实例说明:  
  2. /eggplant/wyan  10.0.0.0/24(rw,sync)   -->sync写到内存时同步写到磁盘里  
  3. /home/wyan  10.0.0.0/24(rw,sync,all_squash,anonuid=2000,anongid=2000)    all_squash确保客户端使用其后面定义的uid,gid权限  
  4.  
  5. /eggplant/wyan共享给10.0.0./24整个网段可读写,本地目录需777权限,否则客户端无法写入,或者将其改为客户端访问过来的用户属主权限。  
  6.  
  7. cat  /etc/exports  
  8. /wyan  10.0.0.0/24(rw,sync)  这里的rw是网络上允许写入权限  
  9.  
  10. /etc/init.d/nfs reload   重新加载不要直接重启。 

参数(nfs 权限设置):可通过man exports查看详细用法.
nfs相关配置文件查看

   
   
   
   
  1. cat /var/lib/nfs/etab    里面有nfs挂载的默认参数  
  2. cat /etc/exports        nfs-server配置文件  
  3. cat /var/lib/nfs/rmtab 哪些用户挂载过此共享目录  

2. NFS client端设置

showmount –e server_IP  查看提供的哪些nfs共享

手动挂载:
mount  -t  nfs    server_IP:/remote_directory    /local_directory
        挂载类型  服务端IP加目录       客户端目录
默认情况下nfs客户端往服务端写是nfsnobody用户

3. NFS配置开机启动服务

服服务端:chkconfig  nfs on;chkconfig portmap on
客户端;chkconfig portmap on
chkconfig  --list|egrep “nfs|portmap”  检查启动情况

4. nfs客户端开机自动挂载

第一种方法:

   
   
   
   
  1. /etc/fstab里添加  
  2. server_IP:/remote_dir   /local_dir   nfs  defaults  1  1 

第1个1表示备份文件系统,第2个1表示从/分区的顺序开始fsck磁盘检测,0表示不检测。
第二种方法:
将手动挂载命令加入到/etc/rc.local中.

注意事项:生产环境中一般不将其挂载信息写入fstab中,因为开机启动时,网络连接不上nfs server的话,可能会导致客户端主机无法启动过不了fstab这项,可以将其放到/etc/rc.local中来实现开机自动挂载,但也有可能重启nfs客户端后挂载不成功.

5.nfs卸载

umount /data  退出挂载目录再卸载,否则可能会出现device is busy
umount -lf /data  强制卸载 或fuse -k /data
补充:
/etc/fstab就是利用mount进行挂载时,将所有的选项与参数写入到这个文件中。

   
   
   
   
  1. /dev/xvda1     /      ext3   defaults      1 1  
  2. /dev/xvda3     /var   ext3   defaults      1 2  
  3. /dev/xvda2     swap   swap   defaults      0 0  
第一栏:磁盘设备文件名或该设备的label
第二栏:挂载点mount point
第三栏:文件系统
第四栏:文件系统参数
部分参数说明:
   
   
   
   
  1. async/sync      异步/同步      设定磁盘是否以异步方式运作!预定为 async(效能较佳)  
  2. auto/noauto     自动/非自动   当下达mount -a时,此文件系统是否会被主动测试挂载,预设为auto  
  3. rw/ro            读写/只读权限  
  4. exec/noexec      可执行/不可执行权限  
  5. user/nouser      是否允许一般身份的用户使用mount来挂载,默认nouser。因为不安全。  
  6. 允不允许使用者挂载  
  7. suid/nosuid       具有/不具有suid权限    该文件是否允许SUID的存在?一般挂载的数据无此需求,可以取消  
  8. usrquota     在启动 filesystem 支持磁盘配额模式,  
  9. grpquota     启动 filesystem 对群组磁盘配额模式的支持  
  10. defaults     同时具有 rw, suid, dev, exec, auto, nouser, async 等参数。 基本上,预设情况使用 defaults 设定即可! 

第五栏:能否被 dump 备份指令作用,可以通过 fstab 指定哪个文件系统必须要进行 dump 备份!
0 代表不要做 dump 备份, 1 代表要每天进行 dump 的操作。 2 也代表其他不定日期的 dump 备份操作
第六栏:是否以 fsck 检验扇区,filesystem 是否完整。不过,某些 filesystem 是不需要检验的,例如内存交换空间 (swap) ,或者是特殊文件系统例如 /proc 与 /sys 等等。
0 不检验  1最先检验(一般只有根目录设为1)  2 检验,但/根分区优先

rw           可读写
ro           只读
sync         请求或写入数据时,数据同步写入到NFS server的硬盘后才返回。
all_squash   不管访问NFS server共享目录的用户是谁,它的权限都将被压缩成匿名用户,同时它的UID和GID都会变成nobody或nfsnobody帐号身份。在多个NFS客户端同时读写NFS server数据时,这个参数有用。
anonuid      参数以anon*开头即指anonymous用户,这个用户的UID设置值通常为nodbody或nfsnobody的UID值,在NFS clients时,如多台web server共享一个NFS目录时,通过这个参数可以使得不同的NFS clients写入的数据对所有NFS clients保持同样的用户权限,即为配置的匿名UID对应用户权限,这个参数很有用.
anongid      同 anonuid,区别就是uid与gid而已.
fsid         待补充