跳到主要内容

2. RPC Information (RPC 信息)

2.1 认证 (Authentication)

NFS 服务在 NULL 过程中使用 AUTH_NONE. 所有其他过程使用 AUTH_UNIX, AUTH_DES 或 AUTH_KERB. 未来可能支持其他认证类型.

2.2 常量 (Constants)

以下是调用 NFS 版本 3 服务所需的 RPC 常量. 它们以十进制形式给出.

PROGRAM  100003
VERSION 3

2.3 传输地址 (Transport address)

NFS 协议通常在 TCP 和 UDP 协议上受支持. 它使用端口 2049, 与 NFS 版本 2 协议相同.

2.4 大小 (Sizes)

以下是 NFS 版本 3 协议中使用的各种 XDR 结构的大小, 以十进制字节为单位:

NFS3_FHSIZE 64

  • 不透明文件句柄 (file handle) 的最大大小 (字节).

NFS3_COOKIEVERFSIZE 8

  • READDIR 和 READDIRPLUS 传递的不透明 cookie 验证器的大小 (字节).

NFS3_CREATEVERFSIZE 8

  • 用于独占 CREATE 的不透明验证器的大小 (字节).

NFS3_WRITEVERFSIZE 8

  • 用于异步 WRITE 的不透明验证器的大小 (字节).

2.5 基本数据类型 (Basic Data Types)

以下 XDR 定义是在其他结构中使用的基本定义.

uint64
typedef unsigned hyper uint64;

int64
typedef hyper int64;

uint32
typedef unsigned long uint32;

int32
typedef long int32;

filename3
typedef string filename3<>;

nfspath3
typedef string nfspath3<>;

fileid3
typedef uint64 fileid3;

cookie3
typedef uint64 cookie3;

cookieverf3
typedef opaque cookieverf3[NFS3_COOKIEVERFSIZE];

createverf3
typedef opaque createverf3[NFS3_CREATEVERFSIZE];

writeverf3
typedef opaque writeverf3[NFS3_WRITEVERFSIZE];

uid3
typedef uint32 uid3;

gid3
typedef uint32 gid3;

size3
typedef uint64 size3;

offset3
typedef uint64 offset3;

mode3
typedef uint32 mode3;

count3
typedef uint32 count3;

nfsstat3

enum nfsstat3 {
NFS3_OK = 0,
NFS3ERR_PERM = 1,
NFS3ERR_NOENT = 2,
NFS3ERR_IO = 5,
NFS3ERR_NXIO = 6,
NFS3ERR_ACCES = 13,
NFS3ERR_EXIST = 17,
NFS3ERR_XDEV = 18,
NFS3ERR_NODEV = 19,
NFS3ERR_NOTDIR = 20,
NFS3ERR_ISDIR = 21,
NFS3ERR_INVAL = 22,
NFS3ERR_FBIG = 27,
NFS3ERR_NOSPC = 28,
NFS3ERR_ROFS = 30,
NFS3ERR_MLINK = 31,
NFS3ERR_NAMETOOLONG = 63,
NFS3ERR_NOTEMPTY = 66,
NFS3ERR_DQUOT = 69,
NFS3ERR_STALE = 70,
NFS3ERR_REMOTE = 71,
NFS3ERR_BADHANDLE = 10001,
NFS3ERR_NOT_SYNC = 10002,
NFS3ERR_BAD_COOKIE = 10003,
NFS3ERR_NOTSUPP = 10004,
NFS3ERR_TOOSMALL = 10005,
NFS3ERR_SERVERFAULT = 10006,
NFS3ERR_BADTYPE = 10007,
NFS3ERR_JUKEBOX = 10008
};

2.6 定义的错误号 (Defined Error Numbers)

NFS3_OK = 0

  • 表示调用成功完成, 服务器承诺执行了与该调用关联的所有语义.

NFS3ERR_PERM = 1

  • 不允许操作.

NFS3ERR_NOENT = 2

  • 没有这样的文件或目录. 指定的文件或目录不存在.

NFS3ERR_IO = 5

  • 某种形式的硬件 I/O 错误发生.

NFS3ERR_NXIO = 6

  • 没有这样的设备或地址.

NFS3ERR_ACCES = 13

  • 权限被拒绝. 调用者没有正确的权限来执行请求的操作.

NFS3ERR_EXIST = 17

  • 文件已存在.

NFS3ERR_XDEV = 18

  • 尝试跨设备硬链接.

NFS3ERR_NODEV = 19

  • 没有这样的设备.

NFS3ERR_NOTDIR = 20

  • 不是目录. 调用者指定了一个非目录, 而需要一个目录.

NFS3ERR_ISDIR = 21

  • 是目录. 调用者指定了一个目录, 而需要一个非目录对象.

NFS3ERR_INVAL = 22

  • 无效的参数或不支持的参数用于操作.

NFS3ERR_FBIG = 27

  • 文件太大. 操作会导致文件增长超过服务器对文件大小的限制.

NFS3ERR_NOSPC = 28

  • 设备上没有剩余空间. 操作会导致服务器超出其对文件系统可用的存储空间的限制.

NFS3ERR_ROFS = 30

  • 只读文件系统. 尝试写入只读文件系统.

NFS3ERR_MLINK = 31

  • 太多链接.

NFS3ERR_NAMETOOLONG = 63

  • 文件名太长. 返回的名称对于客户端来说太长了.

NFS3ERR_NOTEMPTY = 66

  • 目录不为空.

NFS3ERR_DQUOT = 69

  • 超出资源 (配额) 限制.

NFS3ERR_STALE = 70

  • 无效的文件句柄. 服务器收到的文件句柄无效.

NFS3ERR_REMOTE = 71

  • 对象是远程的.

NFS3ERR_BADHANDLE = 10001

  • 非法 NFS 文件句柄. 服务器无法解释文件句柄.

NFS3ERR_NOT_SYNC = 10002

  • SETATTR 上的更新同步不匹配.

NFS3ERR_BAD_COOKIE = 10003

  • READDIR 或 READDIRPLUS cookie 无效.

NFS3ERR_NOTSUPP = 10004

  • 不支持操作.

NFS3ERR_TOOSMALL = 10005

  • 缓冲区或请求太小.

NFS3ERR_SERVERFAULT = 10006

  • 服务器出错. 服务器遇到了错误. 此错误应该在临时错误情况下使用, 其中用户可以重试请求.

NFS3ERR_BADTYPE = 10007

  • 对象类型不正确.

NFS3ERR_JUKEBOX = 10008

  • 服务器启动了检索过程, 但尚未完成. 客户端应该在延迟后重试请求.