FAQ セクションです。この節の一部は Alan Cox によって書かれた 昔の NFS FAQ をもとにしています。
ファイルシステムのマウントの際に問題が生じたら、 その問題が マウントのチェックリスト の節に記述されていないか見てください。
これは古い版の nfsd にあるバグが原因です。 nfs-server2.2beta16 以降 では修正されています。
can't register with portmap: system error on send
Caldera のシステムをお使いではありませんか?このシステムには rc スクリプトにバグがあります。 Caldera に連絡して修正版を手に入れて下さ い。
効率上の理由で、 nfsd が open ファイルハンドラをキャッシュするから です (nfsd がユーザ領域で実行されていることを思い出して下さい)。 nfsd がファイルをオープンしている間 (つまりそのファイルに書き込みを行った後) には、カーネルはそのファイルに実行許可を与えません。 95 年の春以降の nfsd では、このファイルハンドラのリリースは数秒で終了しますが、古いも のでは数日もキャッシュしたままのこともあります。
Linux の NFS サーバはデフォルトではリードオンリーです。
この HOWTO の
mountd と nfsd
および
ファイルシステムをエクスポートする
の節を読んでください。
exports と nfsd の man ページを参照してください。
/etc/exports
を修正する必要があるでしょう。
ls
が
動作している間にファイルの読み書きができなくなります。
古いバージョンでは rsize=1024,wsize=1024
をつけてマウントする
必要があります。
基本的には、その範囲以外のブロックサイズを使って下さい。 これは 2.0 と 2.2 カーネルでは起こらないはずです。 私が覚えている限りでは、 1.2 でも起こりませんでした。
今のところできません。
NFS を使うユーザの所属するグループが 8 つ以内に収まっていることを確 認して下さい。古いサーバではこの条件が必要なことがあります。
リブートや停止するときには NFS サーバを umount せず、単に無視して下
さい。 umount しなければ何も問題を起こすことはありません。コマンドは
umount -avt nonfs
となります。
NFS の書き込みは通常同期的に行われます (もしデータを失う危険性を気 にしなければこれを無効にすることもできます)。悪いことに、BSD から由来 したカーネルにおいては、小さなブロックにおいてこれがうまく機能しない場 合があるのです。例えば Linux から 4K のデータを 1K のパケットに分けて 書き込もうとすると、 BSD は以下のような動作を行います。
read 4K page
alter 1K
write 4K back to physical disk
read 4K page
alter 1K
write 4K page back to physical disk
etc..
NFS プロトコルはフラグメント化された UDP パケットを用います。
カーネルには、不完全なパケットのフラグメントを、送出前にいくつ
まで持てるかという制限値があります。 2.2 では、これは /proc
ファイルシステムの /proc/sys/net/ipv4/ipfrag_high_thresh
と ipfrag_low_thresh
を通して実行時に変更可能です。
2.0 では、これらはコンパイル時の定数で、
.../linux/net/ipv4/ip_fragment.c
で定義されている
IPFRAG_HIGH_THRESH
と IPFRAG_LOW_THRESH
が該当します。これらの値の意味は、一緒にされる前の
UDP フラグメントによるメモリ消費が ``ipfrag_high_thresh''
バイトに達したら (2.2.3 と 2.0.36 でのデフォルトは 256K)、
一度 ``ipfrag_low_tresh'' の大きさに切り捨ててしまう、と
いうことなのです。これがフラグメントを投げる前に行われます。
これはほとんどパケットロスと同じように見え、したがって
高いほうの閾値に達すると、サーバの性能が非常に落ちるのです。
30 クライアントまでなら 256K で充分でしょう。 60 クライアントなら二倍にしましょう。低いほうの閾値も二倍にしましょう。
knfsd は、自分が NFS version 3 を実装しているとアナウンスします。
が、実際にはしていません。このアナウンスを止めるオプションがあるので、
これを用いてください。あるいはクライアントのマウントオプションリストに
"vers=2
" を追加してもいいでしょう。
mount: 1831-011 access denied for server:/dir
mount: 1831-008 giving up on:
server:/dir
The file access permissions do not allow the specified action.
AIX 4.2 は NFS に特権ポート (<1024) を使います。 AIX 4.2.1 と 4.3 はこれ以外のポートでも使えます。また AIX 4.2.1 と 4.3 ではまず NFS3 でマウントしようとし、続いて NFS/TCP で、そして最後に NFS/UDP を試します。
rc.tcpip
の最後に
nfso -o nfs_use_reserved_ports=1
を追加すれば、特権ポートを使うように強制できます。 (この技は Braian Gorka より寄せられました)