您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 管理学资料 > 第8章网络文件系统NFS
Linux操作系统第8章网络文件系统NFS8.1NFS基本原理8.2配置NFS服务器8.3配置NFS客户8.4NFS的性能、安全和故障排除习题Linux操作系统8.1NFS基本原理8.1.1什么是NFS(NetworkFileSystem)在Windows主机之间可以通过共享文件夹来实现存储远程主机上的文件,而在Linux系统间通过网络文件系统(NFS)可以实现类似的功能。然而NFS和Windows的共享还是有差别的,它和Windows2000Server的分布式文件系统更为类似。我们先来看一个例子:Linux主机A有一个目录/test,我们可以先把它导出(类似把它共享出来),然后我们在Linux主机B上把A:/test安装(挂接)到安装点/mnt/nfs下,这个挂接和挂接本地磁盘一样。Linux操作系统这样在主机B上的用户就可以使用/mnt/nfs下的文件,而实际上用户使用的是主机A上的目录/test。也就是说,用户可以以访问本地文件的方式访问远程主机上的文件。NFS由SUN公司开发,它最终被IETF所接受,纳入RFC成为一种文件服务标准,是分布式计算机系统的一个组成部分。网络文件系统有以下优点:Linux操作系统(1)被所有用户访问的数据可以存放在一台中央的主机上,其他不同主机上的用户可以通过NFS访问同一中央主机上的数据;(2)客户访问远程主机上的文件是透明的,和访问本地主机上的文件是一样的;(3)远程主机上文件的物理位置发生变化(如从一台主机移动到另一主机上)也不会影响客户访问方式的变化。Linux操作系统8.1.2NFS的工作原理NFS是基于客户/服务器模式的。NFS服务器是输出一组文件的计算机,而客户是访问文件的计算机。客户和服务器通过远程过程调用(RPC,RemoteProcedureCall)通信,当客户主机上的应用程序访问远程文件时,客户主机内核向远程服务器发送一个请求,客户进程被阻塞,等待服务器应答,而服务器一直处于等待状态,如果接收到客户请求,就处理请求并将结果返回客户机。NFS服务器上的目录如果可被远程用户访问,就称为“导出”(export);客户主机访问服务器导出目录的过程称为“安装”(mount),有时也称“挂接”或“导入”。NFS由许多组件共同协作完成,如图8-1所示。Linux操作系统/etc/exportsstatdportmapmountdrquotadRPClockedNFS服务器rpciodNFS服务器(knfsd)XDRRPClockedrpciodNFS客户(knfs)XDRstatd/etc/fstabNFS客户机网络内核级内核级用户级用户级图8-1NFS组件Linux操作系统XDR(外部数据表示):在异构机器组成的网络上交换数据。RPC协议:负责定义客户机和服务器之间的信息格式,NFS请求是以RPC包的形式发送的。locked:RPC锁监控程序,实现NFS锁管理器(NLM,NFSLockManager)协议,NLM协议支持多个客户通过NFS一致性地锁定文件。Linux操作系统rpciod:NFSI/O监控程序。knfsd:是NFS系统的核心,监听远程主机的RPC请求、根据NFS协议进行解释,它用RPC将响应返回客户机,并与NFS服务器上运行的其他组件通信如rpciod、rpc.locked和rpc.statd。statd:NFS状态监控程序,利用网络状态监视协议(NSM)维护NFS锁的状态。portmap:将RPC程序号与运行服务的实际端口相对应。Linux操作系统mountd:处理客户机的mount请求。rquotad:提供NFS系统中用户的配额信息。由于NFS有明确的服务器和客户角色之分,因此NFS的配置包括两个部分:NFS服务器的配置和NFS客户机的配置。Linux操作系统8.2配置NFS服务器NFS服务器的配置步骤如下:(1)安装NFS软件包。(2)在/etc/exports文件中配置NFS服务器上要导出的文件系统或目录。(3)启动NFS服务。(4)导出/etc/exports中配置的文件系统或目录。Linux操作系统8.2.1安装NFS要使用NFS服务器或安装NFS服务软件包,可以用红旗3.0版的CD-ROM中的目录/Redflag/RPMS下的软件包“nfs-utils-0.3.1-8.i386.rpm”。安装之前请用以下命令检查该软件包是否已经安装:[root@redflag/root]#rpm–qa|grepnfs-utilsnfs-utils-0.3.1-8以上命令表明软件包已经安装,如果没有安装则用以下命令安装软件包(当然要先把CD-ROMmount上)。Linux操作系统[root@redflag/root]#mount/dev/cdrom[root@redflag/root]#cd/mnt/cdrom/RedFlag/RPMS[root@redflag/root]#rpm-ivhnfs-utils-0.3.1-8.i386.rpmLinux操作系统8.2.2配置导出文件:/etc/exports/etc/exports文件是用来告诉Linux系统哪些文件系统或目录将为NFS客户导出,这个文件是一个文本文件,通常由管理员编辑。文件中以“#”号开头的行被忽略,长行可以用“\”分解为多行。语法如下:dir_namehost1(opt1,opt2,……)host2(opt1,opt2,……)\host3(opt2,……)Linux操作系统【实例8.1】/homelinux2.wlj.com(ro)/test*(rw)在/etc/exports文件中的每个项目以目录名开始,目录名dir_name就是要导出给NFS客户使用的目录,目录可以是某一文件系统的根,也可以不是文件系统的根。目录名之后可以列出多个或零个用空格分隔开的导出指定项。每个导出指定项由两个可选部分组成:主机指定部分(host)和导出选项部分(opt),这两个部分都是可选的。Linux操作系统如果只列出主机指定部分而没有列出导出选项部分,则导出选项缺省为“ro”——只读,即NFS客户只能读取这个目录的文件而不能写入目录中的文件。如果只指定导出选项而没有指定主机,则主机缺省为所有主机。如果目录后没有指定任何导出项,则以只读选项导出目录给所有主机,相当于*(ro)。Linux操作系统主机部分非常灵活,可以指定单个主机,也可以指定多个主机。描述主机的方法有四种。(1)单个主机:可以列出短名、完全限定名或IP地址,如:linux2或linux2.wlj.com或192.168.0.1(2)主机网络:指定特定一个子网或几个子网上的主机,用address/netmask语法指定,如:192.168.0.0/255.255.255.0表明导出文件系统或目录给192.168.0.0子网上的所有主机使用。Linux操作系统(3)通配符主机:可以使用“?”、“*”对主机名进行匹配,如:“*.wlj.com”可以匹配wlj.com域中的所有主机。但是要注意的是通配符不匹配主机名中的“.”,因此“*.wlj.com”不匹配server1.test.wlj.com。Linux操作系统(4)网组:可以列出NFS网组映射中定义的整组主机,网组以“@”开头,例如:@linuxgrp。导出选项列表用“.”分隔开,选项之间也不能包含空格。表8-1列出了导出选项的含义,导出选项分为性能选项和安全选项两种类型。Linux操作系统表8-1NFS导出选项选项是否缺省类型含义async是性能异步将数据写入磁盘(不是在客户机请求时写入)sync否性能客户机执行写操作时立即将数据写入磁盘wdelay是性能延迟同步写入,实现累积no_wdelay否性能不延迟同步写入ro是安全允许对这个文件系统进行只读操作rw否安全允许对这个文件系统进行读写操作Linux操作系统root_squash是安全将UID=0的用户(root)映射为用户nobodyno_root_squash否安全不将UID=0的用户(root)映射为用户nobodyall_squash否安全将所有的用户映射为用户nobodyno_all_squash是安全不将所有的用户映射为用户nobodyanonuid=N-2安全将匿名账户nobody的UID设为Nanongid=N-2安全将匿名账户nobody的GID设为Nsecure是安全允许1024以下端口产生的请求insecure否安全允许1024以上端口产生的请求subtree_check是安全认证文件句柄属于整个文件系统的导出子树no_subtree_check否安全不认证文件句柄属于整个文件系统的导出子树hide是安全不导出这个目录下挂接的其他文件系统nohide否安全导出这个目录下挂接的其他文件系统Linux操作系统【实例8.2】/homelinux2.wlj.com(ro)将使得linux2.wlj.com主机上的用户对/home目录有只读权限。【实例8.3】/test*.wlj.com(rw)将使得wlj.com域上的主机上的用户对/test目录有读写权限。Linux操作系统导出目录时将面临一个问题:NFS服务器用户和NFS客户机上用户的映射。假如在NFS服务器上导出/test目录,该目录由NFS服务器上的用户user1和user2拥有,则NFS客户机上要有同样的用户user1和user2才能使用导出的目录。另外,我们可能不希望客户机上的root用户拥有NFS服务器上的root用户对/test目录的权限。这时我们可以使用导出选项控制NFS客户机和NFS服务器的用户映射,从而达到控制权限的目的。“root_squash”选项(root用户挤压)是默认选项,该选项的作用是将客户机上的root用户映射到NFS服务器上的nobody用户,这时NFS客户机上的root用户对NFS服务器上导出的目录的权限只具有服务器上nobody用户的权限。Linux操作系统【实例8.4】/testlinux2.wlj.com(anonuid=500,anongid=600)本例中客户机上的root用户映射到服务器上UID=500的用户,同时组GID=600,意味着客户机上的root用户具有服务器上UID=500的用户和GID=600的组的权限。“all_squash”和“no_all_squash”选项的含义和“root_squash”、“no_root_squash”选项的含义类似。只不过“all_squash”是将客户机上的所有用户映射到服务器上的nobody用户,如果要映射成服务器上的其他用户,同样要使用anonuid和anongid选项。“no_all_squash”是缺省选项,意味着缺省时客户机上的用户要和服务器上的用户一一对应,才能访问目录。Linux操作系统【实例8.5】/testlinux2.wlj.com(all_squash,anonuid=400,anongid=700)本例中把客户机上的所有用户(含root用户)映射到服务器上UID=400的用户,GID=700的组。Linux操作系统8.2.3激活NFSNFS服务的启动和停止是通过/etc/rc.d/init.d目录下的脚本nfs来实现的,执行该脚本必须用root用户登录。【实例8.6】/etc/rc.d/init.d/nfsstartStartingNFSservices:[OK]StartingNFSquotas:[OK]StartingNFSmountd:[OK]StartingNFSdaemon:[OK]Linux操作系统【实例8.7】/etc/rc.d/init.d/nfsstopShuttingdownNFSmountd:[OK]ShuttingdownNFSdaemon:[OK]ShuttingdownNFSservices:[OK]ShuttingdownNFSquotas:[OK]【提示】也可以用servicenfsstart来启动NFS服务。如果想让L
本文标题:第8章网络文件系统NFS
链接地址:https://www.777doc.com/doc-3650578 .html