分类:
2004-12-06 01:04:36
NFS,即网络文件系统,主要用UNIX系统之间的文件共享,NFS由SUN微系统公司开发,它是基于RPC服务的。属于C/S模式,一个NFS SERVER同时也是一个NFS CLIENT。
#####################################################################
一、NFS 的几个重要配置文件的作用,如下图:
###############################################################################
1、/etc/dfs/dfstab的内容
# cat /etc/dfs/dfstab
# Place share(1M) commands here for automatic execution
# on entering init state 3.
#
# Issue the command ’/etc/init.d/nfs.server start’ to run the NFS
# daemon processes and the share commands, after adding the very
# first entry to this file.
#
# share [-F fstype] [ -o options] [-d "
[resource]
# .e.g,
# share -F nfs -o rw=engineering -d "home dirs" /export/home2
也就是说,你想要NFS server 共享什么必须先手工编辑这个表,在里面加入想要共享的文件目录的记录。比如想要共享 server1主机上的/data 的文件夹,就要写入如下内容:
“share –F nfs -o ro /data”
“-F”表示指定共享的文件类型为NFS,“-o”带参数 “ro”表示只读权限 “rw”表示读写权限。也可以直接对某台主机或某个用户指定权限,比如:
“share -F nfs -o ro,rw=server2 /data”
这就表示 /data文件夹只对名为“server2”的主机提供读写权限,而对其他的网络上的计算机提供只读权限。
“share -F nfs -o root=client2 /data”
表示 对于/data 被名为client2的主机上的root用户挂接的时候该用户对/data具有root的访问权限。
##########################################################2、/etc/dfs/sharetab
这个表主要是对 share命令得到的结果作保存,换句话说该表显示了本地共享出来的的NFS资源,千万不要手工编辑这个表。
3、/etc/dfs/fstypes
这个表列出了本地的DFS(分布式文件系统)的类型,如果在提供一个NFS共享资源的时候不带 –F参数,则系统会默认把/etc/dfs/fstypes中第一个条目的DFS类型作为共享的文件类型。
一个默认的fstypes的内容是:
# cat /etc/dfs/fstypes
nfs NFS Utilities
autofs AUTOFS Utilities
cachefs CACHEFS Utilities
##########################################################4、/etc/dfs/rmtab
这个表中记录了本地的NFS资源被那些客户端成功的挂接。就是说当客户机的成功的完成了一个NFS挂接后,在server端的mountd进程则会自动向rmtab中加入记录,成功的umount的记录也会被记录在这个表中比如:
#cat /etc/dfs/rmtab
# The format of this file follows the syntax
# hostname:fsname
sys42:/export/sys44_data
#ys41:/usr/share/man
#ys43:/export/sys44_data
注意在前面加入了注释符的,表示client端已经成功的umount了NFS资源,在NFS SERVER重新启动以后这些加了#的条目会被系统启动的时候由mountd进程全部删除。
####################################################################
二、NFS的daemon
NFS进程默认只在系统运行至 level 3的时候才运行,其启动脚本是:/etc/rc3.d/S15nfs.server script
上面的表列出了NFS的所有进程:
1、 mountd进程检查读取/etc/dfs/sharetab文件,它为远程挂接客户端的mountd提供NFS资源的handle,并且由/etc/dfs/sharetab读取结果提供访问控制。
2、 nfsd进程收到客户端的NFS请求的NFS资源的handle并且回答客户的访问请求,它只能由root用户启动。
3、 statd和lockd进程
这2个进程是一起工作的,statd总是和lockd进程一起工作,
提供如客户端或服务器端掉线,down机,reboot等对NFS资源的恢复和维护进程作用,比如服务器端要求reboot,那么server上的statd便和客户端的statd联系,客户端的statd便告知本机的lockd进程收回所有在server端的lock的访问进程。反过来客户端要求reboot,那么client上的statd便和server端的statd联系,server端的statd便告知本机的lockd进程清除所有在server端的有关于该client端的lock的访问进程。
4、 nfslogd进程
它存在于“/etc/default/nfslogd”
主要用于记录NFS的运转情况,NFS的kernel模块记录所有的NFS操作到一个buffer文件,而nfslogd daemon周期性的查阅这个buffer文件然后产生一个ASCII文件。
##########################################################
三、管理NFS的进程
启动:
# /etc/init.d/nfs.server start
/etc/rc3.d/S15nfs.server script
停止:
# /etc/init.d/nfs.server stop
The NFS server daemons are shut down when:
l The system enters run level 2 using the
/etc/rc2.d/K28nfs.server script
l The system enters run level 1 using the
/etc/rc1.d/K28nfs.server script
l The system enters run level S using the
/etc/rcS.d/K28nfs.server script
l The system enters run level 0 using the
/etc/rc0.d/K28nfs.server script
NFS的命令:
NFSserver实列:
共享 主机server1上的/data文件夹给名为study1的主机使其具有rw权限,对于其他用户给予ro的权限
a.首先编辑/etc/dfs/dfstab文件加入如下内容:
share -F nfs -o ro,rw=study1 /data
b.执行shareall命令共享本机/etc/dfs/dfstab中记录的NFS资源:
c.执行/etc/init.d/nfs.server start命令启动NFS进程。
NFSclient:
Client只运行statd和lockd2个进程,其启动脚本为:
/etc/rc2.d/S73nfs.client script,需要注意的是,NFS的客户进程在level 2 的时候就启动了,也就是说在level 2 的时候虽然自己不能提供NFS服务但是却可以挂接其它机器的NFS资源。
/etc/init.d/nfs.client start
/etc/init.d/nfs.client stop
NFS客户端的命令:
umountall&mountall:
默认的情况下umount命令将卸下除了“/”分区以外的所有分区比如“/usr, /var, /var/adm, /var/run, /proc, and /dev/fd 等,
mountall命令将挂载所有在/etc/vfstab里面有条目的资源。如果2个命令都使用了“-r”选项,则表示只对远程的资源进行操作。
Mount options:
nfslogd:
它的配置文件位于:/etc/nfs/nfslogd.conf
内容:
# cat /etc/nfs/nfslog.conf
#ident "@(#)nfslog.conf 1.5 99/02/21 SMI"
#
.
.
# NFS server log configuration file.
#
global defaultdir=/var/nfs
log=nfslog fhtable=fhtable buffer=nfslog_workbuffer
public defaultdir=/var/nfs/public
log=nfslog fhtable=fhtable buffer=nfslog_workbuffer
注解:
The default directory is the /var/nfs/public directory.
The log is stored in the /var/nfs/public/nfslog file.
The /var/nfs/public/fhtables file stores the
file-handle-to-pathdatabase.
The /var/nfs/public/nfslog_workbuffer file stores the buffer.
初始化一个NFSLOG
&: share -F nfs -o ro,log /export/sys44_data
注意options中多了一个log的选项!
/etc/default/nfslogd
四、Troubleshooting NFS Errors
共有9种错误:
&:nfs mount: server1:: RPC: Rpcbind failure
RPC: Timed Out
nfs mount: retrying: /mntpoint
服务器负荷过重,资源已接近临界状态,或者是hosts数据库中的数据有误比如错误的IP地址或者是错误的主机名,或者是server 端的hosts数据库停止工作。
主要原因可能是由于server或client中有一个DOWN机造成。
Setting default interface for multicast: add net 224.0.0.0: gateway:
client_node_name.
这可能是由于client端在/etc/vfstab中使用了fg的挂载参数,首先STOP + A进入OK模式,将系统启动到 level 1 手工编辑/etc/vfstab文件将有关NFS远程资源的那一行用“#”注释掉,然后使系统运行至level 3 ,然后取消注释,重启动NFS进程。或者把vfstab中的options的fg改为bg, 然后正常启动至level 3。
nfs mount: dbserver: NFS: Service not responding
nfs mount: retrying: /mntpoint
应该是由于NFS进程没有运行,确定系统正运行在level-3 (who -r)
再检查NFS进程是否启动(ps –ef| grep nfs),如果没有,则运行“/etc/init.d/nfs.server start”
The program not registered Error
&:nfs mount: dbserver: RPC: Program not registered
nfs mount: retrying: /mntpoint
1、 确定系统在level-3运行,如果不是则执行“init 3”命令
2、 执行:pgrep –xl mountd 检查mountd是否运行,如果没有,首先运行 /etc/init.d/nfs.server stop
然后运行:/etc/init.d/nfs.server start
3、 检查 /etc/dfs/dfstab 里面的条目是否有错。
The stale NFS file handle Error
&:stale NFS file handle
极大的可能是由于server上的NFS资源已经被移走,,最好的办法是重新挂载或卸载旧的NFS资源。
The unknown host Error
&:nfs mount: server1:: RPC: Unknown host
hosts数据库有问题,检查hosts数据库中的主机的node名是否被支持。
The mount point Error
&:mount: mount-point /DS9 does not exist
client端的挂载点不存在,或者path不正确或者拼写有错误。
The no such file Error
检查server端是否有该NFS资源,检查是否有拼写错误,检查/etc/vfstab。