すべてのNFS操作はファイルハンドル(NFS-FH)を使用して、処理対象のファイルまたは、ディレクトリを一意に抽出し、対象を操作する。~
~
NFS-FHを構成するには大体以下の内容の物が含まれます。~
なおNFS-FHを生成するのはNFSサーバ側です。~
1.ファイルシステムID~
2.エクスポートしているディレクトリID~
3.対象ファイルを特定するID~
4.世代番号~
※NFS-FH構造
~
NFS-FHを構成するには大体以下の内容の物が含まれます。~
なおNFS-FHを生成するのはNFSサーバ側です。~
1.ファイルシステムID~
2.エクスポートしているディレクトリID~
3.対象ファイルを特定するID~
4.世代番号~
※NFS-FH構造
ファイルハンドルタイプが0の場合(子のみの形式(親は含まない))
fh[0] :iノード番号等(FSファイルハンドル)
fh[1] :世代番号
ファイルハンドルタイプが1の場合(親も含めた形式)
fh[0] :iノード番号等(ファイルハンドル)
fh[1] :世代番号
fh[2] :親のiノード番号等(ファイルハンドル)
fh[3] :親の世代番号等
開発したのは、Sun Microsystems社~
Network File System ネットワーク型共有ファイル共有システム。~
version 2やversion 4もある。~
version 2とversion 3の違いは大きくは以下の3つ~
※commit closeやバッファ空間枯渇によりcommitし、writeを完了させる。~
Network File System ネットワーク型共有ファイル共有システム。~
version 2やversion 4もある。~
version 2とversion 3の違いは大きくは以下の3つ~
NFS | version 2 | version 3 |
ファイルサイズ | 4GB(2GB)までサポート | 2^64-1までサポート |
書き込み等 | 常にシリアライズで書き込み(遅い) | commitまで他の処理が可能(速い) |
通信サイズ | 8192バイト制限 | クライアント/サーバ間で制限一致 |
一昔までversion 3が主流だった。1年前より徐々にversion 4が増えてきたらすぃ~
でもversion 4はまだまだ不安定(*´Д`)ハァハァ セキュリティ関連難しすぎ。。
でもversion 4はまだまだ不安定(*´Д`)ハァハァ セキュリティ関連難しすぎ。。
modprobe auth_rpcgss
modprobe rpcsec_gss_krb5
modprobe rpcsec_gss_spkm3
/etc/init.d/rpcidmapd stop
/etc/init.d/nfs stop
/etc/init.d/rpcgssd stop
/etc/init.d/portmap stop
/etc/init.d/nfslock stop
/etc/init.d/nfslock start
/etc/init.d/portmap start
/etc/init.d/rpcgssd start
/etc/init.d/nfs start
/etc/init.d/rpcsvcgssd restart
/etc/init.d/rpcidmapd restart
sys_nfsservctl //システムコールの入り口 (CONFIG_NFSD有効時)
+- switch (cmd)
+- nfsctl_svc() // This is a server process
+- nfsctl_addclient() // Add an NFS client
+- nfsctl_delclient() // Remove an NFS client
+- nfsctl_export() // export a file system
+- nfsctl_unexport() // unexport a file system
+- nfsctl_getfh() // get an fh by ino (used by mountd)
+- nfsctl_getfd() // get an fh by path (used by mountd)
+- nfsctl_getfs() // get an fh by path with max FH len
NFSv3のRPCに登録する?
#define PROC(name, argt, rest, relt, cache) \
{ (svc_procfunc) nfsd3_proc_##name, \
(kxdrproc_t) nfs3svc_decode_##argt##args, \
(kxdrproc_t) nfs3svc_encode_##rest##res, \
(kxdrproc_t) nfs3svc_release_##relt, \
sizeof(struct nfsd3_##argt##args), \
sizeof(struct nfsd3_##rest##res), \
0, \
cache \
}
struct svc_procedure nfsd_procedures3[22] = {
PROC(null, void, void, void, RC_NOCACHE),
PROC(getattr, fhandle, attrstat, fhandle, RC_NOCACHE),
PROC(setattr, sattr, wccstat, fhandle, RC_REPLBUFF),
PROC(lookup, dirop, dirop, fhandle2, RC_NOCACHE),
PROC(access, access, access, fhandle, RC_NOCACHE),
PROC(readlink, fhandle, readlink, fhandle, RC_NOCACHE),
PROC(read, read, read, fhandle, RC_NOCACHE),
PROC(write, write, write, fhandle, RC_REPLBUFF),
PROC(create, create, create, fhandle2, RC_REPLBUFF),
PROC(mkdir, mkdir, create, fhandle2, RC_REPLBUFF),
PROC(symlink, symlink, create, fhandle2, RC_REPLBUFF),
PROC(mknod, mknod, create, fhandle2, RC_REPLBUFF),
PROC(remove, dirop, wccstat, fhandle, RC_REPLBUFF),
PROC(rmdir, dirop, wccstat, fhandle, RC_REPLBUFF),
PROC(rename, rename, rename, fhandle2, RC_REPLBUFF),
PROC(link, link, link, fhandle2, RC_REPLBUFF),
PROC(readdir, readdir, readdir, fhandle, RC_NOCACHE),
PROC(readdirplus,readdirplus, readdir, fhandle, RC_NOCACHE),
PROC(fsstat, fhandle, fsstat, void, RC_NOCACHE),
PROC(fsinfo, fhandle, fsinfo, void, RC_NOCACHE),
PROC(pathconf, fhandle, pathconf, void, RC_NOCACHE),
PROC(commit, commit, commit, fhandle, RC_NOCACHE)
};
nfsd3_proc_lookup
+- nfsd_lookup
+ fh_verify
+- fh_lock
+- lookup_one // in "fs/namei.c"
| +- lookup_hash // in "fs/namei.c"
| +- cached_lookup // in "fs/namei.c"
| +- if (NULL) base->d_inode->i_op->lookup()
+- fh_compose
I/Oの度にfileを作っている
nfsd3_proc_read
+- nfsd_read
+- nfsd_open(rqstp, fhp, S_IFREG, MAY_READ, &file) //dentryからfile作成
+- nfsd_get_raparms // Get readahead parameters
+- set_fs(KERNEL_DS)
+- file.f_op->read(&file, buf, *count, &file.f_pos)
+- nfsd_close(&file)
コメントをかく