22.NFS

NFS 服务依赖于rpc服务,nfs启动前需启用rpcbind服务
#/etc/init.d/rpcbind start
#/etc/init.d/nfs start
NFS配置文件
- NFS的常用目录
/etc/exports NFS服务的主要配置文件
/usr/sbin/exportfs NFS服务的管理命令
/usr/sbin/showmount 客户端的查看命令
/var/lib/nfs/etab 记录NFS分享出来的目录的完整权限
/var/lib/nfs/xtab 记录曾经登录过的客户端信息
- /etc/exports文件内容格式
<输出目录> [客户端1 选项(访问权限,用户映射,其他)] [客户端2 选项(访问权限,用户映射,其他)]
- 用户映射选项
all_squash,no_all_squash,root_squash,no_root_squash,anonuid=xxx,anongid=xxx
其它选项
secure:限制客户端只能从小于1024的tcp/ip端口连接nfs服务器
insecure:允许客户端从大于1024的tcp/ip端口连接nfs服务器
subtree:若输出目录是一个子目录,则nfs服务器将检查其父目录的权限(默认设置)
no_subtree:不检查父目录权限,提高效率。
二、应用实例一:
- #mkdir -p /nfsdata
#touch /data/oldboy.txt
#chown -R nfsnobody.nfsnobody /nfsdata ##不设置此权限,会导致NFS客户端访问时无法通过NFS本地共享目录权限写入数据。
#grep nfsnobody /etc/passwd
#vim /etc/exports
/nfsdata 10.146.3.0/24(rw,sync)
#exportfs -rv ##修改export配置后要重新加載。也可以用#service nfs reload,不需要重启nfs服务。
#exportfs [-aruv] :-a全部/etc/exports中的内容,-u:卸载单一目录,-v:在export时,将详细信息输出到屏幕上,-r:重新读取/etc/exports中的信息,并同步更新/etc/exports、/var/lib/nfs/xtab中的内容。
nfsstat:查看nfs运行状态
#showmount -e localhost ##在本地查看挂载情况。
#cat /var/lib/nfs/etab ##查看nfs的所有配置参数--包含默认参数
/nfsdata 10.146.3.0/24(rw,sync,wdelay,hide,nocrossmnt,secure,root_squash,no_all_squash,no_subtree_check,secure_locks,acl,anonuid=65534,anongid=65534)
#mount -t nfs 10.146.3.133:/nfsdata /mnt ##在本地挂载进行测试。
- clinet上配置:
#yum install nfs-utils
#yum install rpcbind
客户端同样需要安装这两个包。
#/etc/init.d/rpcbind start ##不需要启动NFS服务
#showmount -e 10.146.3.133 ##检查是否有权限挂载
#mount -t nfs 10.146.3.133:/data /mnt
#df -h
#mount
开机自动挂载
#echo "/etc/init.d/rpcbind start" >> /etc/rc.local
#echo "/bin/mount -t nfs 10.146.3.133:/nfsdata /mnt" >> /etc/rc.local
注:多个NFS客户端访问服务器端的读写文件时,需要具有以下权限
- NFS服务器端需开放w权限
- NFS实限共享的目录权限具有写入w的权限
- 每台client上都应存在和NFS默认配置UID的相同UID65534的nofsnobody用户。
- 服务器端把默认的参数no_all_squash改为all_squash
- 客户端挂载参数mount -o建议用bg,hard,intr;用fg时会在前台执行,直到挂载成功或超时才执行期它程序,默认fg。用soft时,若server出现问题,client会一直尝试,直到timeout后显示错误才停止。用hard时,若server没有回应也会继续操作,无法umount或kill,需配合intr使用。默认hard。intr,当用hard挂载的资源timeout后,若用指定intr参数,可以在timeout后把它中断掉。exec/noexec 是否有执行文件的权限。
客户端挂载可用:mount -t nfs -o fg,hard,intr 10.0.0.7:/data/ /mnt
三、指定固定UID用户配置NFS共享的实例------Centos6以下版本不是必须的。
- NFS服务器端新建一个用户及组,把它作为NFS的anonuid及anongid
- #echo '/oldboy 10.0.0.0/24(rw,sync,all_squash,anonuid=888,anongid=888)' >> /etc/exports
- 客户端也建立一个与NFS服务器端一样的用户及组,uid及gid也要一样。
NFS客户端挂载参数列表
在NFS客户端grep挂载的目录可获取默认挂载参数,命令如下:
[root@nginx01 wp-content]# grep uploads /proc/mounts
172.16.1.31:/upload/ /application/nginx-1.6.3/html/blog/wp-content/uploads nfs4
rw,\
nosuid,noexec,relatime,vers=4,rsize=131072,wsize=131072,namlen=255,hard,proto=tcp,port=0\
,timeo=600,retrans=2,sec=sys,clientaddr=172.16.1.13,minorversion=0,local_lock=none,\
addr=172.16.1.31 0 0
|
参数 |
参数功能 |
默认参数 |
|
fg bg |
当在客户端执行挂载时,可选择是前台(fg)还是在后台(bg)执行。若在前台执行,则mount会持续尝试挂载,直到成功或挂载时间超时为止,若在后台执行,则mount会在后台持续多次进行mount,而不会影响到前台的其他程序操作。如果网络联机不稳定,或是服务器常常需要开关机,建议使用bg比较妥当。 |
fg |
|
soft |
当NFS Client以soft挂载Server时,若网络或Server出现问题,造成Client和Server无法传输资料,Client就会一直尝试,直到timeout后显示错误才停止。若使用soft mount的话,可能会在timeout出现时造成资料丢失,故一般不建议使用。若用hard |
hard |
|
intr |
当使用hard挂载资源timeout后,若有指定intr参数,可以在timeout后把它中断掉,这避免出现问题时系统整个被NFS锁死,建议使用intr |
|
|
rsize |
读出(rsize)与写入(wsize)的区块大小(block size),这个设置值可以影响客户端与服务端传输数据的缓冲存储量,一般来说,如果在局域网内(LAN),并且客户端与服务器端都具有足够的内存,这个值可以设置大一点,比如说65535(bytes),提升缓冲区块将提升NFS文件系统的传输能力。但设置的值也不要太大,最好以网络能够传输的最大值为限 |
CentOS 5:默认值 |
|
proto=udp |
使用UDP协定来传输资料,在LAN中会有比较好的性能。若要跨越Internet的话,使用proto=tcp多传输的数据会有比较好的纠错能力 |
proto=tcp |
mount -o参数对应选项
|
参数 |
参数意义 |
系统默认值 |
|
suid |
当挂载的文件系统上有任何SUID的程序时,只要使用nosuid就能够取消设置SUID的功能 |
suid |
|
rw |
可以指定问价系统是只读(ro)或可写(rw) |
rw |
|
dev |
是否可以保留装置文件的特殊功能?一般来说只有/dev才会有特殊的装置,一次可以选择nodev |
dev |
|
exec |
是否具有执行文件的权限?如果想要挂载的仅是普通资源数据区(例如:图片、附件),那么可以选择noexec |
exec |
|
user |
是否允许用户拥有文件的挂载与卸载功能?如果要保护文件系统,最好不要为用户提供挂载与卸载功能 |
nouser |
|
auto |
这个auto指的是“mount -a”时会不会被挂载的项目,如果不需要这个分区随时被挂载,可以设置为noauto |
auto |
mount -o参数中英翻译对比
- async:涉及文件系统I/O的操作都是异步处理,即不会同步写到磁盘,此参数会提高性能,但会降低数据安全。一般情况,生产环境下不推荐使用。除非对性能要求很高,对数据可靠性不要求的场合。
- sync:该参数与async相反。有I/O操作时,都会同步处理I/O,即把数据同步写入磁盘。此参数会牺牲一点I/O性能,但是,换来的是掉电后数据的安全性。
- atime:在每一次数据访问时,会同步更新访问文件的inode时间戳,是默认选项,在高并发的情况下,建议通过明确加上notime,来取消这个默认项,以到达提升I/O性能,优化I/O的目的。
- noatime:访问文件时不更新文件的inode时间戳,高并发环境下,推荐显式应用该选项,可以提高系统I/O性能。
- ro:以只读的方式挂载一个文件系统。
- rw:以可写的方式挂载一个文件系统。
- auto:能够被自动挂载通过-a选项。
- noauto:不会自动挂载文件系统。
- defaults:这是fstab里的默认值,包括rw、suid、dev、exec、auto、nouser、async,默认情况大部分都是默认值。
- exec:允许文件系统执行二进制文件,取消这个参数,可以提升系统安全性。
- noexec:在挂载的文件系统中不允许直接执行任何二进制的程序,注意,仅对二进制程序有效,及时设置了noexec、shell,php程序还是可以执行的。
- nodiratime:不更新文件系统上的derectory inode时间戳,高并发环境,推荐显式应用该选项,可以提高系统I/O性能。
- nosuid:不允许set-user-identifier or set-group-identifier位生效。
- suid:允许set-user-identifier or set-group-identifier位生效。
- nouser:禁止一个普通用户挂载该文件系统,这是默认挂载时的默认选项。
- remount:尝试重新挂载一个已经挂载了的文件系统,这通常被用来改变一个文件系统的挂载标志,从而使得一个只读文件系统变的可写,这个动作不会改变设备或者挂在点。当系统故障时进入single或rescue模式修复系统时,会发现根文件系统经常会变成只读文件系统,不允许修改,此时该命令就派上用场了。具体命令为:mount -o remount,rw/,表示将根文件系统重新挂载使得可写。single或rescue模式修复系统时这个命令十分重要。
- dirsync:目录更新时同步写入磁盘。
禁止更新目录及文件时间戳挂载,命令如下:
|
mount -t nfs -o noatime,nodiratime 172.16.1.31:/data /mnt |
安全加优化的挂载方式如下:
|
1 |
mount -t nfs -o nosuid,noexec,nodev,noatime,nodiratime,intr,rsize=131072,wsize=131072
\ |
默认的挂载方式:
#mount -t nfs -o 172.16.1.31:/data /mnt
#mount -t nfs -o soft,intr,timeo=2,retry=2,noexec,nosuid,nouser,async 10.146.3.138:/nfs/138orabk /nfsdata/
# mount -t nfs -o rw,bg,soft,intr,actimeo=0,vers=3,rsize=20480000,wsize=20480000,retry=2,noexec,nosuid,nouser,async 10.146.3.138:/nfs/138orabk /nfsdata/
服务端中断,不会挂起
mount -t nfs -o soft,intr,timeo=2,noexec,nosuid,nouser,async 10.146.3.138:/nfs/138orabk /nfsdata/
oracle挂载
mount -t nfs -o rw,bg,hard,nointr,rsize=32768,wsize=32768,timeo=600,actimeo=0 rac1:/home/oracle/arch /home/oracle/arch ##网上
mount -t nfs -o rw,bg,soft,intr,timeo=2,retry=1,rsize=32768,wsize=32768,async 10.146.3.137:137NFSBk /nfs ##实际
mount 命令的可选参数如下:
下面列出mount关于nfs相关的参数
(1)-a:把/etc/fstab中列出的路径全部挂载。
(2)-t:需要mount的类型,如nfs等。
(3)-r:将mount的路径定为read only。
(4)-v mount:过程的每一个操作都有message传回到屏幕上。
(5)rsize=n:在NFS服务器读取文件时NFS使用的字节数,默认值是4096个字节。
(6)wsize=n:向NFS服务器写文件时NFS使用的字节数,默认值是4096个字节。
(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。
nfsvers(vers)=n :指定服务器nfs协议版本号
soft / hard :请求超时后的行为,hard表示无限期重试,soft表示超时后返回错误状态。
timeo=n :超时重试时间
retrans=n:重试次数
rsize=n :每个读请求的最大字节数(NFS最大支持1048576个字节(1M))
wsize=n : 每个写请求的最大字节数(NFS最大支持1048576个字节(1M))
ac / noac :客户端是否可以缓存文件属性(默认为ac,可缓存)
acregmin=n:缓存文件的最小刷新时间(默认为3s)
acregmax=n:缓存文件的最大刷新时间(默认为60s)
acdirmin=n: 缓存目录的最小刷新时间(默认为30s)
acdirmax=n: 缓存目录的最大刷新时间(默认为60s)
actimeo=n: 同时设置以上四个值
fg / bg :mount失败后的行为;fg表示失败后退出(默认),bg表示失败后会fork一个子进程继续mount
retry=n:mount重试分钟;(默认fg为2分钟,bg为10000分钟),为0表示立即退出。
rdirplus / nordirplus:表示是否使用v3和v4的readdirplus请求。
sec=flavor :访问共享目录中文件的安全类型;可选值有:none, sys, krb5,
krb5i, and krb5p.
sharecache / nosharecache:是否共享数据与属性缓存
resvport / noresvport:是否使用特权源端口
lookupcache=mode:内核对缓存的管理模式,有all, none, pos, positive
nofsc / fsc: 禁止/使能fs-cache(在本地磁盘上缓存网络文件系统的数据cachefilesd)
//以下只适用于v2,v3
proto=netid :指定网络传输协议,可选值有: udp, udp6, tcp,
tcp6, and rdma.
udp:与proto=udp相同
tcp:与proto=tcp相同
rdma:与proto=rdma相同
port=n:指定NFS服务的端口号,(为0或者没有指定时用rpcbind)
mountport=n:指定mountd的端口号。(为0或者没有指定时用rpcbind)
FAQ:
1.NFS Server故障导致Client #df -h挂起。
答:客户端上,#umount -lf /mnt ##强制卸载。
2./var/message中报错
nfsd:unexporting all filesystems
nfsd:last server has exited
nfsd:unexporting all filesystems
答:在/etc/exports中参数位置加fsid=0

浙公网安备 33010602011771号