我有一台服务器,里面保存着 ZFS 快照,我通过 NFS 将这些快照导出到它们正在备份的服务器,这样你就可以通过内部编写的自定义应用程序进行恢复。问题如下:
注意:我出于原因不使用 ZFS 内置 NFS,所以请不要告诉我使用它!
这都是 NFS v4
主机运行的是 CentOS 6.2 客户端运行的是 CentOS 5.7
我在主机上默认启动了8个nfs服务器。
在保存 NFS 共享的备份服务器上,我可以根据需要深度遍历目录结构并查看所有预期文件。
在客户端,我可以遍历文件系统,但有时,它看起来确实是随机的,当我深入 2 个或更多目录时,我最终会看到来自另一台服务器的文件。
以下是一个例子:
[NFSSERVER /nfs/share]# ls -l
total 60
drwx--x--x 30 root root 4096 Feb 25 00:15 20120225
drwx--x--x 30 root root 4096 Feb 26 00:05 20120226
drwx--x--x 30 root root 4096 Feb 27 00:06 20120227
.....
很快
[NFSCLIENT /app/backups]# ls -l
total 60
drwx--x--x 30 nobody nobody 4096 Mar 2 00:25 20120225/
drwx--x--x 30 nobody nobody 4096 Mar 2 00:25 20120226/
drwx--x--x 30 nobody nobody 4096 Mar 2 00:25 20120227/
......
很快
您可以看到它们是相同的,正如它们应该的那样。
这就是问题开始的地方。如果我进入:
[NFSCLIENT /app/backups/20120225/home] # ls -l
当我在客户端上运行这个 ls -l 时有时我看到了正确的文件,有时我会看到另一台服务器的主目录。
如果我必须[NFSSERVER /nfs/share/20120225/home]# ls -l
当我运行这个 ls -l 时,我可以看到正确的文件。如果我删除 /nfs/share/ 中的一个文件夹,我可以立即在客户端上看到结果。只有当我更深入地查看时,我才能看到这些“交叉安装”的文件系统。
这是我的 /etc/exports 的一部分(主机名已更改)
/nfs *.domain.com(fsid=0,ro,nohide,no_root_squash)
/nfs/server1/20120308 *.domain.com(ro,nohide,no_root_squash)
/nfs/server1/20120309 *.domain.com(ro,nohide,no_root_squash)
/nfs/server1/20120310 *.domain.com(ro,nohide,no_root_squash)
/nfs/server1/20120311 *.domain.com(ro,nohide,no_root_squash)
/nfs/server2/20120308 *.domain.com(ro,nohide,no_root_squash)
/nfs/server2/20120309 *.domain.com(ro,nohide,no_root_squash)
/nfs/server2/20120310 *.domain.com(ro,nohide,no_root_squash)
/nfs/server2/20120311 *.domain.com(ro,nohide,no_root_squash)
/nfs/server3/20120204 *.domain.com(ro,nohide,no_root_squash)
/nfs/server3/20120205 *.domain.com(ro,nohide,no_root_squash)
/nfs/server3/20120206 *.domain.com(ro,nohide,no_root_squash)
/nfs/server3/20120207 *.domaincom(ro,nohide,no_root_squash)
如果我从 etc exports 中删除除交叉安装行之外的所有行,然后重新加载导出文件(即,仅在 /etc/exports 中留下一个条目),它会显示客户端计算机上所有正确的目录。
那么,过时的 NFS 句柄?默认运行更多 NFS 服务器?还有别的吗?有什么想法吗?我已经为这个问题绞尽脑汁好几个星期了。
更新
这是我的脚本运行的代码行,用于设置要导出的目录:
mount -t ext4 -o noload,ro /dev/zvol/backups/$HOST@$DATE"-00" /nfs/$HOST/$DATE
/nfs/$HOST/$DATE 文件夹是正在导出的文件夹(如您在上面的导出文件中所见)
答案1
所以看起来是通配符导出的问题,如果你读过手册页,就会发现不推荐使用通配符导出。我以前读过,但出于某种原因没有修复它。我仍然认为这是一个“错误”,它应该理论上可行,但实际上却不行。
希望这对其他人有帮助。
我的新导出文件的示例:
/nfs server1.a2hosting.com(fsid=0,ro,nohide,no_root_squash)
/nfs/server1/20120320 server1.a2hosting.com(ro,nohide,no_root_squash)