我在Linux上被NFS4困扰了一下。 有些信息似乎与其他信息相冲突,其他信息似乎很难find。 所以这里有几件事引起了我的注意,希望有人能在这方面做点什么。
这个问题专注于没有Kerberos等的NFS4。
/ etc / exports结构中的exports
manpage中有不明确的信息。
从exports(5)
报价exports(5)
:
此外,每行可能有一个或多个默认选项的规格,path名后面是短划线(“ – ”),后跟选项列表。
选项列表仅用于该行上的所有后续导出。
“仅此后出口”是指什么?
fsid=0
不再需要了吗? 当我在linux-nfs列表中发现了一个注释,说fsid = 0不再需要的时候,我正在寻找fsid。 现在我只是困惑,我需要与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
不导出? 我没有导出这个目录,虽然我没有看到/dev/disk/by-label/users
的内容,除非我指定了crossmnt
,我仍然可以写入目录。 我写到那里的所有东西都进入了/exp/users
的底层目录,这可以在我umount /exp/users; ls /exp/users
时看到umount /exp/users; ls /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中简单地删除匹配项。
(……)
但是请注意,很less保证/ var / lib / nfs / rmtab的内容是准确的。 甚至在调用UMNT之后,客户端可能会继续访问导出。 如果客户端重新启动而没有发送UMNT请求,那么在/ var / lib / nfs / rmtab中保留该客户端的陈旧条目。
读完这个之后,我当然想知道:
mount -v
客户端看到输出“没有被挂载”的输出的原因,即使有东西被挂载? 我还有很多关于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
客户端错误地看到“没有被挂载”?