NFS服务的配置与应用
1. NFS是由sun公司在1984年开发的,它本身并没有数据传输的功能,是通过远程过程调用的协议来实现的,所以可以将nfs服务器看成是rpc服务器, 而nfs的客户端可以看成是rpc的客户端。
使用nfs至少要启动一下3个系统守护进程:1.rpc.nfsd nfs是守护进程,管理客户端是否能登陆服务器。2.rpc.mountd 是rpc安装守护进程,管理nfs系统,系统登陆成功后还得通过这个进程读取/etc/exports文件来对比客户端的权限。3.portmap 进行端口映射工作。
几乎所有的linux的版本都默认的安装了nfs服务,但是由于nfs服务需要nfs-utils和portmap两个软件包,所以最好用rpm -q nfs-utils portmap命令查看一下。如果没安装请使用rpm -ivh nfs-utils-??? portmap-??? 命令安装。
要检查nfs的服务是否正常运行,可使用rpcinfo -p命令检查是否正常运行,如果正常可以看到portmapper、nfs、mountd等守护进程的条目,如下面的图,如果发现没有这些进程条目,可用 service nfs restart命令重起服务就可以了。
2. nfs服务的配置相对比较简单只须修改/etc/exports文件,然后启动就可以了。在exports文件中可以定义nfs系统的输出目录即共享目 录、访问权限和允许访问的主目录等参数。改文件默认为空,没有设置任何共享目录,是基于安全考虑的。
exports文件中每一行提供了一个共享目录的设置。其格式如下:输出目录 【客户端1(选项1,...)(选项2,...)】 【客户端2(选项1,...)(选项2,...)】除输出目录是必选的其余都是可选的。
客户端是指网络中谁可以访问这个nfs的共享目录,例子如下:192.168.1.8指定ip地址的主机。192.168.1.0/24或 192.168.1.*指定子网中的所有主机。www.jackiesr.com指 定域名的主机。*.jackiesr.com 指定域中的所有主机。 *所有主机。
选项用来设置输出目录的访问权限,用户映射等。exports文件的配置选项比较多,一半可以分为一下3类。
1.访问权限选项 ro只读 rw可读可写。
2.用户映射选项 在默认情况下客户端访问nfs服务器时,若远端访问的用户时root时,则nfs服务器会把它映射成本地的匿名用户nfsnobody,并将它所属的组也 映射成nfsnobody组,有利于提高安全性。 all_squash将远程访问的所有普通用户和组都映射成为匿名用户和组,一般为nfsnobody。 no_all_squash 不将远程访问的所有普通用户和组都映射成为匿名用户和组(默认设置)。root_squash将root用户及所属组都映射成匿名用户和用户组。 no_root_squash不将root用户及所属组都映射成匿名用户和用户组。anonuid=xxx将远程访问的用户都映射成匿名用户,并指定用户 帐号为本地用户帐号UID=XXX。anongid=xxx将远程访问的用户组都映射成匿名用户组,并指定用户组帐号为本地用户组帐号GID=XXX。
3.其他选项
其他选项可以用于对输出目录进行更安全的控制。secure 限制客户端只能从小于1024的tcp/ip端口连接nfs服务器(默认设置)。insecure允许客户端从大于1024的tcp/ip端口连接nfs 服务器。sync将数据同步写入内存缓冲区和磁盘中,虽然这样效率很低但是可以保证数据的一致性。async将数据先保存到内存缓冲区中,必要时才写入磁 盘 wdelay检查是否有相关的写操作,如果有则将这些写操作一起执行,这样可以提高效率,默认设置。no_wdelay若有写操作立即执行,应与sync 配合使用。subtree_check若输出目录是一个子目录,则nfs服务器将检查其父目录的权限(默认设置)。no_subtree_check即使 输出目录是个子目录,nfs服务器也不检查其父目录的权限,这样可以提高效率。
3.每当的修改了/etc/exports文件的内容后,实际上不需要重新启动nfs服务,而直接使用命令exports就可以生效。它的命令格式如 下:exports 【选项】 选项有一下几个
-a 输出在/etc/exports文件中所设置的所有目录
-r 重新读取/etc/exports文件中的设置,并使设置立即生效,而不重新启动服务。
-u 停止输出某一目录
-v 在输出目录时将目录显示到屏幕上。
介绍两个长用的组合命令:
exportfs -rv 重新输出共享目录
exportfs -auv 停止当前主机中服务器的所有共享目录输出。
启动和停止nfs服务
1.启动nfs服务 为了使nfs能正常工作,需要启动portmap和nfs这两个服务,并且portmap一定要先于nfs启动 /etc/init.d/portmap start /etc/init.d/nfs start
2.停止nfs服务
/etc/init.d/nfs stop /etc/init.d/portmap stop
3.重新启动nfs服务
/etc/init.d/nfs restart
4.检查portmap和nfs的状态
/etc/init.d/portmap status
/etc/init.d/nfs status
5.设置自动启动nfs服务
chkconfig --level 35 portmap on
chkconfig --level 35 nfs on
当然也可以用ntsysv找到nfs和portmap把前面加上*号即可。
测试nfs服务
1.检查输出目录所使用的选项
即使在/etc/exports下设置了一两个选项,但是在真正输出目录时还有很多的默认选项,所以有必要查看/var/lib/nfs/etab文件, 来看看真正的选项。
注:在这个文件中会看到anonuid=-2,anongid=-2,实际上是65536-2=65534,也就是说匿名用户帐户及所属用户组帐户的id 为UID=65534,GID=65534。对照/etc/passwd和/etc/group文件可以知道 就是nfsnobody
2.使用showmount命令测试nfs服务器的输出目录状态
showmount 【选项】 nfs服务器名称或地址
-a 显示指定的nfs服务器的所有客户端主机及其所连接的目录。
-d 显示指定的nfs服务器中以被客户端连接的所有输出目录。
-e 显示指定的nfs服务器上所有输出的共享目录。
NFS客户端的使用
1.先检查nfs服务器的信息
showmount -e ip
注:出错的可能原因在服务器的2个进程没有启动或是被防火墙给过滤掉了,可以service iptables stop先关闭防火墙。
2.连接NFS服务器
mount -t nfs 服务器名或ip地址:输出目录 本地挂载
3.卸载NFS服务器
umount 本地挂载点
注:如果有客户端还在使用nfs服务器时要关机,应先把portmap和nfs两个服务给关闭,否则要等待很久才能关机。如果无法正常关掉可先用命令 netstat -utlp找出他们的pid,然后使用kill命令杀死。 当然还可以使用exports -auv命令将当前的主机中nfs服务器的所有输出目录停止掉,再关机。
4.启动时自动连接nfs
vi /etc/fstab
格式如下: nfs服务器名或ip地址:输出目录 本地挂载目录 nfs default 0 0
4. 我的nfs的又一简单配置
1.检查nfs工具包是否安装 rpm -qa | nfs-utils
2.如果没有安装请用 mount命令挂载光驱 rh9第一个光盘 找nfs-utils软件包
3.用rpm -ivh命令安装
4.卸载光驱
5.vi /etc/exports 写入如:/tmp *(rw) 具体选项请参看http://www.linuxdiyf.com/bbs/thread-36719-1-1.html
6.启动nfs服务器守护进程/etc/rc.d/init.d/nfs start
7.使用ps -C nfsd查看启动的nfsd进程
8.在客户机或服务器可以使用 showmount -e 192.168.8.5(nfs服务器的ip)命令查看被导出的资源。
9.然后就可以上客户端去挂载了 mount 192.168.8.5:/nfs /mnt
10.cd到/mnt下ls就可以看nfs服务器的内容了
****注:要特别注意linux文件的权限问题。*******
AIX
在服务器端
1,启动portmap和nfs守护进程
---startsrc -s portmap
---startsrc -g nfs
2,mount /cdrom
3,将/cdrom加入Export List中
---smitty mknfsexp
---Enter the PATHNAME of the directory to export (for example, /cdrom).
---Change the MODE of export directory to read-only.
---Enter the HOSTS & NETGROUPS allowed client access.
---Enter HOSTS allowed root access.
---回车执行
4,showmount -e观测
在客户端
1,启动portmap和nfs守护进程
---startsrc -s portmap
---startsrc -g nfs
2,mkdir /cdrom
3,Enter smitty mknfsmnt.
Enter the PATHNAME of the mount point (for example, /cdrom).
Enter the PATHNAME of the remote directory (for example, /cdrom).
Enter the HOST where the remote directory resides.
Change the MODE for this NFS file system to read-only.
回车执行
SOL
1、理解nfs服务器和客户端功能。
nfs是sun公司来建立来使用tcp/ip协议以及sun的远程调用和外部数据表示规范的产品。nfs的使用非常方便,也比较可靠。他具有在不同操作系 统之间共享文件的能力。
nfs服务器可以使用nfs来让其他远程机器共享它的本地资源。nfs客户机是访问nfs服务器的共享资源的机器。其实在实际工作中,一台主机即可以是 nfs服务器,也可以是nfs客户机。他们可以互相共享和访问。
只要你能理解nfs服务器和nfs客户机之间的不同。剩下的就很easy了。
2、 nfs服务器和nfs客户机区别。
2、1 solaris使用分布式文件系统或dfs命令公享资源。公享资源可以手动和自动设置。
nfs服务器运行两个守侯进程:mountd 和 nfsd。
用到的文件是:
/etc/rc3.d/S15nfs.server
/etc/dfs/dfstab
/etc/dfs/sharetab
/etc/rmtab
nfs服务器使用命令是:share unshare shareall unshareall
nfs客户机上运行的守侯进程是:statd 和 lockd。
用到的文件是:
/etc/vfstab
/etc/mnttab
nfs客户机使用命令是:mount umount mountall umountall
2、2 nfs服务器设置
nfs 服务器需要运行两个守侯进程mountd和nfsd来工作。当nfs客户机试图访问一个远程的nfs服务器资源。nfs客户机通过mount命令请求与 nfs服务器的mountd守侯进程进行连接。当nfs服务器响应客户机时候,返回给可户机一个信息。客户机把这个信息写到本地的/etc/mnttab 文件中。这个信息是服务器中共享文件和目录的信息。它是资源信息的编码:磁盘设备号、节点生成号、节点号等。这个是唯一的。
一旦可户机得到请求信息,nfs服务器上的mountd进程就会在服务器本地的/etc/rmtab文件中添加一条信息。这是为了保持对当前加载可户机上 文件的跟踪。这个文件为每一个被加载资源添加一个条目,格式是:
remote hostname: local filename name
注意:mountd每一次重新启动和可户机发一个卸载请求,都会更新服务器的/etc/rmtab文件中的旧条目。
2、3 共享设置命令。
明白了以上的道理,下面说具体的操作了。nfs服务器使用/usr/sbin/share命令为客户机共享资源。
命令详解:
# share ---显示所有可以安装的资源,不管它是否已经被安装。
# share [ -F filesystem ] [ -o options ] [-d description ] pathname-to-resource
---指定共享文件。
* -F file system type 指定被公享的文件系统类型。
* -o options 指定客户对资源访问的类型。
* -d description 功享资源的简单描述。当你share命令不带任何参数运行,他就会被显示。
* pathname-to-resource 在服务器上共享的资源名字。
------------------------------------------------------
*-o 指定了允许客户访问共享资源的用户也权限。具体如下:
rw 表示用户可读/写,是默认植。
rw=client1:client2 指定用户可以有读/写权限。可以有很多用户,用冒号分隔。
ro 表示只读。
ro=client1:client2 指定用户client1和client2只读。client1可以是用户名,也可以是ip地址,或者一个网段。例 如:ro=@202.99.88.0/24
root=client:client2 指定client1和client2上的root用户对共享资源有超级用户的权限。但是,他的优先级小于nfs服务器的本地权限。
例如:用户peng有个目录/exprot/home/games要共享。
# share -F nfs -o rw=lnx3000:race , ro=@202.88.99.0/24:sune450 ,root=mmmmn -d "i love MM !" /export/home/peng/games
运 行结果:共享/exprot/home/peng/games目录,名字是lnx3000和race的两台主机有读/写权限;202.88.99.0这个 c类网的机器和sun450这个主机只有读的权限;mmmmn这台主机的root用户可以对共享资源有超级用户访问权限。但是声名一点,要是我给共享目录 /exprot/home/peng/games目录只读,mmmmn的root权限也没有用,只能只读。因为服务器本地权限大于任何share的权 限。。
取消share资源。
# unshare [ -F nfs ] path-to-resource
* -F nfs 指定系统类型,默认。
* path-to-resource 指定共享路径。
例如:
# unshare /export/home/peng/games
取消这个共享资源了。
2、4 开机自动共享资源。
以上的命令方法,在机器重新启动的时候,设置消失。如何保留和开机自动启动nfs共享。我们可以用/etc/dfs/dfstab文件来实现自动共享文 件。只要主机启动进入运行级别3,nfs资源共享自动启动。
1、编辑/etc/dfs/dfstab文件,添加:
share [ -F filesystem ] [ -o options ] [-d description ] pathname-to-resource
-----这个和命令行是一样的。。。
2、# /etc/init.d/nfs.server start
这样就ok了。
3、手工快速命令。
# shareall --共享所有列在/etc/dfs/dfstab中的共享资源。
# unshareall --取消所有列在/etc/dfs/dfstab中的共享资源。
2、5 资源查看。
# dfshares
用以查看服务器的共享资源 。输入格式如下:
resource server access transprot
* resource 可被远程调用的资源的主机和路径名。
* server 指定资源的系统名称。
* access 服务器指定的权限,默认是rw,显示为“-”。
* transport 指定共享资源的端口。
# dfmounts命令
显示服务器上查看共享资源被利用的状况,输出格式如下:
RESOURCE SERVER PATHNAME CLIENTS
* resource 共享资料名称。
* server pathname 共享资料目录。
* client 连接的客户端。
# nfsstat
看nfs的全部状态
3、nfs客户机设置。
安装好nfs服务器后,就可以用客户端使用共享资料了。首先要检测nfs服务器,然后安装。
3、1 检测nfs服务器。
# showmount [ -ade ] <hostname>
* -a 显示已经已经使用的资源和来自哪个nfs服务器。
* -d 显示已经被远程安装的资源。
* -e 显示可以被安装的可以资源。一般用-e来查看远程主机的可以资源。
3、2 建立共享。
# mount [ -F nfs ] [ -o options ] path-to-resource path-to-local-mount-point
* -F nfs 指定共享文件系统,默认的。没必要指定。
* -o options 指定选项,例如权限。默认rw,可读/写。也可以ro--只读。
* path-to-rescource 指定nfs服务器的主机名和共享资源路径。
* path-to-local-mount-point 指定共享资源在本地的mount点。
例如:
# mkdir /export/home/games
# mount peng:/export/home/peng/games /exprot/home/games
共享远程主机peng的/export/home/peng/games目录,可读写,挂接在本地的/exprot/home/games目录上。
3、3取消共享。
# umount [-F nfs] remote-path-to-resource path-to-local-mount-point
* -F nfs 默认的文件系统。
* remote-path-to-resource 远程主机和共享目录路径,主机和共享目录路径用冒号分隔。
* path-to-local-mount-point 本地主机挂点。
例如:
# umount peng:/export/home/peng/games /export/home/games
取消远程主机peng上的/exprot/home/peng/games这个目录的在本地/export/home/games上的共享。
3、4 系统开机自动共享。
修改/etc/vfstab文件,格式如下:
device to mount device to fsck mount point FS type fsck pass mount at boot mount options
* device to mount 指定远程服务器名和共享路径。远程服务器名和共享路径用冒号分开。
* device to fsck 这个是空的。从来不从客户机进行文件检测。
* mount point 指定本地的mount点。这个目录必须是已经存在的。
* FS type 对于nfs资源系统来说,当然是nfs了。
* fsck pass 这个也是空的。表示不从客户机进行文件系统检测。
* mount at boot 选择yes or no,yes就是启动时自动安装。
* mount options 用逗号分隔的mount命令的列表。
例如:
# vi /etc/vfstab 添加:
peng:/export/home/peng/games - /export/home/games nfs - yes soft,bg
表示开机自动把远程主机peng的/export/home/peng/games目录自动挂到本机的/export/home/games下。soft 选项是目录不能安装,产生一个错误。bg选项,系统启动过程中安装在后台。
关于mount options的参数,请用 man mount 自己看看吧。
3、5 手工调试命令。
# mountall
不带任何参数,安装所有列在/etc/vfstab文件中mount at boot中为yes的资源。
# mountall -r 只影响远程文件
# mountall -l 只影响本地文件
# umountall
不带任何参数,谢载已经安装的资源。不包括/ 、/proc、/usr、/var。另外,系统忙,也可能不会卸载。
# umountall -r 只影响远程文件
# umountall -l 只影响本地文件
小节:
到这里我想应该没有什么问题了。
大家只要注意一下客户端和服务器端的区分。
nfs服务器端运行守侯进程mound、nfsd
nfs服务器端使用文件/etc/dfs/dfstab、/etc/dfs/sharetab、/etc/rmtab
nfs服务器使用命令是:share unshare shareall unshareall
nfs客户端运行守侯进程statd、lockd。
用到的文件是/etc/vfstab、/etc/mnttab
nfs客户机使用命令是:mount umount mountall umountall
知道这些,就ok了。
HP UNIX
一般按照如下步骤来配置NFS:
1. Meet pre-NFS configuration requirements on Client and Server
2. Meet NFS software requirements on Client and Server
3. Start Server daemons
4. Start Client daemons
5. Configure NFS on Server
6. Configure NFS on Client
7. Verify Server configuration
8. Verify Client configuration
下面,就详细讲解以上步骤的具体配置方法。
1. Meet pre-NFS configuration requirements on Client and Server
(1)网卡的状态用ioscan -fnC lan查到的为CLAIMED
(2)hostname的配置
(3)IP地址和子网掩码的配置
(4)route的配置
(5)/etc/hosts文件的配置,将IP地址和hostname对应起来
2. Meet NFS software requirements on Client and Server
(1)NFS fileset loaded?
用swlist -l product | grep -i nfs命令来查看相关的NFS软件是否安装了,如果没有安装,则使用swinstall命令安装相应的软件。
(2)Drivers/subsystems in kernel?
可以使用“sam”来进行确认。
3. Start Server daemons
与NFS server有关的后台进程有如下几个:
(1)portmap
Dynamic port assignment daemon used by NFS
(2)nfsd
NFS server data daemons that are usually started 4 at a time
(3)mountd
NFS server that responds to client mount requests
可以按照如下步骤来启动nfsd和mountd进程:
(1)配置/etc/rc.config.d/nfsconf,配置以下几个信息:
NFS_SERVER=1 #(start nfsd)
NUM_NFSD=4 #(start four of them)
MOUNTD_OPTIONS="" #(no mountd options shown here)
START_MOUNTD=1 #(start mountd)
(2)配置完以上信息以后,重新启动将激活以上的修改配置
说明:每次系统启动的时候,portmap会被/sbin/rc2.d/S400nfs.core自动启动。
4. Start Client daemons
与NFS client有关的后台进程有如下几个:
(1)portmap
Dynamic port assignment daemon, used by NFS
(2)bion
NFS client data daemons that are usually started 4 at a time
(3)automount
Optional NFS client. Dynamic mounting/unmounting daemon
可以按照如下方法来启动biod和automount进程:
(1)编辑/etc/rc.config.d/nfsconf, 配置以下几个信息:
NFS_CLIENT=1 #(start biod)
NUM_NFSIOD=4 #(start four of them)
AUTOMOUNT=1 #(start automount)
AUTO_MASTER="/etc/auto_master" #(automount configuration file)
AUTO_OPTIONS="-f $AUTO_MASTER" #(use the file above)
(2)重新启动系统以后,以上配置将会生效
5. Configure NFS on Server
(1)确认第三步的配置已经修改完成,而且相应的后台进程已经启动
(2)确认要exported to clients的文件系统
(3)确认exported to clients的文件系统有权限被client access
(4)Optional: Determine if there is any logical grouping of clients that could make use of a "netgroup" name. Referring to this "netgroup" name in configuration files would automatically include all clients defined as a part of the "netgroup".
看看如下例子:
#vi /etc/netgroup
examplegroup1 (host_a,,) (host_b,,) (host_x,,)
In this example, referring to the "netgroup" name examplegroup1 in a configuration file automatically means host_a, host_b, and host_x.
(5)Using the decisions made in steps 2 & 3 above, create the export configuration, for example:
#vi /etc/exports
/opt/app1
/usr/share host_c host_d examplegroup1
In this example, we are exporting 2 file systems: /opt/app1 and /usr/share. Since there no hostname after /opt/app1, we are exporting them to everyone (any system can mount or import them). Since we have names following /usr/share, we are restricting the systems who can mount or import /usr/share to host_c, host_d and all clients who are a part of "netgroup"(examplegroup1 (host_a, host_b, and host_x)).
(6)If the NFS server daemons weren't running in step 1, reboot the system. If they are already running, type:
#exportfs -a
NOTE: Any time you modify /etc/exports after this step, use the -u option with exportfs to unexport the filesystem(s) whose entry was modified and then repeat this step.
6. Configure NFS on Client
(1)确认第四步的配置已经修改完成,而且相应的后台进程已经启动,可以用ps -ef命令来查看portmap, nfsd, mountd进程
(2)用如下命令来确认server的配置:
#exportfs
#showmount -e host_a (在这里,host_a是server的hostname)
#more /etc/netgroup
7. Verify Client configuration
(1)Verify that NFS client daemons are running by typing "ps -ef" and looking for the following processes:
a. portmap
b. biod (Multiple occurences running)
c. automount (optional on-demand mounts only)
(2)See what is currently mounted by typing "mount"
(3)See what is supposed to be mountd by looking at:
a. /etc/fstab
b. /etc/auto_master (optional on-demand mounts only)
SAMPLE
HP
#192.168.65.67:/software/hp-ia64 /install nfs ro,soft 0 0
#192.168.65.67:/software/UFSpoint /UFSpoint nfs ro,soft 0 0
SOL
192.168.65.67:/software/Solaris - /install nfs - yes intr,bg,soft,ro
192.168.65.67:/software/UFSpoint - /UFSpoint nfs - yes intr,bg,soft,ro
LNX
192.168.65.67:/software/Linux /install nfs rsize=8192,wsize=8192,timeo=14,intr,soft
192.168.65.67:/software/UFSpoint /UFSpoint nfs rsize=8192,wsize=8192,timeo=14,intr,soft
AIX
/tsi:
dev = /home/adasdk/tsi
vfs = nfs
mount = true
nodename = 192.168.65.72
options = ro,soft