分类: LINUX
2012-02-25 17:31:05
使用的协议必须与UNIX系统无关,这样NFS Server就可以为各种不同类型的客户端提供文件访问服务。协议也应该足够简单,以便可以在PC这样的低端机器上实现。故障恢复
当客户端挂载(mount)不同服务器上的远程文件系统时,客户端能够非常方便地从服务器故障中恢复是非常重要的。透明访问
我们希望NFS让应用程序使用和访问本地文件一样的方式访问远程文件,而不需要进行额外的路径传递、特殊函数库链接或者重新编译。应用程序应该无法感知到当前使用的文件是在本地或是在远程文件系统上。保持客户端UNIX操作语义
需要对远程文件实现和本地文件相同的UNIX文件操作语义。合理的性能
如果NFS的性能不能比rcp等网络工具更快,即使它更易于使用,用户也不会考虑使用。我们的设计目标是让NFS的性能与Sun网络磁盘协议(Sun Network Disk protocol)一样快,或者相当于本地磁盘80%的性能。3 基本设计
不执行任何操作,有两个作用:相当于到服务器的ping,以及检测客户端和服务器间的RTT(Round Trip Time)。lookup(dirfh, name) 返回(fh, attr)
返回目录中一个指定文件的fhandle和属性信息。create(dirfh, name, attr) 返回(newfh, attr)
创建一个新文件并且返回它的fhandle和属性信息。remove(dirfh, name) 返回(status)
从指定目录中删除文件。getattr(fh) 返回(attr)
返回文件属性信息。这个调用类似于一个stat调用。setattr(fh, attr) 返回(attr)
设置一个文件的mode,uid,gid,size,access time,modify time属性。将文件大小设置为0相当于对文件调用truncate。read(fh, offset, count) 返回(attr, data)
从文件的offset偏移处开始,返回最多count个字节的数据。read操作也返回文件的属性信息。write(fh, fh, offset, count, data) 返回(attr)
向文件offset偏移处开始,写入count字节的数据,返回写操作完成后的文件属性信息。rename(dirfh, name, tofh, toname) 返回(status)
将dirfh目录中名为name的文件,重命名为tofh目录中名为toname的文件。link(dirfh, name, tofh, toname) 返回(status)
在tofh目录中创建名为toname的链接,指向dirfh目录中的name文件。symlink(dirfh, name, string) 返回(status)
在dirfh目录中创建一个名为name的符号链接。服务器不解释string的具体内容,而只是简单将其保存起来并且与符号链接文件相关联。mkdir(dirfh, name, attr) 返回(fh, newattr)
在dirfh目录中创建名为name的目录,并返回其fhandle和属性信息。rmdir(dirfh, name) 返回(status)
从dirfh中删除名为name的空目录。readdir(dirfh, cookie, count) 返回(entries)
从dirfh目录返回组多count字节的目录项信息。每个目录项信息包含了一个文件名,文件id,和一个由服务器解释的指向下一个目录项的指针cookie。cookie的作用是在后续readdir操作中从一个指定的位置返回目录项信息。cookie为0的readdir调用从目录的第一个目录项开始返回。statfs(fh) 返回(fsstats)
返回块大小、空闲块数等文件系统的信息。
mount(varies) 挂载文件系统的系统调用
mount_root() 将文件系统挂载为根文件系统
unmount(vfs) 文件系统卸载
root(vfs) 返回 (vnode) 返回文件系统根VNode
statfs(vfs) 返回(fsstatbuf) 返回文件系统统计信息
sync(vfs) 将延迟写的块提交到存储介质
open(vnode, flags) 标记一个文件打开了
close(vnode, flags) 标记一个文件关闭了
rdwr(vnode, uio, rwflags, flags) 读或者写一个文件
ioctl(vnode, cmd, data, rwflag) 执行IO控制操作
select(vnode, rwflag) 执行select操作
getattr(vnode) 返回(attr) 返回文件属性信息
access(vnode, attr) 设置文件属性信息
lookup(dvnode, name) 返回(vnode) 在目录中查找文件名
create(dvnode, name, attr, excl, mode) 返回(vnode) 创建一个文件
remove(dvnode, name) 删除目录中的文件
link(vnode, todvnode, toname) 创建到文件的链接
rename(dvnode, name, todvnode, toname) 重命名文件
rmdir(dvnode, name) 删除一个目录
readdir(dvnode) 返回(entries) 读取目录项
symlink(dvnode, name, attr, to_name) 创建一个符号链接
readlink(vp) 返回(data) 读取符号链接的数据
fsync(vnode) 提交文件的脏块
inactive(vnode) 标记vnode非活跃并执行清理
bmap(vnoe, blk) 返回(devnode, mappedblk) 映射块号
strategy(bp) 读写文件系统块
bread(vnode, blockno) 返回(buf) 读一个块
brelse(vnode, buf) 释放一个块buffer