整理了一下NFS相关知识,供大家一起学习,工作流程图片大家自行百度吧,传了几次浏览器都崩溃了。 Linux Nfs配置解析 NFS介绍 要学习NFS文件挂载系统,首先我们对它有一个简单的了解。NFS 是network file system的缩写,即网络文件系统。一种分散式文件系统的协定,由sun公司开发,于1984年向外公布。功能是通过网络让不同的机器、不同的操作系统能够彼此分享个别的数据,让应用程序在客户端通过网路访问位于服务器磁盘中的数据,是在unix系统间实现磁盘文件共享的一种方法。 NFS的基本原则是“容许不同的客户端及服务端通过一组RPC分享相同的文件系统”,他独立于操作系统,容许不同硬件及操作系统的系统共同进行文件的分享。 NFS在文件传送或信息传送过程中依赖于RPC协议。RPC,远程过程调用(Remote Procedure call)是能使客户端执行其他系统中的一种机制。NFS本身是没有提供信息传输的协议和功能的,但NFS却能让我们通过网络进行资料的分享,这是因为NFS是用了一些其他的传输协议。而这些传输协议用到RPC功能,可以说NFS本身就是RPC的一个程序,或者说NFS也是一个RPC SERVER。所以,只要用到NFS的地方都要启动RPC服务,不论是NFS Server还是NFS Client。这样SERVER和CLIENT才能通过RPC来实现PROGRAM PORT的对应。可以这么理解RPC和NFS的关系:NFS是一个文件系统,而RPC是负责信息的传输。 其中,NFS服务器设定好了分享出来的/home/shares(可自定义)这个目录后,其他的客户端就可以将这个目录挂载到自己系统上的挂载点/mnt/nfs(可自定义),只要在客户端系统中进入/mnt/nfs目录内,就可以看到NFS服务器系统内的/home/shares目录下的所有数据(需配置相应权限),这样/home/shares就像自己系统中的一个分区(但不占用磁盘空间)。用户可以使用cp,cd,mv,rm等磁盘或文件相关的指令进行操作。虽然NFS有属于自己的协议和端口号,但是在传送数据或者其他相关信息时,NFS使用的是远程过程调用RPC协议来协助NFS本身运作。当使用某些服务来进行远程联机的时候,主机的IP地址,服务的端口号及对应到的服务PID等信息都要管理与对应,管理端口的对应与服务相关性的工作就是RPC的任务。 由于NFS支持的功能相当多,而不同的功能都会使用不同的程序来启动,每启动一个功能就会启用一些端口来传输数据,因此,NFS的功能所对应的端口才没有固定住,而是随机取用一些未被使用的小于1024的端口来作为传输使用。单如此一来又造成客户端想要连上服务器的困扰,因为客户端需要知道服务器的端口。 这时我们就需要用远程过程调用RPC服务,RPC最主要的功能是指定每个NFS功能所对应的端口号,并且回报给客户端,让客户端可以连接到正确的端口上去。RPC如何知道每个NFS的端口呢?NFS服务器启动的时候会随机取用数个端口并主动注册到RPC,因此RPC知道每个端口对应的NFS功能,然后RPC又是固定使用port111来监听客户端的需求并回报客户端正确的端口。 总的来说,NFS服务并没有提供数据传递协议,因此,NFS使用RPC来实现网络传输的功能。NFS本身就是一个使用RPC的程序,换句话说,NFS是RPC服务器。当然,不但运行NFS的服务器需要启动RPC的服务,要挂载NFS文件系统的客户端也需要同步启动RPC,这样服务器端与客户端才能由RPC的协议进程端口的对应。
NFS工作流程:
服务端安装 服务端安装需要两个安装包 nfs-utils-:包括基本的NFS命令与监控程序 Portmap-:支持安全NFS RPC服务的连接(linux kernel 2.6.32)中,portmap已经被rpcbind代替了,yum install portmap时安装的是rpcbind。软件包用yum源安装即可。接下来看一下服务端的配置文件和进程的作用。 NFS服务系统进程: NFS服务进程启动说明表格 服务(进程名字) 用途说明 nfsd(rpc.nfsd) rpc.nfsd主要功能就是管理NFS客户端是否能够登陆NFS服务器主机(登陆着id判别) mountd(rpc.mountd) rpc.mountd管理nfs文件系统,当nfs客户端顺利通过rpc.nfsd服务端后,它可以使用NFS服务器提供数据,读取NFS的配置文件/etc/exports来进行文件系统权限比对 rpc.statd 检查文件的一致性 这些进程都可以执行man 进程名 来查看进程的详细功能 NFS共享目录配置文件: 文件路径/etc/exports,内容格式,共享目录 客户端(选项) 共享目录:NFS共享给客户端的目录 客户端:网络中可以访问此目录的主机。多个客户端以空格分隔 选项:设置目录的访问权限,用户映射等,多个选项以逗号隔开 例如: /home/shares 192.168.0.111/24(rw,insecure,sync,all_squash,anonuid=65534,anongid=65534) NFS配置文件路径: NFS常用路径 说明 /etc/exports NFS服务主配置文件,配置NFS具体共享服务的地点,默认内容是空的 /usr/sbin/exports NFS服务的管理命令 exportfs 不重启nfs服务应用更新,相关选项如下: -a 全部挂载或卸载 /etc/exports中的内容 -r 重新读取/etc/exports 中的信息 ,并同步更新/etc/exports、/var/lib/nfs/xtab -u 卸载单一目录(和-a一起使用为卸载所有/etc/exports文件中的目录) -v 在export的时候,将详细的信息输出到屏幕上。
nfsstat 查看NFS的运行状态。 rpcinfo 查看rpc服务注册情况。 相关选项: -p 显示所有的端口与程序信息。 示例: rpcinfo -p localhost #列出本机的RPC注册状况。
showmount 查询nfs共享目录信息,相关选项如下: -a 显示已经于客户端连接上的目录信息 -e IP或者hostname 显示此IP地址分享出来的目录 示例: showmount -e localhost #查询本机nfs共享目录情况 showmount -a localhost #查询本机共享目录连接情况 /usr/sbin/showmount 用来查看客户度那,查看NFS配置及挂载结果的命令 /var/lib/nfs/etab NFS配置文件的完成参数设定的文件
NFS配置参数说明: rw 表示可读写权限。 sync 请求或写入数据时,数据同步写入到NFS Server的硬盘后才返回。 async 写入数据时会先写到内存缓冲区,直到硬盘有空档才会在写入磁盘,这样可以提升写入效率。风险是若服务器宕机或不正常关机,会损失缓冲区中未写入硬盘的数据(解决办法:服务器主板电池或UPS不间断电源)。 all_squash 不管访问NFS Server共享目录的用户身份如何,它的权限都将被压缩为匿名用户,同时它的UID和GID都会变成nfsnobody账号身份,在生产环境中配置NFS的重要技巧: 1)确保所有客户端服务器对NFS共享目录具备相同的用户访问权限,all_squash把所有客户端都压缩成匿名用户(UID相同),就是anonuid,anongid指定的UID和GID相同, 2)所有的客户端和服务器端都需要有一个相同的UID和GID的用户,nfsnodoby(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) ro 表示只有只读权限 以上是挂载时服务端需要配置的文件及命令解析,启动命令: 6版本:service rpcbind start service nfs start 7版本:systemctl start nfs.server systemctl start rpcbind.service 下面是对/etp/sysconfig/nfs 配置文件的解析 /etp/sysconfig/nfs文件参数说明 配置参数 用途说明 LOCKDARG= LOCKD_TCPPORT=32803 RPC监听NFS TCP端口 LOCKD_UDPPORT=32769 RPC监听NFS UDP端口 RQUOTAD_PORT=1001 RQUOTAD端口 RPCNFSDCOUNT=16 要启动NFS Server进程数,默认是8 man rpc.nfsd NFSD_V4_GRACE=90 设置服务器重新引导后客户机回收 NFS 版本 3 锁定(由 NLM 提供)和版本 4 锁定所需的秒数。因此,GRACE_PERIOD 的值可控制 NFS 版本 3 和 NFS 版本 4 的锁定恢复的宽延期长度 NFSD_V4_LEASE=90 设置租赁时间,个人理解(与上面的一起用,在服务端重启时)客户端在服务端重启后写入数据大概要等90秒 RPCMOUNTDOPTS="-N 4" -N 4 即不支持NFS4版本,此行在文件中为注释项 man rpc.mountd MOUNTD_PORT=892 MOUNTD端口 STATDARG="" 参考 man rpc.statd STATD_PORT=662 STATD端口 STATD_OUTGOING_PORT=2020 指定当sm-notify命令发送重启通知时使用的源端口号 STATD_HA_CALLOUT="/usr/local/bin/foo" 参考 man rpc.statd SMNOTIFYARGS="" 参考 man sm-notify RPCIDMAPDARGS="" 参考man rpc.idmapd RPCGSSDARGS="" rpc.gssd的参数配置,主要用来安全配置例如keytab5.参考 man rpc.gssd GSS_USE_PROXY="yes" 启用gss代理 man gssproxy-mech BLKMAPDARGS="" 参考man blkmapd /etc/mtab与/etc/fstab 区别 /etc/fstab作用: 记录了计算机上硬盘分区的相关信息,启动linux的时候,检查分区的fsck命令,和挂载分区的mount命令,都需要fstab中的信息,来正确的检查和挂载硬盘。 /etc/mtab作用 记载的是现在系统已经装载的文件系统,包括操作系统建立的虚拟文件等;而/etc/fstab是系统装备装载的。每当mount挂载分区,umount卸载分区,都会动态更新mtab,mtab总是保持着当前系统中已挂载的分区信息,fidsk,df这类程序,必须要读取/etc/mtab文件,才能获得当前系统中分区挂载的情况。当然我们自己还可以通过读取/proc/mount也可以获得当前挂载信息。 需要注意的是,若想要系统启动自动挂载NFS共享目录,需要将共享目录配置到/etc/fstab文件中。(确保服务端,客户端服务启动) 简单配置: 服务端: 编辑/etc/exportfs /home/appwar 10.128.150.0/24(rw,async,no_root_squash) 重启服务,或者使exportfs文件生效,前文已说明如何使配置生效。 客户端: 执行mount命令,挂载共享目录即可(最后附mount命令详解) mount -t nfs -o rw,hard,intr 10.128.150.123:/home/appwar /mnt/jpb 查看挂载即可: df -k 安全NFS配置:需要服务器、客户机都需要加入LDAP+Kerberos认证 参考:https://blog.csdn.net/jsut_rick/article/details/78207638 Mount命令详解: 此处列出mount挂载与nfs相关参数: mount [-t vfstype] [-o options] device dir (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。
采用hard mount,NFS客户机会不断地尝试与NFS服务器连接(在后台一般不会给出任何提示信息),直到挂载上为止。
采用soft mount,会在前台尝试与NFS服务器连接,当收到错误信息后终止mount尝试,并给出相关信息。 10.128.150.123:/home/appwar /mnt/jpb nfs hard,intr,defaults 0 0 umount 命令: 语法:umount [-ahnrvV] <文件系统类型>[文件系统] -a 卸除/etc/mtab中记录的所有文件系统 -h 显示帮助 -n 卸除时不要将信息存入/etc/mtab文件中。 -r 若无法成功卸除,则尝试以只读的方式重新挂入文件系统。 -t<文件系统类型> 仅卸除选项中所指定的文件系统。 -v 执行时显示详细的信息。 -V 显示版本信息。 [文件系统] 除了直接指定文件系统外,也可以用设备名称或挂入点来表示文件系统 不常见问题记录: 1.server not responding,still retrying,timedout 原因,服务端进程中断,或者防火墙等问题连接不上,客户端会一直重试,如果是防火墙端口等问题,参考前文,开放端口,配置防火墙可达到解决效果。如果不是防火墙问题,如服务端进程中断,即便终止nfs客户端进程依然无法解决问题,可尝试mount命令直接挂载到新的服务端(此种方法经过测试),或者mount -o remount 命令(未测试)。