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; };