LinuxのNFS4に少し悩まされてきました。 「そこにある」情報の一部は他の情報と競合しているようで、他の情報は見つけにくいようです。だからここに私の注意を引いたいくつかのことがある、うまくいけば誰かがこれにいくつかの光を当てることができる。
この質問は、Kerberosなどを使用しないNFS4にのみ焦点を当てています。
/ etc/exportsの構造に関するexports
マンページには、あいまいな情報があります。
exports(5)
から引用するには:
また、各行には、パス名の後にデフォルトオプションの1つ以上の指定があり、ダッシュ( "-")の後にオプションリストが続きます。
オプションリストは、その行の後続のすべてのエクスポートにのみ使用されます。
「その行のみの後続のエクスポート」とはどういう意味ですか?
fsid=0
_はもう必要ありませんか?linux-nfsリストのコメント を見つけたとき、私はfsidを探していました。= fsid = 0はもう必要ないことを示しています。今私は混乱していますが、nfs4でそれが必要ですか?
次のツリーがあるとします。
_/exp
/exp/users
/exp/distr
/exp/distr/archlinux
/exp/distr/debian
_
そして、このfstabエントリに次のエントリがあります。
_/dev/disk/by-label/users /mnt/users ext4 defaults 0 0
/dev/disk/by-label/distr /mnt/distr ext4 defaults 0 0
/mnt/users /exp/users none bind 0 0
/mnt/distr /exp/distr none bind 0 0
_
そして私の輸出はまさにこれです:
_/exp 192.168.1.0/24(fsid=0,rw,async,no_subtree_check,no_root_squash)
/exp/distr 192.168.1.0/24(rw,async,no_subtree_check,no_root_squash)
_
そして_exportfs -arv
_は以下を示します:
_exporting 192.168.1.0/24:/exp/distr
exporting 192.168.1.0/24:/exp
_
次に、なぜこれを行うことができ、クライアントでエラーが発生しないのですか?
_mount -t nfs4 server:/exp/users /tmp/test
_
_/exp/users
_はエクスポートされませんが?このディレクトリはエクスポートしませんでした。crossmnt
を指定しない限り、_/dev/disk/by-label/users
_の内容は表示されませんが、ディレクトリに書き込むことはできます。私がそこに書き込むものはすべて、_/exp/users
_の基になるディレクトリに移動します。このディレクトリは、_umount /exp/users; ls /exp/users
_ ..
showmount -d server
_の奇妙なケースrpc.mountd(8)
で述べたように、このコマンドは、現在クライアントによってマウントされているディレクトリ、または_/var/lib/nfs/rmtab
_の古いエントリを表示できます。
Rpc.mountdデーモンは、/ var/lib/nfs/rmtabファイルにエントリを追加して、成功したすべてのMNT要求を登録します。 NFSクライアントからUMNT要求を受信すると、rpc.mountdは、そのエクスポートのアクセス制御リストがその送信者によるエクスポートへのアクセスを許可している限り、一致するエントリを/ var/lib/nfs/rmtabから削除するだけです。
(...)
ただし、/ var/lib/nfs/rmtabの内容が正確であることを保証するものはほとんどないことに注意してください。クライアントは、UMNTを呼び出した後でもエクスポートにアクセスし続ける場合があります。 UMNTリクエストを送信せずにクライアントを再起動すると、そのクライアントの古いエントリが/ var/lib/nfs/rmtabに残ります。
これを読んだ後、きっと私は疑問に思います:
mount -v
_を使用してnfs4ディレクトリをマウントするクライアントが、何かwasがマウントされていても、「何もマウントされていません」のような出力を表示するのはこのためですか?Nfs4については他にもたくさん質問がありますが、とりあえずここに留めておきます。:)
素晴らしい質問です。IMOのドキュメント化で、より大きなポイントを強調しています。これは完全な答えの試みです:
ここで例がおそらく最も簡単です。
/export/stuff -rw 10.0.0.54 10.0.0.55
以下と同等です。
/export/stuff 10.0.0.54(rw) 10.0.0.55(rw)
fsid=0
もう必要ありませんか?これは、ユースケースによって異なります。残りのクエリから通常のディスクベースのファイルシステムをエクスポートしているようです。その場合は、fsid=0
(nfsv4では、エクスポートのルートファイルシステムを参照するように動作が変更されます)。
この動作を変更するには、no_subtree_checkオプションを削除します
rmtab
関連のものrmtab
の処理はセキュリティリスクですか?rmtab
が古いエントリでいっぱいにならないか?mount -v
誤って「何もマウントされていません」と表示されますか?