NFS
[FreeBSD]
FreeBSDでのnfsd
- /usr/src/usr.sbin/nfsd.c
- 引数およびソケットの解析をしnfssvc()を呼んでいる
NFS2の動作について
- 通常のアプリケーションが、ファイルアクセスを実行
- その要求は、OS カーネルに届く
- カーネルは、そのファイルシステムが、NFS 経由でネットワーク上にあると識別し、 NFS クライアントへ要求を受け渡す
- NFS クライアントは、RPC コールを実施
- RPC は、UDP/IP を利用して、NFS サーバのあるホストへ要求を渡す
- NFS サーバのホストの UDP/IP モジュールは、要求を RPC サーバへ渡す
- RPC サーバが、NFS サーバへ要求を渡す
- NFS サーバが、サーバのカーネルのローカルファイルアクセスを要求
- サーバのカーネルがファイルアクセスを実施
- 結果を戻していく(以下省略)
RPCメモ
ファイルアトリビュート
struct nfs_fattr {
u_int32_t	fa_type;
u_int32_t	fa_mode;
u_int32_t	fa_nlink;
u_int32_t	fa_uid;
u_int32_t	fa_gid;
union {
	struct {
		u_int32_t	nfsv2fa_size;
		u_int32_t	nfsv2fa_blocksize;
		u_int32_t	nfsv2fa_rdev;
		u_int32_t	nfsv2fa_blocks;
		u_int32_t	nfsv2fa_fsid;
		u_int32_t	nfsv2fa_fileid;
		nfstime2	nfsv2fa_atime;
		nfstime2	nfsv2fa_mtime;
		nfstime2	nfsv2fa_ctime;
	} fa_nfsv2;
	struct {
		nfsuint64	nfsv3fa_size;
		nfsuint64	nfsv3fa_used;
		nfsv3spec	nfsv3fa_rdev;
		nfsuint64	nfsv3fa_fsid;
		nfsuint64	nfsv3fa_fileid;
		nfstime3	nfsv3fa_atime;
		nfstime3	nfsv3fa_mtime;
		nfstime3	nfsv3fa_ctime;
	} fa_nfsv3;
} fa_un;
};