一、nfs参数说明
1、NFS服务启动的进程说明。
服务或进程名 | 用途说明 |
nfsd(rpc.nfsd) | rpc.nfsd的主要功能是管理NFS客户端是否能够登入NFS服务端主机,其中还包含登入者的ID判别等 |
mountd(rpc.mountd) | rpc.mountd的主要功能则是管理NFS文件系统。当NFS客户端顺利通过rpc.nfsd登入NFS服务端主机时,在使用NFS服务器提供数据之前,它会去读NFS的配置文件/etc/exports来比对NFS客户端的权限,通过这一关之后,还会经过NFS服务端本地文件系统使用权限(就是owner、group、other权限)的认证程序。如果都通过了,NFS客户端就可以取得使用NFS服务器端文件的权限。注意,这个/etc/exports文件也是我们用来管理NFS共享目录的使用权限与安全设置的地方,特别强调,NFS本身设置的是网络共享权限,整个共享目录的权限还和目录自身的系统权限有关。 |
rpc.lockd(非必要) | 可以来锁定文件,用于多客户端同时写入。 |
rpc.statd(非必要) | 检查文件的一致性,与rpc.lockd有关。c、d两个服务需要客户端服务器端同时开启才可以;rpc.statd:监听来自其它主机重启的通知,并且管理本地系统重启时主机列表。 |
rpc.idmapd | 名字映射后台进程。 |
2、NFS要共享的目录 NFS客户端地址(权限参数)
NFS共享的目录:为NFS服务端要共享的实际目录,要用绝对路径,如(/data)。注意共享目录的本地权限,如果需要读写共享,一定要让本地目录可以被NFS客户端的用户(nfsnobody)读写。
NFS客户端地址:为NFS服务端授权的可访问共享目录的NFS客户端地址,可以为单独的IP地址或主机名、域名等,也可以为整个网段地址,还可以用“*”来匹配所有客户端服务器,这里所谓的客户端一般来说就是前端的业务服务器,例如:Web服务,详见下表。
权限参数集:对授权的NFS客户端的访问权限设置。
3、指定NFS客户端地址的配置详细说明
客户端地址 | 具体地址 | 说明 |
授权单一客户端访问NFS | 192.168.56.101 | 一般情况下,生产环境中此配置不多 |
授权整个网段可访问NFS | 192.168.56..0/24 | 其中的24等同于255.255.255.0,指定网段为生产环境中最常见的配置。配置简单、维护方便 |
授权整个网段可访问NFS | 172.0.0.* | 指定网段的另外写法(不推荐使用) |
授权某个域名客户端访问 | nfs.nulige.com | 此方法生产环境中一般情况不常用 |
授权某个域名客户端访问 | *nulige.com | 此方法生产环境中一般情况不常用 |
4、NFS Client挂载参数详解
参数 | 参数功能 | 默认参数 |
fg、bg | 当在客户端执行挂载时,可选择是前台(fg)还是在后台(bg)执行。若在前台执行,则mount会持续尝试挂载,直到成功或挂载时间超时为止,若在后台执行,则mount会在后台持续多次进行mount,而不会影响到前台的其他程序操作。如果网络联机不稳定,或是服务器常常需要开关机,建议使用bg比较妥当。 | fg |
soft、hard | 当NFS Client以soft挂载Server时,若网络或Server出现问题,造成Client和Server无法传输资料,Client就会一直尝试,直到timeout后显示错误才停止.若使用soft mount的话,可能会在timeout出现时造成资料丢失,故一般不建议使用。 若用hard模式挂载硬盘时,刚好和soft相反,此时Client会一直尝试连线到Server,若Server有回应就继续刚才的操作,若没有回应NFS Client会一直尝试,此时无法umount或kill,所以常常会配合intr使用。这是默认值。 | hard |
intr | 当时用hard挂载的资源timeout后,若有指定intr参数,可以在timeout后把它中断掉,者避免出问题时系统整个被NFS锁死,建议使用intr。 | 无 |
rsize、wsize | 读出(rsize)与写入(wsize)的区块大小(block size),这个设置值可以影响客户端与服务器端传输数据的缓冲存储量,一般来说,如果在局域网内(LAN),并且客户端与服务器端都具有足够的内存,这个值可以设置大一点,比如说65535(bytes),提升缓冲区块将可提升NFS 文件系统的传输能力。但设置的值也不要太大,最好以网络能够传输的最大值为限。 | Centos6 默认值: rsize=131072 wsize=131072 |
proto=udp | 使用UDP协定来传输资料,在LAN中会有比较好的性能。若要跨越Internet的话,使用proto=udp多传输的数据会有比较好的纠错能力。 | proto=udp |
可通过man nfs查看上述参数信息。如果追求极致,可以使用如下挂载参数: mount -t nfs -o fg,hard,intr,rsize=131072,wsize=131072 172.16.1.31:/data/ /mnt | | |
但是如果考虑以简单、易用为原则,可直接选择默认值就可以 mount -t nfs 172.16.1.31:/data/ /mnt | | |
5、mount -o 参数对应选项
mount命令-o选项后面可以接的参数,注意,有些选项只有出现在/etc/fstab里面才有效,下面这些选项可以应用在绝大多数文件系统上,但是sync仅适合ext2、ext3、fat、vfat和ufs等文件系统。
参数 | 参数意义 | 系统默认值 |
suid、nosuid | 当挂载的文件系统上有任何SUID的程序时,只要使用nosuid就能取消设置SUID的功能。 | suid |
rw、 ro | 可以指定文件系统是只读(ro)或读写(rw)。 | rw |
dev、nodev | 是否可以保留装置文件的特殊功能,一般来说只有/dev才会有特殊的装置,因此可以选择nodev。 | dev |
exec、noexec | 是否具有执行文件的权限,如果想要挂载的仅是普通资源数据区(如:图片、附件),那么可以选择noexec。 | exec |
user、nuser | 是否允许用户进行文件的挂载与卸载功能,如果要保护文件系统,最好不要提供用户进行挂载与卸载。 | nouser |
auto、noauto | 这个auto指的是“mount -a”时会不会被挂载的项目,如果不需要这个分区随时被挂载,可以设置为noauto | auto |
async | 涉及文件系统I/O的操作都是异步处理,即不会同步写到磁盘,此参数会提高性能,但会降低数据的安全性,一般情况下,生产环境下不推荐使用,除非对性能要求很高,但是对数据可靠性不太要求的场合。 | |
sync | 该参数和async相反。有I/O操作时,都会同步处理I/O,即把数据同步写入吸盘,此参数会牺牲一点I/O性能,但是,换来的是掉电后数据的安全性。 | |
atime | 在每一次数据访问时,会同步更新访问文件的inode时间戳,是默认选项。 在高并发的情况下,建议通过明确加上noatime,来取消这个默认选项,以达到提升I/O性能,优化I/O的目的。 | atime |
defaults | 这个是fstab里的默认值,包括rw、suid、dev、exec、auto、nouser、and async,默认情况大部分都是默认值。 | |
nodirname | 不更新文件系统上的directory inode时间戳,高并发环境,推荐显示应用该选项,可以提高系统I/O性能。 | |
remount | 尝试重新挂载一个已经挂载了的文件系统,这通常被用来改变一个文件系统的挂载标志,从而使得一个只读文件系统变的可写,这个动作不会改变设备或者挂载点。当系统故障时进入single或rescue模式修复系统时,会发现根文件系统经常会变成只读文件系统,不允许修改,此时该命令就派上用场了。具体命令为:“mount -o remount,rw /”表示将根文件系统重新挂载使得可写。single或rescue模式修复系统时这个命令十分重要。 | |
dirsync | 目录更新时间同步写入磁盘 | |
6、NFS配置权限设置常用参数说明
参数名称 | 参数用途 |
rw | 读写权限 |
ro | 只读权限 |
sync | 请求或写入数据时,数据同步写入到NFS Server的硬盘后才返回。优点:数据安全不会丢;缺点:性能比不启动该参数要差 |
async | 写入时数据会先写入到内存缓冲区,直到硬盘有空档才会再写入磁盘,这样可以提升写入效率!风险为若服务器宕机或不正常关机,不会缓冲未写入磁盘的数据(解决办法:服务器主板电池或UPS不间断电源) |
no_root_squash | 访问NFS Server共享目录的用户如果是root的话,它对该共享目录具有root权限。这个配置原本是为无盘客户端准备的。用户应避免使用。 |
root_squash | 如果访问NFS Server共享目录的用户时root,则它的权限将被压缩成匿名用户,同时它的UID和GID通常会变成nfsnobody账号身份。 |
all_squash | 不管访问NFS Server共享目录的用户身份如何,它的权限都将被压缩成匿名用户,同时它的UID和GID都会变成nfsnobody帐号身份。在早期多个NFS 客户端同时读写NFS Server数据时,这个参数很有用。 在生产中配置NFS 的重要技巧: l)确保所有客户端服务器对NFS共享目录具备相同的用户访问权限 a.all_squash 把所有客户端都压缩成固定的匿名用户(UID相同) b.就是anonuid,anongid 指定的UID和GID的用户。 2)所有的客户端和服务端都需要有一个相同的UID和GID的用户,即nfsnobody(UID必须相同)。 |
anonuid | 参数以anon*开头即指anonymous匿名用户,这个用户的UID设置值通常为nfsnobody的UID值,当然也可以自行设置这个UID值。但是,UID必须存在于/etc/passwd 中。在多NFS Clients时,如多台Web Server共享一个NFS目录,通过这个参数可以使得不同的NFS Clients写入的数据对所有NFS Clients保持同样的用户权限,即为配置的匿名UID对应用户权限,这个参数很有用,一般默认即可。 |
anongid | 同anonuid,区别就是把uid(用户id)换成gid(组id)。 |
带底纹标记的表示为常用参数,更多可以参考man exports | |
7、NFS服务文件或命令的说明
NFS常用路径 | 说明 |
/etc/exports | NFS服务主配置文件,配置NFS具体共享服务的站点,默认内容为空。以单行为单位。 [root@nfs01 ~]# cat /etc/exports # share /data by rsq for everyone at 20180127 /data 172.16.1.0/24(rw,sync) |
/usr/sbin/exportfs | NFS服务的管理命令。例如:可以加载NFS配置生效,还可以直接配置NFS共享目录,即无需配置/etc/exports实现共享. [root\@nfs01 \~]# /usr/sbin/exportfs -rv \<==加载配置生效,等价优雅重启/etc/init.d/nfs reload exporting 172.16.1.0/24:/data 这里有一个服务平滑重启的概念,即超市、银行到了关门时间了,但还是会继续提供服务给已经在门里的人,但是新来的就会被挡在门外了。网站服务平滑重启,是提升用户体验必须要考虑的。 exportfs不但可以加载配置生效,也可以通过命令直接共享目录。越过/etc/exportfs,但是重启失效。 |
/usr/sbin/showmount | 常用在客户端,查看NFS配置及挂载结果的命令。 show mount information for an NFS server 配置nfsserver,分贝在服务器及客户端查看挂载情况。 |
/var/lib/nfs/etab | NFS配置文件的完整参数设定的文件(有很多没有配置但是默认就有的NFS参数)。 |
/proc/mounts | 客户端挂载参数 [root@web01 ~]# grep “mnt” /proc/mounts 172.16.1.31:/data/ /mnt nfs4 rw,relatime,vers=4,rsize=131072,wsize=131072,namlen=255,hard,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=172.16.1.8,minorversion=0,local_lock=none,addr=172.16.1.31 0 0 |
/var/lib/nfs/rmtab | 客户端访问服务器exports的信息列表 |