我有一组服务器需要两个 nfs 共享,一些服务器需要访问其中一个共享,而所有服务器都需要访问另一个共享。NFS 服务器是 ubuntu 12.04,其他的是 13.04 这是我在 nfs 服务器上的导出
/u0/logshare/ 172.1.1.0/24(rw,fsid=0,insecure,no_subtree_check,async)
/vmail1/ 172.1.1.64/27(rw,fsid=0,no_subtree_check,async,anonuid=2000,anongid=2000) 172.1.1.36(rw,fsid=0,no_subtree_check,async,anonuid=2000,anongid=2000)
两者都位于不同的分区上,logshare 是 ext4,而 vmail 是 xfs,不知道这是否相关。
以下是客户端服务器上 fstab 中的内容
172.1.1.15:/vmail1 /vmail1 nfs hard,intr,auto 0 0
172.1.1.15:/u0/logshare /logshare nfs hard,intr,auto 0 0
但这是我重启后得到的结果
172.1.1.15:/u0/logshare 4.1G 158M 3.8G 4% /logshare
172.1.1.15:/vmail1 4.1G 158M 3.8G 4% /vmail1
它只是挂载了两次日志共享。如果我反转导出的顺序,它就会挂载两次 vmail。发生了什么?我查看了日志,但没有看到任何与 nfs 相关的错误
Showmount -e 显示此
/vmail1 172.1.1.35,172.1.1.64/27 /u0/logshare 172.1.1.0/24
并且两个安装的内容相同
答案1
您应该开始说这是一个 NFSv4 服务器。
问题出在您的/etc/exports
文件中。您用标志声明了这两个资源fsid=0
。这是错误的。
阅读exports(5)
了解详细信息,但基本上:
For NFSv4, there is a distinguished filesystem which is the root of all exported filesystem.
This is specified with fsid=root or fsid=0 both of which mean exactly the same thing.
即你只能声明一根。
常见的做法(尽管其他人可能有不同的做法)是为您计划导出的资源创建专用的 LV(根据需要格式化,,,ext4
... ),并将它们置于受控的目录结构下。例如:xfs
mount
/var/exports/foo
/var/exports/bar
/var/exports/baz
然后,mount
将这些资源绑定到/srv/nfsv4/
,结果如下:
# tree /srv/nfsv4/
/srv/nfsv4/
├── bar
├── baz
└── foo
这样,您可以根据需要声明/srv/nfsv4
并fsid=0
导出其余资源。
请注意,中的访问限制(通过 IP 或sec
选择的模式)适用fsid=0
,因此不满足要求的客户端fsid=0
将无法挂载资源,即使满足特定资源的要求。